Sie sind auf Seite 1von 50

Medida do Tempo de Execuo de um Programa

David Menotti Algoritmos e Estruturas de Dados I DECOM UFOP

Medida do Tempo de Execuo de um Programa




O projeto de algoritmos fortemente influenciado pelo estudo de seus comportamentos. Depois que um problema analisado e decises de projeto so finalizadas, necessrio estudar as vrias opes de algoritmos a serem utilizados, considerando os aspectos de tempo de execuo e espao ocupado. Muitos desses algoritmos so encontrados em reas como pesquisa operacional, otimizao, teoria dos grafos, estatstica, probabilidades, entre outras.
Algoritmos e Estrutura de Dados I

David Menotti

Tipos de Problemas na Anlise de Algoritmos




Anlise de um algoritmo particular. Qual o custo de usar um dado algoritmo para resolver um problema especfico?

David Menotti

Algoritmos e Estrutura de Dados I

Tipos de Problemas na Anlise de Algoritmos




Anlise de um algoritmo particular. Qual o custo de usar um dado algoritmo para resolver um problema especfico? Caractersticas que devem ser investigadas:
anlise do nmero de vezes que cada parte do algoritmo deve ser executada, estudo da quantidade de memria necessria

David Menotti

Algoritmos e Estrutura de Dados I

Tipos de Problemas na Anlise de Algoritmos




Anlise de um algoritmo particular. Qual o custo de usar um dado algoritmo para resolver um problema especfico? Caractersticas que devem ser investigadas:
anlise do nmero de vezes que cada parte do algoritmo deve ser executada, estudo da quantidade de memria necessria.

Anlise de uma classe de algoritmos. Qual o algoritmo de menor custo possvel para resolver um problema particular? Toda uma famlia de algoritmos investigada. Procura-se identificar um que seja o melhor possvel. Coloca-se limites para a complexidade computacional dos algoritmos pertencentes classe.
Algoritmos e Estrutura de Dados I

David Menotti

Custo de um Algoritmo


Determinando o menor custo possvel para resolver problemas de uma dada classe, temos a medida da dificuldade inerente para resolver o problema. Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada. Podem existir vrios algoritmos para resolver o mesmo problema. Se a mesma medida de custo aplicada a diferentes algoritmos, ento possvel compar-los e escolher o mais adequado.

David Menotti

Algoritmos e Estrutura de Dados I

Medida do Custo pela Execuo do Programa




Tais medidas so bastante inadequadas e os resultados jamais devem ser generalizados:


os resultados so dependentes do compilador que pode favorecer algumas construes em detrimento de outras; os resultados dependem do hardware; quando grandes quantidades de memria so utilizadas, as medidas de tempo podem depender deste aspecto.

Apesar disso, h argumentos a favor de se obterem medidas reais de tempo.


Ex.: quando h vrios algoritmos distintos para resolver um mesmo tipo de problema, todos com um custo de execuo dentro de uma mesma ordem de grandeza. Assim, so considerados tanto os custos reais das operaes como os custos no aparentes, tais como alocao de memria, indexao, carga, dentre outros.

David Menotti

Algoritmos e Estrutura de Dados I

Medida do Custo por meio de um Modelo Matemtico




Usa um modelo matemtico baseado em um computador idealizado. Deve ser especificado o conjunto de operaes e seus custos de execues. mais usual ignorar o custo de algumas das operaes e considerar apenas as operaes mais significativas. Ex.: algoritmos de ordenao. Consideramos o nmero de comparaes entre os elementos do conjunto a ser ordenado e ignoramos as operaes aritmticas, de atribuio e manipulaes de ndices, caso existam.

David Menotti

Algoritmos e Estrutura de Dados I

Funo de Complexidade


Para medir o custo de execuo de um algoritmo comum definir uma funo de custo ou funo de complexidade f. f(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n. Funo de complexidade de tempo: f(n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. Funo de complexidade de espao: f(n) mede a memria necessria para executar um algoritmo em um problema de tamanho n. Utilizaremos f para denotar uma funo de complexidade de tempo daqui para a frente. A complexidade de tempo na realidade no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada.
Algoritmos e Estrutura de Dados I

David Menotti

Exemplo: maior elemento




Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[n]; n u 1.


#define n 10 int Max(int A[n]) { int i, Temp; Temp = A[0]; for (i = 1; i < n; i++) if (Temp < A[i]) Temp = A[i]; return Temp; }

Seja f uma funo de complexidade tal que f(n) o nmero de comparaes entre os elementos de A, se A contiver n elementos. Qual a funo f(n)?
Algoritmos e Estrutura de Dados I

David Menotti

Exemplo: maior elemento




Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[n]; n u 1.


#define n 10 int Max(int A[n]) { int i, Temp; Temp = A[0]; for (i = 1; i < n; i++) if (Temp < A[i]) Temp = A[i]; return Temp; }

Seja f uma funo de complexidade tal que f(n) o nmero de comparaes entre os elementos de A, se A contiver n elementos. Logo f(n) = n -1
Algoritmos e Estrutura de Dados I

David Menotti

Exemplo: maior elemento




Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n u 1, faz pelo menos n - 1 comparaes.

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo: maior elemento




Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n u 1, faz pelo menos n - 1 comparaes. Prova: Cada um dos n - 1 elementos tem de ser investigado por meio de comparaes, que menor do que algum outro elemento.

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo: maior elemento




Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n u 1, faz pelo menos n -1 comparaes. Prova: Cada um dos n - 1 elementos tem de ser investigado por meio de comparaes, que menor do que algum outro elemento. Logo, n-1 comparaes so necessrias

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo: maior elemento




Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n u 1, faz pelo menos n -1 comparaes. Prova: Cada um dos n - 1 elementos tem de ser investigado por meio de comparaes, que menor do que algum outro elemento. Logo, n-1 comparaes so necessrias O teorema acima nos diz que, se o nmero de comparaes for utilizado como medida de custo, ento a funo Max do programa anterior tima.

David Menotti

Algoritmos e Estrutura de Dados I

Tamanho da Entrada de Dados




 

A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados. comum considerar o tempo de execuo de um programa como uma funo do tamanho da entrada. Para alguns algoritmos, o custo de execuo uma funo da entrada particular dos dados, no apenas do tamanho da entrada. No caso da funo Max do programa do exemplo, o custo uniforme sobre todos os problemas de tamanho n. J para um algoritmo de ordenao isso no ocorre: se os dados de entrada j estiverem quase ordenados, ento o algoritmo pode ter que trabalhar menos.
Algoritmos e Estrutura de Dados I

David Menotti

Melhor Caso, Pior Caso e Caso Mdio




Melhor caso: menor tempo de execuo sobre todas as entradas de tamanho n. Pior caso: maior tempo de execuo sobre todas as entradas de tamanho n.
Se f uma funo de complexidade baseada na anlise de pior caso, o custo de aplicar o algoritmo nunca maior do que f(n).

Caso mdio (ou caso esperado): mdia dos tempos de execuo de todas as entradas de tamanho n.

David Menotti

Algoritmos e Estrutura de Dados I

Na anlise do caso mdio esperado, supe-se uma distribuio de probabilidades sobre o conjunto de entradas de tamanho n e o custo mdio obtido com base nessa distribuio.

Anlise de Melhor Caso, Pior Caso e Caso Mdio

A anlise do caso mdio geralmente muito mais difcil de obter do que as anlises do melhor e do pior caso.

comum supor uma distribuio de probabilidades em que todas as entradas possveis so igualmente provveis.

Na prtica isso nem sempre verdade.

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




Considere o problema de acessar os registros de um arquivo. Cada registro contm uma chave nica que utilizada para recuperar registros do arquivo. O problema: dada uma chave qualquer, localize o registro que contenha esta chave. O algoritmo de pesquisa mais simples o que faz a pesquisa seqencial.
Algoritmos e Estrutura de Dados I

David Menotti

Exemplo - Registros de um Arquivo




Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro).
melhor caso:

pior caso:

caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro).
melhor caso:

registro procurado o primeiro consultado


pior caso:

caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro).
melhor caso:

registro procurado o primeiro consultado f(n) = 1


pior caso:

caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro).
melhor caso:

registro procurado o primeiro consultado f(n) = 1


pior caso:

registro procurado o ltimo consultado ou no est presente no arquivo;


caso mdio:
David Menotti Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro).
melhor caso:

registro procurado o primeiro consultado f(n) = 1


pior caso:

registro procurado o ltimo consultado ou no est presente no arquivo; f(n) = n


caso mdio:
David Menotti Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




No estudo do caso mdio, vamos considerar que toda pesquisa recupera um registro. Se pi for a probabilidade de que o i-simo registro seja procurado, e considerando que para recuperar o i-simo registro so necessrias i comparaes, ento:
f(n) = 1 x p1 + 2 x p2 + 3 x p3 + ... + n x pn

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo




Para calcular f(n) basta conhecer a distribuio de probabilidades pi. Se cada registro tiver a mesma probabilidade de ser acessado que todos os outros, ento

pi = 1/n, 1 i n

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Registros de um Arquivo


 

Para calcular f(n) basta conhecer a distribuio de probabilidades pi. Se cada registro tiver a mesma probabilidade de ser acessado que todos os outros, ento

pi = 1/n, 1 i n


Nesse caso:

A anlise do caso esperado revela que uma pesquisa com sucesso examina aproximadamente metade dos registros.
Algoritmos e Estrutura de Dados I

David Menotti

Exemplo - Registros de um Arquivo




Seja f uma funo de complexidade tal que f(n) o nmero de registros consultados no arquivo (nmero de vezes que a chave de consulta comparada com a chave de cada registro).
melhor caso:

registro procurado o primeiro consultado f(n) = 1


pior caso:

registro procurado o ltimo consultado ou no est presente no arquivo; f(n) = n


caso mdio:

f(n) = (n + 1)/2.
David Menotti Algoritmos e Estrutura de Dados I

Exemplo - Maior e Menor Elemento (1)




Considere o problema de encontrar o maior e o menor elemento de um vetor de inteiros A[n]; n u 1. Um algoritmo simples pode ser derivado do algoritmo apresentado no programa para achar o maior elemento.
void MaxMin1(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; if (A[i] < Min) Min = A[i]; } }

David Menotti

Algoritmos e Estrutura de Dados I

Qual a funo de complexidade para MaxMin1?


void MaxMin1(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; if (A[i] < Min) Min = A[i]; } }

2*(n-1)

David Menotti

Algoritmos e Estrutura de Dados I

Qual a funo de complexidade para MaxMin1?


void MaxMin1(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; if (A[i] < Min) Min = A[i]; } }


Seja f(n) o nmero de comparaes entre os elementos de A, se A contiver n elementos. Logo f(n) = 2(n-1) para n > 0, para o melhor caso, pior caso e caso mdio.
Algoritmos e Estrutura de Dados I

David Menotti

Exemplo - Maior e Menor Elemento (2)




MaxMin1 pode ser facilmente melhorado: a comparao A[i] < Min s necessria quando a comparao A[i] > Max d falso.
void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

David Menotti

Algoritmos e Estrutura de Dados I

Qual a funo de complexidade para MaxMin2?


void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

David Menotti

Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:

Pior caso: Caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente;

Pior caso: Caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente; f(n) = n 1

Pior caso: Caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente; f(n) = n 1

Pior caso:
quando os elementos esto em ordem decrescente;

Caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente; f(n) = n 1

Pior caso:
quando os elementos esto em ordem decrescente; f(n) = 2(n 1)

Caso mdio:

David Menotti

Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente; f(n) = n 1

Pior caso:
quando os elementos esto em ordem decrescente; f(n) = 2(n 1)

Caso mdio:
No caso mdio, A[i] maior do que Max a metade das vezes.
Algoritmos e Estrutura de Dados I

David Menotti

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente; f(n) = n 1

Pior caso:
quando os elementos esto em ordem decrescente; f(n) = 2(n 1)

Caso mdio:
No caso mdio, A[i] maior do que Max a metade das vezes. f(n) = n 1 + (n 1)/2 = 3n/2 3/2
David Menotti Algoritmos e Estrutura de Dados I

void MaxMin2(int A[n], int &Max, int &Min) { int i; Max = A[0]; Min = A[0]; for (i = 1; i < n; i++) { if (A[i] > Max) Max = A[i]; else if (A[i] < Min) Min = A[i]; } }

Qual a funo de complexidade para MaxMin2?

Melhor caso:
quando os elementos esto em ordem crescente; f(n) = n 1

Pior caso:
quando os elementos esto em ordem decrescente; f(n) = 2(n 1)

Caso mdio:
No caso mdio, A[i] maior do que Max a metade das vezes. f(n) = 3n/2 3/2
David Menotti Algoritmos e Estrutura de Dados I

Exemplo - Maior e Menor Elemento (3)




Considerando o nmero de comparaes realizadas, existe a possibilidade de obter um algoritmo mais eficiente:
1.

Compare os elementos de A aos pares, separando-os em dois subconjuntos (maiores em um e menores em outro), a um custo de n/2 comparaes. O mximo obtido do subconjunto que contm os maiores elementos, a um custo de n/2 -1 comparaes O mnimo obtido do subconjunto que contm os menores elementos, a um custo de n/2 -1 comparaes

2.

3.

David Menotti

Algoritmos e Estrutura de Dados I

Exemplo - Maior e Menor Elemento (3)




Considerando o nmero de comparaes realizadas, existe a possibilidade de obter um algoritmo mais eficiente:
1.

Compare os elementos de A aos pares, separando-os em dois subconjuntos (maiores em um e menores em outro), a um custo de n/2 comparaes. O mximo obtido do subconjunto que contm os maiores elementos, a um custo de n/2 -1 comparaes O mnimo obtido do subconjunto que contm os menores elementos, a um custo de n/2 -1 comparaes

2.

3.

David Menotti

Algoritmos e Estrutura de Dados I

Qual a funo de complexidade para este novo algoritmo?




Os elementos de A so comparados dois a dois. Os elementos maiores so comparados com Max e os elementos menores so comparados com Min. Quando n mpar, o elemento que est na posio A[n-1] duplicado na posio A[n] para evitar um tratamento de exceo. Para esta implementao:

no pior caso, melhor caso e caso mdio


David Menotti Algoritmos e Estrutura de Dados I

Exemplo - Maior e Menor Elemento (3)


void MaxMin3(Vetor A, int &Max, int &Min) { int i, FimDoAnel; if ((n % 2) > 0) { A[n] = A[n - 1]; FimDoAnel = n; } else FimDoAnel = n - 1; if (A[0] > A[1]) { Comparao 1 Max = A[0]; Min = A[1]; } else { Max = A[1]; Min = A[0]; } i = 3; while (i <= FimDoAnel) { if (A[i - 1] > A[i]) { Comparao if (A[i - 1] > Max) Max = A[i - 1]; if (A[i] < Min) Min = A[i]; } else { if (A[i - 1] < Min) Min = A[i - 1]; if (A[i] > Max) Max = A[i]; } i += 2; } David Menotti }

2 Comparao 3 Comparao 4 Comparao 3 Comparao 4


Algoritmos e Estrutura de Dados I

Quantas comparaes so feitas em MaxMin3?

Qual a funo de complexidade para MaxMin3?

David Menotti

Algoritmos e Estrutura de Dados I

Quantas comparaes so feitas em MaxMin3? 1. comparao feita 1 vez 2. comparao feita n/2 1 vezes 3. e 4. comparaes feitas n/2 1 vezes

Qual a funo de complexidade para MaxMin3?

David Menotti

Algoritmos e Estrutura de Dados I

Quantas comparaes so feitas em MaxMin3? 1. comparao feita 1 vez 2. comparao feita n/2 - 1 vezes 3. e 4. comparaes feitas n/2 1 vezes f(n) = 1 + n/2 1 + 2 * (n/2 1) f(n) = (3n 6)/2 + 1 f(n) = 3n/2 3 + 1 = 3n/2 - 2

Qual a funo de complexidade para MaxMin3?

David Menotti

Algoritmos e Estrutura de Dados I

Comparao entre os Algoritmos




A tabela apresenta uma comparao entre os algoritmos dos programas MaxMin1, MaxMin2 e MaxMin3, considerando o nmero de comparaes como medida de complexidade. Os algoritmos MaxMin2 e MaxMin3 so superiores ao algoritmo MaxMin1 de forma geral. O algoritmo MaxMin3 superior ao algoritmo MaxMin2 com relao ao pior caso e bastante prximo quanto ao caso mdio.

David Menotti

Algoritmos e Estrutura de Dados I

Exerccio Funo de Complexidade


void exercicio1 (int n) { int i, a; a=0;i=0; while (i<n) { a+=i; i+=2; } }

void exercicio2 (int n) { int i,j,a; a=0; for (i=0; i<n; i++) for (j=0; j<i; j++) a+=i+j; }

David Menotti

Algoritmos e Estrutura de Dados I

Das könnte Ihnen auch gefallen