01 - Complexidade de Algoritmos

  • Upload
    carlos

  • View
    234

  • Download
    4

Embed Size (px)

Citation preview

Estruturas de Dados (Ordenao e Pesquisa)Prof. Dr. Lus Carlos Costa Fonseca

Objetivosy Familiarizar o aluno com diversos mtodos de ordenao de

dados e com diferentes formas de armazenar e pesquisar dados, discutindo a aplicabilidade e complexidade de cada um deles; y Ao final da disciplina o aluno estar capacitado a identificar qual o mtodo de ordenao mais recomendado para uso em uma dada aplicao, bem como a forma mais eficiente de armazenar dados com vistas a uma recuperao rpida.

2

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Ementay Mtodos de ordenao:y seleo, troca, distribuio, insero, intercalao e clculo de

endereos;

y Pesquisa de dados:y seqencial, binria, hashing, rvores de pesquisa, rvores

binrias de pesquisa, rvores AVL, B-Trees.

y Organizao de arquivos em rvore. y Organizao de arquivos de dados multimdia. y Estudo da complexidade dos mtodos apresentados. y Algoritmos Genticos de busca e recuperao. y Conceitos de Data mining.3 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Bibliografia Sugeriday ZIVIANI, N. Projeto de Algoritmos - Com Implementaes

em PASCAL e C. So Paulo: Editora Pioneira, 1999. y DA SILVA, Osmar Quirino. Estrutura de Dados e Algoritmos Usando C - Fundamentos e Aplicaes. 472 pginas - 1 edio 2007. ISBN: 9788573936117;

4

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Roteiro Geral da Disciplinay Parte 1: Conceitos Introdutrios; y Parte 2: Complexidade de Algoritmos; y Parte 3: Mtodos de ordenao; y Parte 4: Pesquisa de dados; y Parte 5: Organizao de arquivos em rvores; y Parte 6: Organizao de arquivos de dados multimdia; y Parte 7: Algoritmos Genticos de busca e recuperao; y Parte 8: Conceitos de Data mining.

5

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Parte 1Conceitos Introdutrios

6

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Roteiroy Conceitos Introdutrios

7

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Algoritmos Estruturas de Dados e Programasy Os algoritmos fazem parte do dia-a-dia das pessoas.

Exemplos de algoritmos:y instrues para o uso de medicamentos; y indicaes de como montar um aparelho; y uma receita de culinria.

y Seqncia de aes executveis para a obteno de uma

soluo para um determinado tipo de problema.

8

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Algoritmos Estruturas de Dados e Programasy Segundo Dijkstra, um algoritmo corresponde a uma

descrio de um padro de comportamento, expresso em termos de um conjunto finito de aes:y Executando a operao a + b percebemos um padro de

comportamento, mesmo que a operao seja realizada para valores diferentes de a e b;

9

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Estruturas de Dadosy Estruturas de dados e algoritmos esto intimamente ligados:y no se pode estudar estruturas de dados sem considerar os

algoritmos associados a elas; y assim como a escolha dos algoritmos em geral depende da representao e da estrutura dos dados.y Para resolver um problema necessrio escolher uma

abstrao da realidade, em geral mediante a denio de um conjunto de dados que representa a situao real; y A seguir, deve ser escolhida a forma de representar esses dados.10 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Escolha da Representao dos Dadosy A escolha da representao dos dados determinada, entre

outras, pelas operaes a serem realizadas sobre os dados; y Considere a operao de adio:y Para pequenos nmeros, uma boa representao por meio de

barras verticais (caso em que a operao de adio bastante simples); y J a representao por dgitos decimais requer regras relativamente complicadas, as quais devem ser memorizadas; y Entretanto, quando consideramos a adio de grandes nmeros mais fcil a representao por dgitos decimais (devido ao princpio baseado no peso relativo da posio de cada dgito);11 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Programasy Programar basicamente estruturar dados e construir

algoritmos; y Programas so formulaes concretas de algoritmos abstratos, baseados em representaes e estruturas especficas de dados; y Programas representam uma classe especial de algoritmos capazes de serem seguidos por computadores; y Um computador s capaz de seguir programas em linguagem de mquina (seqncia de instrues obscuras e desconfortveis).12 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Programasy necessrio construir linguagens mais adequadas, que

facilitem a tarefa de programar um computador; y Uma linguagem de programao uma tcnica de notao para programar, com a inteno de servir de veculo tanto para a expresso do raciocnio algortmico quanto para a execuo automtica de um algoritmo por um computador.

13

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tipos de Dadosy Caracteriza o conjunto de valores a que uma constante

pertence, ou que podem ser assumidos por uma varivel ou expresso, ou que podem ser gerados por uma funo. y Tipos simples de dados so grupos de valores indivisveis (como os tipos bsicos integer, boolean, char e real do Pascal).y Exemplo: uma varivel do tipo boolean pode assumir o valor

verdadeiro ou o valor falso, e nenhum outro valor.

y Os tipos estruturados em geral definem uma coleo de

valores simples, ou um agregado de valores de tipos diferentes

14

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tipos Abstratos de Dados (TADs)y Modelo matemtico, acompanhado das operaes denidas

sobre o modelo;y Exemplo: o conjunto dos inteiros acompanhado das operaes

de adio, subtrao e multiplicao.y TADs so utilizados extensivamente como base para o

projeto de algoritmos; y A implementao do algoritmo em uma linguagem de programao especfica exige a representao do TAD em termos dos tipos de dados e dos operadores suportados;

15

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tipos Abstratos de Dados (TADs)y A representao do modelo matemtico por trs do tipo

abstrato de dados realizada mediante uma estrutura de dados; y Podemos considerar TADs como generalizaes de tipos primitivos e procedimentos como generalizaes de operaes primitivas; y O TAD encapsula tipos de dados. A definio do tipo e todas as operaes ficam localizadas numa seo do programa.

16

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Implementao de TADsy Considere uma aplicao que utilize uma lista de inteiros.

Poderamos definir TAD Lista, com as seguintes operaes:faa a lista vazia; 2. obtenha o primeiro elemento da lista; se a lista estiver vazia, ento retorne nulo; 3. insira um elemento na lista.1.

y

H vrias opes de estruturas de dados que permitem uma implementao eficiente para listas (por ex., o tipo estruturado arranjo);

17

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Implementao de TADsy Cada operao do tipo abstrato de dados implementada

como um procedimento na linguagem de programao escolhida; y Qualquer alterao na implementao do TAD ca restrita parte encapsulada, sem causar impactos em outras partes do cdigo; y Cada conjunto diferente de operaes define um TAD diferente, mesmo atuem sob um mesmo modelo matemtico; y A escolha adequada de uma implementao depende fortemente das operaes a serem realizadas sobre o modelo.18 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Medida do Tempo de Execuo de um Programay O projeto de algoritmos fortemente influenciado pelo

estudo de seus comportamentos; y 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; y Muitos desses algoritmos so encontrados em reas como pesquisa operacional, otimizao, teoria dos grafos, estatstica, probabilidades, entre outras.

19

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tipos de Problemas na Anlise de Algoritmosy Anlise de um algoritmo particular:y Qual o custo de usar um dado algoritmo para resolver um

problema especfico? y Caractersticas que devem ser investigadas:y anlise do nmero de vezes que cada parte do algoritmo deve ser

executada, y estudo da quantidade de memria necessria.

20

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tipos de Problemas na Anlise de Algoritmosy Anlise de uma classe de algoritmos:y Qual o algoritmo de menor custo possvel para resolver um

problema particular? y Toda uma famlia de algoritmos investigada; y Procura-se identificar um que seja o melhor possvel; y Coloca-se limites para a complexidade computacional dos algoritmos pertencentes classe;

21

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Custo de um Algoritmoy Determinando o menor custo possvel para resolver

problemas de uma dada classe, temos a medida da dificuldade inerente para resolver o problema; y Quando o custo de um algoritmo igual ao menor custo possvel, o algoritmo timo para a medida de custo considerada; y Podem existir vrios algoritmos para resolver o mesmo problema; y Se a mesma medida de custo aplicada a diferentes algoritmos, ento possvel compar-los e escolher o mais adequado.22 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Medida do Custo pela Execuo do Programay Pode ser feito medindo diretamente o tempo de execuo de

um programa em um computador real; y Tais medidas so bastante inadequadas e os resultados jamais devem ser generalizados:y os resultados so dependentes do compilador que pode

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

23

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Medida do Custo pela Execuo do Programay Apesar disso, h argumentos a favor de se obterem medidas

reais de tempo.y 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. y Assim, so considerados tanto os custos reais das operaes como os custos no aparentes, tais como alocao de memria, indexao, carga, dentre outros.

24

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Medida do Custo pela Execuo do Programay Usa um modelo matemtico baseado em um computador

idealizado; y Deve ser especificado o conjunto de operaes e seus custos de execues; y mais usual ignorar o custo de algumas das operaes e considerar apenas as operaes mais significativas; y 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.25 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Funo de Complexidadey Para medir o custo de execuo de um algoritmo comum

definir uma funo de custo ou funo de complexidade f; y f(n) a medida do tempo necessrio para executar um algoritmo para um problema de tamanho n; y Funo de complexidade de tempo: f(n) mede o tempo necessrio para executar um algoritmo em um problema de tamanho n; y Funo de complexidade de espao: f(n) mede a memria necessria para executar um algoritmo em um problema de tamanho n.26 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Funo de Complexidadey Utilizaremos f para denotar uma funo de complexidade de

tempo daqui para a frente; y A complexidade de tempo na realidade no representa tempo diretamente, mas o nmero de vezes que determinada operao considerada relevante executada.

27

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo: Maior Elementoy Considere o algoritmo para encontrar o maior elemento de

um vetor de inteiros A[1..n], n >= 1.int maior(Vetor A) { int i, Temp; Temp = A[0]; for (i = 1; i < n; i++) if (Temp < A[i]) Temp = A[i]; return Temp; }

28

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo: Maior Elementoy Seja f uma funo de complexidade tal que f(n) o nmero de

comparaes entre os elementos de A, se A contiver n elementos. y Logo f(n) = n -1, para n > 0; y Vamos provar que o algoritmo apresentado no programa acima timo... y Teorema: Qualquer algoritmo para encontrar o maior elemento de um conjunto com n elementos, n - 1, faz pelo menos n - 1 comparaes;

29

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo: Maior Elementoy Prova: Cada um dos n - 1 elementos tem de ser mostrado,

por meio de comparaes, que menor do que algum outro elemento; y Logo n - 1 comparaes so necessrias; y 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.

30

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tamanho da Entrada de Dadosy A medida do custo de execuo de um algoritmo depende

principalmente do tamanho da entrada dos dados. y comum considerar o tempo de execuo de um programa como uma funo do tamanho da entrada. y Para alguns algoritmos, o custo de execuo uma funo da entrada particular dos dados, no apenas do tamanho da entrada.

31

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tamanho da Entrada de Dadosy No caso da funo Max do programa do exemplo, o custo

uniforme sobre todos os problemas de tamanho n. y 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.

32

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Melhor Caso, Pior Caso e Caso Mdioy Melhor caso: menor tempo de execuo sobre todas as

entradas de tamanho n. y Pior caso: maior tempo de execuo sobre todas as entradas de tamanho n. y Se f uma funo de complexidade baseada na anlise de pior caso, o custo de aplicar o algoritmo nunca maior do que f(n). y Caso mdio (ou caso esperado): mdia dos tempos de execuo de todas as entradas de tamanho n.

33

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Melhor Caso, Pior Caso e Caso Mdioy 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. y A analise do caso mdio geralmente muito mais difcil de obter do que as anlises do melhor e do pior caso. y comum supor uma distribuio de probabilidades em que todas as entradas possveis so igualmente provveis. y Na prtica isso nem sempre verdade.

34

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo Registros de um Arquivoy Considere o problema de acessar os registros de um

arquivo. y Cada registro contm uma chave nica que utilizada para recuperar registros do arquivo. y O problema: dada uma chave qualquer, localize o registro que contenha esta chave. y O algoritmo de pesquisa mais simples o que faz a pesquisa seqencial.

35

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo Registros de um Arquivoy 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).y melhor caso: f(n) = 1 (registro procurado o primeiro

consultado); y pior caso: f(n) = n (registro procurado o ltimo consultado ou no est presente no arquivo); y caso mdio: f(n) = (n + 1)/2.

36

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo Registros de um Arquivoy No estudo do caso mdio, vamos considerar que toda

pesquisa recupera um registro. y 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 y f(n) = 1 x p1 + 2 x p2 + 3 x p3 + ... + n x pn. y Para calcular f(n) basta conhecer a distribuio de probabilidades pi.

37

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo Registros de um Arquivoy Se cada registro tiver a mesma probabilidade de ser acessado

que todos os outros, ento pi = 1/n; 1 *Max) *Max = A[i]; if (A[i] < *Min) *Min = A[i]; } }

39

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo - Maior e Menor Elemento (1)y Seja f(n) o nmero de comparaes entre os elementos de A,

se A contiver n elementos. y Logo f(n) = 2(n 1), para n > 0, para o melhor caso, pior caso e caso mdio. y MaxMin1 pode ser facilmente melhorado: a comparao A[i] < Min s necessria quando a comparao A[i] > Max d falso.

40

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo - Maior e Menor Elemento (2)y Com a implementao da melhoria ficaria:

void maxmin2(Vetor A, 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]; } }

41

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo - Maior e Menor Elemento (2)y Para a nova implementao temos:y melhor caso: f(n) = n 1 (quando os elementos esto em ordem

crescente); y pior caso: f(n) = 2(n 1) (quando os elementos esto em ordem decrescente); y caso mdio: f(n) = 3n/2 3/2;y No caso mdio, A[i] maior do que Max a metade das vezes; y Logo para n > 0 teremos:

42

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo - Maior e Menor Elemento (3)y Considerando o nmero de comparaes realizadas, existe a

possibilidade de obter um algoritmo mais eficiente: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.1.

43

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo - Maior e Menor Elemento void maxmin3(Vetor A, int *Max, int *Min) { (3) 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 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; } }44 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Exemplo - Maior e Menor Elemento (3)y Os elementos de A so comparados dois a dois e os

elementos maiores so comparados com Max e os elementos menores so comparados com Min; y Quando n mpar, o elemento que est na posio A[n] duplicado na posio A[n + 1] para evitar um tratamento de exceo; y Para esta implementao, para n >0, teremos para o melhor caso, pior caso e caso mdio:

45

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comparao entre os Algoritmos MaxMin1, MaxMin2 e MaxMin3y A tabela apresenta uma comparao entre os algoritmos dos

programas MaxMin1, MaxMin2 e MaxMin3, considerando o nmero de comparaes como medida de complexidade; y Os algoritmos MaxMin2 e MaxMin3 so superiores ao algoritmo MaxMin1 de forma geral; y O algoritmo MaxMin3 superior ao algoritmo MaxMin2 com relao ao pior caso e bastante prximo quanto ao caso mdio;

46

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comparao entre os Algoritmos MaxMin1, MaxMin2 e MaxMin3

47

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comportamento Assinttico de Funesy O parmetro n fornece uma medida da dificuldade para se

resolver o problema; y Para valores suficientemente pequenos de n, qualquer algoritmo custa pouco para ser executado, mesmo os ineficientes; y A escolha do algoritmo no um problema crtico para problemas de tamanho pequeno; y Logo, a anlise de algoritmos realizada para valores grandes de n;

48

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comportamento Assinttico de Funesy Estuda-se o comportamento assinttico das funes de custo

(comportamento de suas funes de custo para valores grandes de n); y O comportamento assinttico de f(n) representa o limite do comportamento do custo quando n cresce.

49

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Dominao Assintticay A anlise de um algoritmo geralmente conta com apenas

algumas operaes elementares; y A medida de custo ou medida de complexidade relata o crescimento assinttico da operao considerada; y Denio: Uma funo f(n) domina assintoticamente outra funo g(n) se existem duas constantes positivas c e m tais que, para n >= m, temos |g(n)| = 0.

52

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Notao Oy Escrevemos g(n) = O(f(n)) para expressar que f(n) domina

assintoticamente g(n). L-se g(n) da ordem no mximo f(n). y Exemplo: quando dizemos que o tempo de execuo T(n) de um programa O(n2), significa que existem constantes c e m tais que, para valores de n >= m, T(n) =

0, n = m, n2 = n para qualquer n >= m, e no existe uma constante c que possa ser maior ou igual a n para todo n.

56

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Notao Oy Exemplo: g(n) = 3n3 + 2n2 + n O(n3).y Basta mostrar que 3n3 + 2n2 + n = 0. y A funo g(n) = 3n3 + 2n2 + n tambm O(n4), entretanto esta

afirmao mais fraca do que dizer que g(n) O(n3).y Exemplo: g(n) = log5 n O (log n).y O logb n difere do logc n por uma constante que no caso logb

c. y Como n = c logc n, tomando o logaritmos base b em ambos os lados da igualdade temos que logb n = logb clogc n = logc n X logb c.

57

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Operaes com a Notao O

58

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Operaes com a Notao Oy Exemplo: regra da soma O(f(n) + O(g(n)).y Suponha trs trechos cujos tempos de execuo so O(n), O(n2) e

O(n log n). y O tempo de execuo dos dois primeiros trechos O(max(n, n2)), que O(n2). y O tempos de execuo de todos os trs trechos ento O(max(n2, n log n)), que O(n2).

59

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Classes de comportamento assintticoy Se f uma funo de complexidade para um algoritmo F,

ento O(f) considerada a complexidade assinttica ou o comportamento assinttico do algoritmo F. y A relao de dominao assinttica permite comparar funes de complexidade; y Entretanto, se as funes f e g dominam assintoticamente uma a outra, ento os algoritmos associados so equivalentes; y Nestes casos, o comportamento assinttico no serve para comparar os algoritmos;

60

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Classes de comportamento assintticoy Por exemplo, considere dois algoritmos F e G aplicados

mesma classe de problemas, sendo que F leva trs vezes o tempo de G ao serem executados, isto , f(n) = 3g(n), sendo que O(f(n)) = O(g(n)); y Logo, o comportamento assinttico no serve para comparar os algoritmos F e G, porque eles diferem apenas por uma constante;

61

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comparao de programasy Podemos avaliar programas comparando as funes de

complexidade, negligenciando as constantes de proporcionalidade; y Um programa com tempo de execuo O(n) melhor que outro com tempo O(n2); y Porm, as constantes de proporcionalidade podem alterar esta considerao;

62

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comparao de programasy Exemplo: um programa leva 100n unidades de tempo para

ser executado e outro leva 2n2. Qual dos dois programas melhor?y depende do tamanho do problema; y Para n < 50, o programa com tempo 2n2 melhor do que o que

possui tempo 100n; y Para problemas com entrada de dados pequena prefervel usar o programa cujo tempo de execuo O(n2); y Entretanto, quando n cresce, o programa com tempo de execuo O(n2) leva muito mais tempo que o programa O(n).

63

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Principais classes de problemasy f(n) = O(1)y Algoritmos de complexidade O(1) so ditos de complexidade

constante; y Uso do algoritmo independe de n; y As instrues do algoritmo so executadas um nmero fixo de vezes;

64

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Principais classes de problemasy f(n) = O(log n)y Um algoritmo de complexidade O(log n) dito ter

complexidade logartmica; y Tpico em algoritmos que transformam um problema em outros menores; y Pode-se considerar o tempo de execuo como menor que uma constante grande; y Quando n mil, log2 n 10, quando n 1 milho, log2 n 20; y Para dobrar o valor de log n temos de considerar o quadrado de n; y A base do logaritmo muda pouco estes valores: quando n 1 milho, o log2n 20 e o log10n 6.65 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Principais classes de problemasy f(n) = O(n)y Um algoritmo de complexidade O(n) dito ter complexidade

linear; y Em geral, um pequeno trabalho realizado sobre cada elemento de entrada; y a melhor situao possvel para um algoritmo que tem de processar/produzir n elementos de entrada/sada; y Cada vez que n dobra de tamanho, o tempo de execuo dobra;

66

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Principais classes de problemasy f(n) = O(n log n)y Tpico em algoritmos que quebram um problema em outros

menores, resolvem cada um deles independentemente e ajuntando as solues depois. y Quando n 1 milho, n log2 n cerca de 20 milhes. y Quando n 2 milhes, n log2 n cerca de 42 milhes, pouco mais do que o dobro.

67

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Principais classes de problemasy f(n) = O(n2)y Um algoritmo de complexidade O(n2) dito ter complexidade

quadrtica; y Ocorrem quando os itens de dados so processados aos pares, muitas vezes em um anel dentro de outro; y Quando n mil, o nmero de operaes da ordem de 1 milho. y Sempre que n dobra, o tempo de execuo multiplicado por 4; y teis para resolver problemas de tamanhos relativamente pequenos;68 Prof. Dr. Lus Carlos Costa Fonseca 28 de julho de 2011

Principais classes de problemasy f(n) = O(n3)y Um algoritmo de complexidade O(n3) dito ter complexidade

cbica; y teis apenas para resolver pequenos problemas; y Quando n 100, o nmero de operaes da ordem de 1 milho; y Sempre que n dobra, o tempo de execuo fica multiplicado por 8;

69

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Principais classes de problemasy f(n) = O(2n)y Um algoritmo de complexidade O(2n) dito ter complexidade

exponencial; y Geralmente no so teis sob o ponto de vista prtico; y Ocorrem na soluo de problemas quando se usa fora bruta para resolv-los; y Quando n 20, o tempo de execuo cerca de 1 milho. Quando n dobra, o tempo fica elevado ao quadrado;

70

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Principais classes de problemasy f(n) = O(n!)y Um algoritmo de complexidade O(n!) dito ter complexidade

exponencial, apesar de O(n!) ter comportamento muito pior do que O(2n); y Geralmente ocorrem quando se usa fora bruta para na soluo do problema; y n = 20 20! = 2432902008176640000, um nmero com 19 dgitos; y n = 40 um nmero com 48 dgitos;

71

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comparao de funes de complexidade

72

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Comparao de funes de complexidade

73

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Algoritmos Polinomiaisy Algoritmo exponencial no tempo de execuo tem funo de y y

y y

complexidade O(cn); c > 1; Algoritmo polinomial no tempo de execuo tem funo de complexidade O(p(n)), onde p(n) um polinmio; A distino entre estes dois tipos de algoritmos torna-se significativa quando o tamanho do problema a ser resolvido cresce; Por isso, os algoritmos polinomiais so muito mais teis na prtica do que os exponenciais; Algoritmos exponenciais so geralmente simples variaes de pesquisa exaustiva;28 de julho de 2011

74

Prof. Dr. Lus Carlos Costa Fonseca

Algoritmos Polinomiaisy Algoritmos polinomiais so geralmente obtidos mediante

entendimento mais profundo da estrutura do problema; y Um problema considerado:y intratvel: se no existe um algoritmo polinomial para resolv-

lo; y bem resolvido: quando existe um algoritmo polinomial para resolv-lo;

75

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Algoritmos Polinomiais X Algoritmos Exponenciaisy A distino entre algoritmos polinomiais eficientes e algoritmos y

y y

y

exponenciais ineficientes possui vrias excees; Exemplo: um algoritmo com funo de complexidade f(n) = 2n mais rpido que um algoritmo g(n) = n5 para valores de n menores ou iguais a 20; Tambm existem algoritmos exponenciais que so muito teis na prtica; Exemplo: o algoritmo Simplex para programao linear possui complexidade de tempo exponencial para o pior caso mas executa muito rpido na prtica; Tais exemplos no ocorrem com freqncia na prtica, e muitos algoritmos exponenciais conhecidos no so muito teis;28 de julho de 2011

76

Prof. Dr. Lus Carlos Costa Fonseca

Exemplo de Algoritmo Exponencialy Um caixeiro viajante deseja visitar n cidades de tal forma que

sua viagem inicie e termine em uma mesma cidade, e cada cidade deve ser visitada uma nica vez; y Supondo que sempre h uma estrada entre duas cidades quaisquer, o problema encontrar a menor rota para a viagem; y A figura ilustra o exemplo para quatro cidades c1; c2; c3; c4, em que os nmeros nos arcos indicam a distncia entre duas cidades;

77

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo de Algoritmo Exponencialy O percurso uma soluo para o

problema, cujo percurso total tem distncia 24.

78

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo de Algoritmo Exponencialy Um algoritmo simples seria verificar todas as rotas e escolher y

y y y

a menor delas; H (n 1)! rotas possveis e a distncia total percorrida em cada rota envolve n adies, logo o nmero total de adies n!; No exemplo anterior teramos 24 adies; Suponha agora 50 cidades: o nmero de adies seria 50! 1064; Em um computador que executa 109 adies por segundo, o tempo total para resolver o problema com 50 cidades seria maior do que 1045 sculos s para executar as adies;

79

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Exemplo de Algoritmo Exponencialy O problema do caixeiro viajante aparece com freqncia em

problemas relacionados com transporte, mas tambm aplicaes importantes relacionadas com otimizao de caminho percorrido.

80

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Tcnicas de Anlise de Algoritmosy Determinar o tempo de execuo de um programa pode ser um

problema matemtico complexo; y Determinar a ordem do tempo de execuo, sem preocupao com o valor da constante envolvida, pode ser uma tarefa mais simples; y A anlise utiliza tcnicas de matemtica discreta, envolvendo contagem ou enumerao dos elementos de um conjunto:y y y y y y

Manipulao de somas; Produtos; Permutaes; Fatoriais; Coeficientes binomiais; Soluo de equaes de recorrncia;

81

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

ExercciosD o conceito de algoritmo, tipo de dados e tipo abstrato de dados. 2. O que significa dizer que um algoritmo executa em um tempo proporcional a n? 3. Qual algoritmo voc prefere: um algoritmo que requer n5 passos ou um que requer 2n passos? 4. Explique a diferena entre O(1) e O(2)?1.

82

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

ExercciosImplemente os trs algoritmos apresentados nos programas para obter o mximo e o mnimo de um conjunto contendo n elementos. Execute os algoritmos para valores suficientemente grandes de n, gerando casos de teste para o melhor caso, pior caso e caso esperado. Comente os resultados obtidos. 2. Faa uma pesquisa sobre outras notaes diferentes da notao O. Apresente na forma de trabalho.1.

83

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011

Obrigado!y Contatos:y [email protected] y [email protected] y [email protected]

84

Prof. Dr. Lus Carlos Costa Fonseca

28 de julho de 2011