AEDS2.2 Medida Do Tempo de Execucao
-
Upload
andersonoliveira -
Category
Documents
-
view
216 -
download
0
description
Transcript of AEDS2.2 Medida Do Tempo de Execucao
-
Medida do Tempo de Execuo de um Programa
Livro Projeto de Algoritmos Nvio ZivianiCaptulo 1 Seo 1.3http://www2.dcc.ufmg.br/livros/algoritmos/
-
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,
Algoritmos e Estrutura de Dados II
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.
-
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?
Algoritmos e Estrutura de Dados II
Caractersticas que devem ser investigadas: anlise do nmero de vezes que cada parte do
algoritmo deve ser executada, estudo da quantidade de memria necessria
-
Tipos de Problemas na Anlise de Algoritmos
Anlise de uma classe de algoritmos. Qual o algoritmo de menor custo possvel
para resolver um problema particular? Toda uma famlia de algoritmos investigada.
Algoritmos e Estrutura de Dados II
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.
-
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
Algoritmos e Estrutura de Dados II
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.
-
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;
Algoritmos e Estrutura de Dados II
detrimento de outras; os resultados dependem do hardware; quando grandes quantidades de memria so
utilizadas, as medidas de tempo podem depender deste aspecto.
-
Medida do Custo pela Execuo do Programa
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
Algoritmos e Estrutura de Dados II
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.
-
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
Algoritmos e Estrutura de Dados II
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.
-
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.
Algoritmos e Estrutura de Dados II
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.
-
Exemplo: maior elemento
Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[n]; n 1.#define n 10int Max(int A[n]) {
int i, Temp;
Temp = A[0];
Algoritmos e Estrutura de Dados II
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)?
Temp = A[0]; for (i = 1; i < n; i++)
if (Temp < A[i]) Temp = A[i];
return Temp; }
-
Exemplo: maior elemento
Considere o algoritmo para encontrar o maior elemento de um vetor de inteiros A[n]; n 1.#define n 10int Max(int A[n]) {
int i, Temp;
Temp = A[0];
Algoritmos e Estrutura de Dados II
Seja f uma funo de complexidade tal que f(n) o nmero de comparaes entre os elementos de A, se A contiver n elementos.
f(n) = n-1
Temp = A[0]; for (i = 1; i < n; i++)
if (Temp < A[i]) Temp = A[i];
return Temp; }
-
Exemplo: maior elemento
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n 1, faz pelo menos n -1 comparaes.
Algoritmos e Estrutura de Dados II
-
Exemplo: maior elemento
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n 1, faz pelo menos n -1 comparaes.
Prova: Cada um dos n - 1 elementos tem de ser investigado por meio de comparaes, que menor
Algoritmos e Estrutura de Dados II
investigado por meio de comparaes, que menor do que algum outro elemento.
-
Exemplo: maior elemento
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n 1, faz pelo menos n -1 comparaes.
Prova: Cada um dos n - 1 elementos tem de ser investigado por meio de comparaes, que menor
Algoritmos e Estrutura de Dados II
investigado por meio de comparaes, que menor do que algum outro elemento. Logo, n-1 comparaes so necessrias
-
Exemplo: maior elemento
Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n 1, faz pelo menos n -1 comparaes.
Prova: Cada um dos n - 1 elementos tem de ser investigado por meio de comparaes, que menor
Algoritmos e Estrutura de Dados II
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.
-
Tamanho da Entrada de Dados
A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada comum considerar o tempo de execuo de um programa
como uma funo do tamanho da entrada. Para alguns algoritmos, o custo de execuo uma
Algoritmos e Estrutura de Dados II
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.
-
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.
Algoritmos e Estrutura de Dados II
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.
-
Anlise de Melhor Caso, Pior Caso e Caso Mdio
Na anlise do caso esperado, supe-se uma distribuio de probabilidades sobre o conjunto de entradas de tamanho n e o custo mdio obtido com base nessa distribuio.
A anlise do caso mdio geralmente muito mais difcil de obter do que as anlises do melhor e do pior caso.
Algoritmos e Estrutura de Dados II
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.
-
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
Algoritmos e Estrutura de Dados II
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.
-
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:
Algoritmos e Estrutura de Dados II
pior caso:
caso mdio:
-
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
Algoritmos e Estrutura de Dados II
f(n) = 1 pior caso:
caso mdio:
-
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
Algoritmos e Estrutura de Dados II
f(n) = 1 pior caso:
registro procurado o ltimo consultado ou no est presente no arquivo;
f(n) = n caso mdio:
-
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
Algoritmos e Estrutura de Dados II
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
-
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
Algoritmos e Estrutura de Dados II
pi = 1/n, 1 i n
-
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
Algoritmos e Estrutura de Dados II
Nesse caso:
A anlise do caso esperado revela que uma pesquisa com sucesso examina aproximadamente metade dos registros.
pi = 1/n, 1 i n
-
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
Algoritmos e Estrutura de Dados II
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.
-
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 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) {
Algoritmos e Estrutura de Dados II
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];
} }
-
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++) {
Algoritmos e Estrutura de Dados II
for (i = 1; i < n; i++) { if (A[i] > (*Max)) (*Max) = A[i]; if (A[i] < (*Min)) (*Min) = A[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];
Algoritmos e Estrutura de Dados II
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.
if (A[i] < (*Min)) (*Min) = A[i]; }
}
-
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) {
Algoritmos e Estrutura de Dados II
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?
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];
Algoritmos e Estrutura de Dados II
else if (A[i] < (*Min)) (*Min) = A[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];
Algoritmos e Estrutura de Dados II
Melhor caso:
Pior caso:
Caso mdio:
else if (A[i] < (*Min)) (*Min) = A[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];
}
Algoritmos e Estrutura de Dados II
} }
Melhor caso: quando os elementos esto em ordem crescente; f(n) = n 1
Pior caso:
Caso mdio:
-
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];
}
Algoritmos e Estrutura de Dados II
} }
Melhor caso: quando os elementos esto em ordem crescente; f(n) = n 1
Pior caso: quando A[0] o maior elemento; f(n) = 2(n 1)
Caso mdio:
-
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];
}
Algoritmos e Estrutura de Dados II
} }
Melhor caso: quando os elementos esto em ordem crescente; f(n) = n 1
Pior caso: quando A[0] o maior elemento; f(n) = 2(n 1)
Caso mdio: No caso mdio, considerando A[i] maior do que Max a metade das vezes. f(n) = 3n/2 3/2
-
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.
2. O mximo obtido do subconjunto que contm os maiores
Algoritmos e Estrutura de Dados II
2. O mximo obtido do subconjunto que contm os maiores elementos, a um custo de n/2 -1 comparaes
3. O mnimo obtido do subconjunto que contm os menores elementos, a um custo de n/2 -1 comparaes
-
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.
2. O mximo obtido do subconjunto que contm os maiores
Algoritmos e Estrutura de Dados II
2. O mximo obtido do subconjunto que contm os maiores elementos, a um custo de n/2 -1 comparaes
3. O mnimo obtido do subconjunto que contm os menores elementos, a um custo de n/2 -1 comparaes
-
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] duplicado na posio A[n + 1] para evitar um
Algoritmos e Estrutura de Dados II
A[n] duplicado na posio A[n + 1] para evitar um tratamento de exceo.
Para esta implementao:
no pior caso, melhor caso e caso mdio
-
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]) { *Max = A[0]; *Min = A[1];
Algoritmos e Estrutura de Dados II
*Max = A[0]; *Min = A[1]; } else {
*Max = A[1]; *Min = A[0];} i = 3; while (i A[i]) { 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;
} }
-
Qual a funo de complexidade para MaxMin3?
Quantas comparaes so feitas em MaxMin3?
Algoritmos e Estrutura de Dados II
-
Qual a funo de complexidade para MaxMin3?
Quantas comparaes so feitas em MaxMin3? 1. comparao feita 1 vez 2. comparao feita n/2 - 1 vezes
Algoritmos e Estrutura de Dados II
3. e 4. comparaes feitas n/2 1 vezes
-
Qual a funo de complexidade para MaxMin3?
Quantas comparaes so feitas em MaxMin3? 1. comparao feita 1 vez 2. comparao feita n/2 - 1 vezes
Algoritmos e Estrutura de Dados II
3. e 4. comparaes feitas n/2 1 vezes
f(n) = 1 + n/2 1 + 2 * (n/2 1) f(n) = (3n 6)/2 + 1f(n) = 3n/2 3 + 1 = 3n/2 - 2
-
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
Algoritmos e Estrutura de Dados II
O algoritmo MaxMin3 superior ao algoritmo MaxMin2 com relao ao pior caso e bastante prximo quanto ao caso mdio.
-
Limite Inferior - Uso de um Orculo
Existe possibilidade de obter um algoritmo MaxMin mais eficiente?
Para responder temos de conhecer o limite inferior para essa classede algoritmos.
Tcnica muito utilizada: uso de um orculo.
Algoritmos e Estrutura de Dados II
Tcnica muito utilizada: uso de um orculo. Dado um modelo de computao que expresse o comportamento do
algoritmo, o orculo informa o estado da computao depois de cadapasso possvel (no caso, o estado aps cada comparao).
Para derivar o limite inferior, o orculo procura sempre fazer com que oalgoritmo trabalhe o mximo, escolhendo como resultado da prximacomparao aquele que cause o maior trabalho possvel necessriopara determinar a resposta final.
-
Exemplo de Uso de um Orculo
Teorema: Qualquer algoritmo para encontrar o maior e o menorelemento de um conjunto com n elementos no ordenados, n>1,faz pelo menos [3n/2]- 2 comparaes.
Prova: A tcnica utilizada define um orculo que descreve ocomportamento do algoritmo por meio de um conjunto de ntuplas,mais um conjunto de regras associadas que mostram as tuplaspossveis (estados) que um algoritmo pode assumir a partir de uma
Algoritmos e Estrutura de Dados II
possveis (estados) que um algoritmo pode assumir a partir de umadada tupla e uma nica comparao.
Uma 4tupla, representada por (a; b; c; d), onde os elementos de: a nunca foram comparados; b foram vencedores e nunca perderam em comparaes
realizadas; c foram perdedores e nunca venceramem comparaes
realizadas; d foram vencedores e perdedores em comparaes realizadas.
-
Exemplo de Uso de um Orculo
O algoritmo inicia no estado (n, 0, 0, 0) e termina com (0, 1, 1, n - 2). Aps cada comparao a tupla (a; b; c; d) consegue progredir apenas
se ela assume um dentre os seis estados possveis abaixo: (a - 2, b + 1, c + 1, d)
se a 2 (dois elementos de a so comparados) (a - 1, b + 1, c, d) ou (a - 1, b, c + 1, d) ou (a - 1, b, c, d + 1)
Algoritmos e Estrutura de Dados II
(a - 1, b + 1, c, d) ou (a - 1, b, c + 1, d) ou (a - 1, b, c, d + 1)se a 1 (um elemento de a comparado com um de b ou um de c)
(a, b - 1, c, d + 1)se b 2 (dois elementos de b so comparados)
(a, b, c - 1, d + 1)se c 2 (dois elementos de c so comparados)
-
Exemplo de Uso de um Orculo O primeiro passo requer necessariamente a manipulao do
componente a. O caminho mais rpido para levar a at zero requer n/2
mudanas de estado e termina com a tupla (0, n/2, n/2, 0)(por meio de comparao dos elementos de a dois a dois).
A seguir, para reduzir o componente b at um so necessrias n/2 - 1 e mudanas de estado (mnimo de comparaes necessrias para obter o maior elemento de b)
Idem para c, com n/2 - 1 mudanas de estado.
Algoritmos e Estrutura de Dados II
-
Exemplo de Uso de um Orculo
O primeiro passo requer necessariamente a manipulao docomponente a.
O caminho mais rpido para levar a at zero requer n/2mudanas de estado e termina com a tupla (0, n/2, n/2, 0)(por meio de comparao dos elementos de a dois a dois).
A seguir, para reduzir o componente b at um so
Algoritmos e Estrutura de Dados II
A seguir, para reduzir o componente b at um sonecessrias [ n/2 ] - 1 e mudanas de estado (mnimo decomparaes necessrias para obter o maior elemento de b).
Idem para c, com [ n/2 ] - 1 mudanas de estado.
-
Exemplo de Uso de um Orculo Logo, para obter o estado (0, 1, 1, n - 2) a partir do estado (n,
0, 0, 0) so necessrias[ n/2 ] + [ n/2 ] - 1 + [ n/2 ] - 1= [3n/2] 2 comparaes.
O teorema nos diz que se o nmero de comparaes entre oselementos de um vetor for utilizado como medida de custo,ento o algoritmo MaxMin3 timo.ento o algoritmo MaxMin3 timo.
Algoritmos e Estrutura de Dados II