Vous êtes sur la page 1sur 11

21/03/2012

Projeto de Algoritmos
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/

Projeto de algoritmos
1. 2. 3.

Anlise do problema Decises de projeto Algoritmo a ser utilizado de acordo com seu comportamento. tempo de execuo espao ocupado.
Algoritmos e Estrutura de Dados II

Comportamento depende de

Tipos de Problemas na Anlise de Algoritmos

Tipos de Problemas na Anlise de Algoritmos

Anlise de um algoritmo particular.

Anlise de uma classe de algoritmos.

Qual o custo de usar um dado algoritmo para resolver um problema especfico? Caractersticas que devem ser investigadas:

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

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

Custo de um Algoritmo

Medida do Custo pela Execuo do Programa

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

Tais medidas so bastante inadequadas :


os resultados so dependentes do compilador; 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. Nesse caso, tanto os custos reais das operaes como os custos no aparentes, tais como alocao de memria, indexao, carga, so considerados. Algoritmos e Estrutura de Dados II

21/03/2012

Medida do Custo por meio de um Modelo Matemtico

Funo de Complexidade
O custo de execuo de um algoritmo dado por 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:

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.

f(n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n. f(n) mede a memria necessria para executar um algoritmo em um problema de tamanho n.
Algoritmos e Estrutura de Dados II

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

Funo de Complexidade

Exemplo: maior elemento

Nas aulas, f denota uma funo de complexidade de tempo

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


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

Apesar do nome, ela no representa tempo diretamente Representa o nmero de vezes que determinada operao considerada relevante executada.

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

Exemplo: maior elemento

Exemplo: maior elemento

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


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

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

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 II

Algoritmos e Estrutura de Dados II

21/03/2012

Exemplo: maior 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 testado, por meio de comparaes, se menor do que algum outro 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 testado, por meio de comparaes, se menor do que algum outro elemento.

Logo, n-1 comparaes so necessrias

Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II

Exemplo: maior elemento

Tamanho da Entrada de Dados

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 testado, por meio de comparaes, se menor do que algum outro elemento.

A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados.

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

Tamanho da Entrada de Dados

Tamanho da Entrada de Dados

A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados. Para alguns algoritmos, o custo de execuo uma funo da entrada particular dos dados, no apenas do tamanho da entrada.

A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados. 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. Para um algoritmo de ordenao isso no ocorre

Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II

21/03/2012

Tamanho da Entrada de Dados

Melhor Caso, Pior Caso e Caso Mdio

A medida do custo de execuo de um algoritmo depende principalmente do tamanho da entrada dos dados. Para alguns algoritmos, o custo de execuo uma funo da entrada particular dos dados, no apenas do tamanho da entrada.

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.

No caso da funo Max do programa do exemplo, o custo uniforme sobre todos os problemas de tamanho n. 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.

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

Algoritmos e Estrutura de Dados II

Anlise de Melhor Caso, Pior Caso e Caso Mdio

Exemplo - Registros de um Arquivo

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.

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

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

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

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:

melhor caso:

registro procurado o primeiro consultado

pior caso:

pior caso:

caso mdio:

caso mdio:
Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II

21/03/2012

Exemplo - Registros de um Arquivo

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

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:

melhor caso:

registro procurado o primeiro consultado f(n) = 1

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

pior caso:

pior caso:

caso mdio:
Algoritmos e Estrutura de Dados II

caso mdio:

Algoritmos e Estrutura de Dados II

Exemplo - Registros de um Arquivo

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

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

melhor caso:

registro procurado o primeiro consultado f(n) = 1 registro procurado o ltimo consultado ou no est presente no arquivo; f(n) = n
Algoritmos e Estrutura de Dados II

pior caso:

caso mdio:

Algoritmos e Estrutura de Dados II

Exemplo - Registros de um Arquivo

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

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

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

Algoritmos e Estrutura de Dados II

21/03/2012

Exemplo - Registros de um Arquivo

Exemplo - Maior e Menor Elemento (1)

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

Problema: 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.

melhor caso:

f(n) = 1 f(n) = n f(n) = (n + 1)/2.

pior caso:

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

caso mdio:

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]; 2*(n-1) 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]; } }

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 > 1, para o melhor caso, pior caso e caso mdio.
Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II

Exemplo - Maior e Menor Elemento (2)

Qual a funo de complexidade para MaxMin2?

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

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

21/03/2012

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:

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;

Pior caso: Caso mdio:

Pior caso: Caso mdio:

Algoritmos e Estrutura de Dados II

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++) { (n-1) 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]; } }

Melhor caso:

Melhor caso:

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

quando os elementos esto em ordem crescente; f(n) = n 1 quando os elementos esto em ordem decrescente;

Pior caso: Caso mdio:

Pior caso:

Caso mdio:

Algoritmos e Estrutura de Dados II

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++) { (n-1) 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]; } }

(n-1)

Melhor caso:

Melhor caso:

quando os elementos esto em ordem crescente; f(n) = n 1 quando os elementos esto em ordem decrescente; f(n) = 2(n 1)

quando os elementos esto em ordem crescente; f(n) = n 1 quando os elementos esto em ordem decrescente; f(n) = 2(n 1) No caso mdio, A[i] maior do que Max a metade das vezes.
Algoritmos e Estrutura de Dados II

Pior caso:

Pior caso:

Caso mdio:

Caso mdio:

Algoritmos e Estrutura de Dados II

21/03/2012

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++) { (n-1) if (A[i] > *Max) *Max = A[i]; else if (A[i] < *Min) *Min = A[i]; (n-1)/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. 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.

Melhor caso:

3.

quando os elementos esto em ordem crescente; f(n) = n 1 quando os elementos esto em ordem decrescente; f(n) = 2(n 1) No caso mdio, A[i] maior do que Max a metade das vezes. f(n) = n 1 + (n 1)/2 = 3n/2 3/2
Algoritmos e Estrutura de Dados II

Pior caso:

Caso mdio:

Algoritmos e Estrutura de Dados II

Exemplo - Maior e Menor Elemento (3)


10 30 5 68 12 67 22 11 ...

Exemplo - Maior e Menor Elemento (3)


10 30 5 68 12 67 22 11 ...

30 10

68 5

67 12

22 11

Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II

Exemplo - Maior e Menor Elemento (3)


void MaxMin3(int n, 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; } }

Exemplo - Maior e Menor Elemento (3)


void MaxMin3(int n, Vetor A, int *Max, int *Min) { int i, FimDoAnel; if ((n % 2) > 0) { A[n] = A[n - 1]; FimDoAnel = n; } else FimDoAnel = n - 1;

10

30

68

12

67

...

Algoritmos e Estrutura de Dados II

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

21/03/2012

Exemplo - Maior e Menor Elemento (3)


void MaxMin3(int n, Vetor A, int *Max, int *Min) { int i, FimDoAnel; if ((n % 2) > 0) { A[n] = A[n - 1]; FimDoAnel = n; } else FimDoAnel = n - 1;

Qual a funo de complexidade para MaxMin3?

Quantas comparaes so feitas em MaxMin3?

10

30

68

12

67

...

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

(n/2) - 1
Comparao 3 Comparao 4 Comparao 3 Comparao 4

(n/2) - 1 (n/2) - 1

Algoritmos e Estrutura de Dados II

Algoritmos e Estrutura de Dados II

Qual a funo de complexidade para MaxMin3?

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

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

Algoritmos e Estrutura de Dados II

Comparao entre os Algoritmos

Limite Inferior - Uso de um Orculo

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.

Existe possibilidade de obter um algoritmo MaxMin mais eficiente? Para responder temos de conhecer o limite inferior para essa classe de algoritmos. Como? Uso de um orculo. Dado um modelo de computao que expresse o comportamento do algoritmo, o orculo informa o resultado de cada passo possvel (no caso, o resultado de 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

Algoritmos e Estrutura de Dados II

21/03/2012

Exemplo de Uso de um Orculo

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.

Para o problema do maior e menor elemento, utilizamos uma 4tupla, representada por (a; b; c; d), onde os elementos de:

Prova: A tcnica utilizada define um orculo que descreve o comportamento do algoritmo utilizando: um conjunto de ntuplas, 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.

Algoritmos e Estrutura de Dados II

a: nmero de elementos nunca comparados; b: foram vencedores e nunca perderam em comparaes realizadas (mximo); c: foram perdedores e nunca venceramem comparaes realizadas (mnimo); d: foram vencedores e perdedores em comparaes realizadas (elementos intermedirios).

O algoritmo inicia no estado (n, 0, 0, 0) e termina com (0, 1, 1, n - 2).

Algoritmos e Estrutura de Dados II

Exemplo de Uso de um Orculo

Exemplo de Uso de um Orculo


(a, b, c, d) (n, 0, 0, 0)

Aps cada comparao, (a; b; c; d) assume um dentre os 6 estados possveis abaixo:

(a - 2, b + 1, c + 1, d) se a 2 (2 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 (1 elemento de a comparado com 1 de b ou 1 de c)

(a, b - 1, c, d + 1) se b 2 (2 elementos de b so comparados) (a, b, c - 1, d + 1) se c 2 (2 elementos de c so comparados)


(0, 1, 1, n-2)
Algoritmos e Estrutura de Dados II Algoritmos e Estrutura de Dados II

Exemplo de Uso de um Orculo


(a, b, c, d) (n, 0, 0, 0) comparao de 2 a 2 elementos de a (caminho mais rpido para zerar a). (0, n/2, n/2, 0)

Exemplo de Uso de um Orculo


(a, b, c, d) (n, 0, 0, 0) comparao de 2 a 2 elementos de a (caminho mais rpido para zerar a). (0, n/2, n/2, 0) comparao de elementos em b para encontrar o mximo (0, 1, n/2, n/2-1)

(0, 1, 1, n-2)
Algoritmos e Estrutura de Dados II

(0, 1, 1, n-2)
Algoritmos e Estrutura de Dados II

10

21/03/2012

Exemplo de Uso de um Orculo


(a, b, c, d) (n, 0, 0, 0) comparao de 2 a 2 elementos de a (caminho mais rpido para zerar a). (0, n/2, n/2, 0) comparao de elementos em b para encontrar o mximo (0, 1, n/2, n/2-1) comparao de elementos em c para encontrar o mnimo n/2-1 (0, 1, 1, n-2)
Algoritmos e Estrutura de Dados II

Exemplo de Uso de um Orculo


(a, b, c, d) (n, 0, 0, 0) comparao de 2 a 2 elementos de a (caminho mais rpido n/2 (0, n/2, n/2, 0) comparao de elementos em b para encontrar o mximo (0, 1, n/2, n/2-1) comparao de elementos em c para encontrar o mnimo (0, 1, 1, n-2)
Algoritmos e Estrutura de Dados II

para zerar a).

n/2-1

Exemplo de Uso de um Orculo

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

11

Vous aimerez peut-être aussi