You are on page 1of 49

Medida do Tempo de

Execuo de um Programa
Livro Projeto de Algoritmos Nvio Ziviani
Captulo 1 Seo 1.3
http://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,
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 II

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

Algoritmos e Estrutura de Dados II

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.
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 II

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.
Algoritmos e Estrutura de Dados II

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.

Algoritmos e Estrutura de Dados II

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
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.
Algoritmos e Estrutura de Dados II

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.

Algoritmos e Estrutura de Dados II

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 II

Exemplo: maior elemento




Considere o algoritmo para encontrar o maior elemento de


um vetor de inteiros A[n]; n 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 II

Exemplo: maior elemento




Considere o algoritmo para encontrar o maior elemento de


um vetor de inteiros A[n]; n 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.
f(n) = n-1
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.

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
do que algum outro elemento.

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
do que algum outro elemento.


Logo, n-1 comparaes so necessrias

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
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.
Algoritmos e Estrutura de Dados II

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


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 II

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.

Algoritmos e Estrutura de Dados II

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.

comum supor uma distribuio de probabilidades em que todas


as entradas possveis so igualmente provveis.

Na prtica isso nem sempre verdade.

Algoritmos e Estrutura de Dados II

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 II

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:

Algoritmos e Estrutura de Dados II

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:

Algoritmos e Estrutura de Dados II

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:

Algoritmos e Estrutura de Dados II

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

Algoritmos e Estrutura de Dados II

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

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 II

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.
Algoritmos e Estrutura de Dados II

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) {
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

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

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 II

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];
}
}
Algoritmos e Estrutura de Dados II

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

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];
}
}
Melhor caso:

Pior caso:
Caso mdio:

Algoritmos e Estrutura de Dados II

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];
}
}

Melhor caso:



quando os elementos esto em ordem crescente;


f(n) = n 1

Pior caso:
Caso mdio:
Algoritmos e Estrutura de Dados II

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];
}
}

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:
Algoritmos e Estrutura de Dados II

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];
}
}

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

Algoritmos e Estrutura de Dados II

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


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

Algoritmos e Estrutura de Dados II

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


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

Algoritmos e Estrutura de Dados II

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
tratamento de exceo.

Para esta implementao:

no pior caso, melhor caso e caso mdio


Algoritmos e Estrutura de Dados II

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];
}
else {
*Max = A[1]; *Min = A[0];
}
i = 3;
while (i <= FimDoAnel) {
if (A[i - 1] > 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;
}
}

Algoritmos e Estrutura de Dados II

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
 3. e 4. comparaes feitas n/2 1 vezes

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
 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
Algoritmos e Estrutura de Dados II

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.

Algoritmos e Estrutura de Dados II

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 classe


de algoritmos.

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 cada
passo possvel (no caso, o estado aps cada comparao).

Para derivar o limite inferior, o orculo procura sempre fazer com que o
algoritmo trabalhe o mximo, escolhendo como resultado da prxima
comparao aquele que cause o maior trabalho possvel necessrio
para determinar a resposta final.
Algoritmos e Estrutura de Dados II

Exemplo de Uso de um Orculo




Teorema: Qualquer algoritmo para encontrar o maior e o menor


elemento 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 o
comportamento do algoritmo por meio de um conjunto de ntuplas,
mais um conjunto de regras associadas que mostram as tuplas
possveis (estados) que um algoritmo pode assumir a partir de uma
dada 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.
Algoritmos e Estrutura de Dados II

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)
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)

Algoritmos e Estrutura de Dados II

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 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




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 os


elementos de um vetor for utilizado como medida de custo,
ento o algoritmo MaxMin3 timo.

Algoritmos e Estrutura de Dados II

You might also like