Вы находитесь на странице: 1из 24

Prof. Renato Gomide gomide.prof@gmail.

com

Estimar e comparar tempos de execuo de algoritmos


Eficincia de algoritmos Comparao entre tempos de execuo Loops invariantes Anlise de algoritmos Notao assinttica Mtodo bolha Ordenao por seleo Ordenao por insero Ordenao estvel e instvel Shell Sort Merge Sort Quick Sort Radix Sort

Algoritmos de ordenao

Tabelas Hash

Introduo teoria dos grafos


Introduo Buscas Grafos orientados Grafos ponderados

Introduo Tabelas de endereamento direto Tabelas Hash Funes Hash Endereamento aberto Encadeamento separado Eficincia de hashing

Estruturas de dados fornecidas pelo Java


Collections framework Listas: java.util.List Ordenao: Collections.sort Conjuntos: java.util.Set Mapas: java.util.Map

Prova (60%) Apresentao de trabalhos (40%)


Estimativa de 1 trabalho para cada assunto Nota Final = mdia geral dos trabalhos

Recurso Pilhas Filas Listas rvores

Tcnica de programao na qual um mtodo (funo) chama a si mesmo Fornece uma estrutura nica para resolver muitos problemas Exemplo:
Clculo de nmeros triangulares Fatoriais Busca binria recursiva Torres de Hanoi

Cuidado!
Evitar ocorrncia de laos infinitos A recurso deve ter uma condio de parada (flag) no qual a execuo chega a um ponto em que a funo no chamada

1, 3, 6, 10, 15, 21, ..., [n = n 1 + ndice], ... Soluo:

int numeroTriangular (int n) { int total = 0; while (n > 0) { total = total + n; n--; } }

Utilizando recurso para solucionar o problema:


Encontrar o 9 nmero triangular O resultado 9 mais o 8 nmero triangular Voc pede para algum encontrar o 8 nmero triangular Quando tiver a resposta adiciono 9 Mas o 8 nmero triangular 8 mais o 7 Ento outro algum calcular o 7 nmero triangular A responsabilidade passada at que chegue no primeiro nmero triangular que igual a 1
Obs.: essa ltima execuo previne a execuo infinita da soluo do problema

Soluo recursiva:

int numeroTriangular(int n) { if (n == 1) { return 1; } else { return (n + numeroTriangular(n 1)); } }

Chama a si mesmo Quando chama a si mesmo, faz isso para resolver um problema menor H alguma verso do problema que simples o bastante para que a rotina possa resolv-lo e retornar sem chamar a si mesma A cada chamada sucessiva o argumento fica menor, ou seja, o problema ficou menor ou mais fcil

Pode causar overhead O controle deve ser transferido do local da chamada para o incio do mtodo Gera pilha interna de execuo (gerenciamento de memria) Talvez a abordagem utilizando o while pode ser executada de forma mais rpida A memria usada para armazenar todos os argumentos intermedirios e valores de retornos na pilha interna do sistema A recurso usada porque simplifica um problema conceitualmente

Conceito similar dos nmeros triangulares Fatorial de 5 5 * 4 * 3 * 2 * 1

Soluo recursiva

int fatorial(int n) {
if (n == 0) { return 1; } else { return (n * fatorial(n - 1)); }

Um anagrama o conjunto de combinaes das letras de uma palavra feito uma operao de permutao (organizao de coisas em uma ordem definida) Ex.: anagrama da palavra co
co co oc co oc oc

O nmero de possibilidades possveis o fatorial do nmero de letras Estratgia de implementao:


Assuma que a palavra tenha n letras Faa o anagrama das n-1 letras mais direita Gire todas as n letras Repita essas etapas n vezes

Resolver em sala de aula

Soluo

Pr-requisito
O vetor deve estar ordenado

Ex.: vetor a[] =

| 2 | 3 | 5 | 10 | 17 | 20 | 21 | 23 | 40 | 44 | 45 | 46 | 0 1 2 3 4 5 6 7 8 9 10 11

Soluo utilizando lao de repetio:

Busca binria recursiva Entregar at as 23:59 do dia 02/11/2012 E-mail para entrega: gomide.prof@gmail.com Identificao:
[ED-II] Busca Binria Recursiva - <Nome do aluno>

Вам также может понравиться