Upload
internet
View
109
Download
1
Embed Size (px)
Citation preview
24/5/13Valdemar W. Setzer – Algoritmos 1
ALGORITMOS E SUA ANÁLISE:
UMA INTRODUÇÃO
À CIÊNCIA DA COMPUTAÇÃO
Valdemar W. Setzer
Depto. de Ciência da Computação da USP
Ver artigo e esta apresentação em
www.ime.usp.br/~vwsetzer
google: valdemar setzer home
24/5/13Valdemar W. Setzer – Algoritmos 2
TÓPICOS1. Introdução2. O problema a ser resolvido
3. Soluções obtidas4. O que é um algoritmo?
5. Qual dos 3 é o melhor algoritmo?6. É possível melhorar a eficiência?7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 3
1. Introdução Algoritmos são usados há milhares de
anos Soma armada Algoritmo de Euclides (máximo divisor comum (séc. 3 a.C.)
Tornaram-se essenciais na computação
Todos os programas que funcionam implementam algoritmos
24/5/13Valdemar W. Setzer – Algoritmos 4
1. Introdução (cont.) Vamos ver o que são algoritmos Vamos aprender o que é um tipo de
sua análise Verificar que essa análise é essencial
constituindo portanto uma parte fundamental da ciência da computação
Usaremos um problema fundamental da computação:
Ordenação de números, palavras, etc.
24/5/13Valdemar W. Setzer – Algoritmos 5
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas4. O que é um algoritmo?
5. Qual é o melhor algoritmo?6. É possível melhorar a eficiência?7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 6
2. O problema a ser resolvidoOrdenar n númerosMaterial Cartolinas com 8 compartimentos Cada compartimento tem uma tira Em cada tira há um número Ordenar esses 8 números em ordem
crescente seguindo as seguintes regras
(Pode ser feito sem cartolinas, com as tiras sobre a mesa)
24/5/13Valdemar W. Setzer – Algoritmos 7
2. O problema a ser resolvido (cont.)Regras
R1: Pode-se levantar um pouco uma tira de seu compartimento, e ver seu conteúdo
R2: Se uma tira estiver abaixada, seu número está invisível (é desconhecido)
R3: No máximo 2 tiras podem estar levantadas ao mesmo tempo
R4: O conteúdo de 2 tiras pode ser comparado para saber qual o maior
R5: Duas tiras podem ser trocadas de compartimento
24/5/13Valdemar W. Setzer – Algoritmos 8
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas4. O que é um algoritmo?
5. Qual é o melhor algoritmo?6. É possível melhorar a eficiência?7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 9
3. Soluções obtidas Notar algumas dificuldades
Seguir estritamente as regras Por exemplo, não memorizar os conteúdos
das tiras Descrever o processo Descrever qual o critério de término do
processo
24/5/13Valdemar W. Setzer – Algoritmos 10
Método de seleção
(Compara o 1o. com cada um dos outros, troca quando ele for maior; depois compara o 2o. com cada um dos outros, etc.)
5 10 3 7 15 2 1 9 1 10 5 7 15 3 2 9
5 10 3 7 15 2 1 9 1 5 10 7 15 3 2 9
3 10 5 7 15 2 1 9 1 3 10 7 15 5 2 9
2 10 5 7 15 3 1 9 1 2 10 7 15 5 3 9
1 10 5 7 15 3 2 9 1 2 10 7 15 5 3 9
1 2 9 7 15 5 3 10
24/5/13Valdemar W. Setzer – Algoritmos 11
3. Soluções obtidas (cont.) MÉTODO DE SELEÇÃO (em cada varrida, seleciona-se o menor)
5 10 3 7 15 2 1 93 10 5 7 15 2 1 92 10 5 7 15 3 1 91 10 5 7 15 3 2 91 10 5 7 15 3 2 9
1 5 10 7 15 3 2 91 3 10 7 15 5 2 91 2 10 7 15 5 3 9
1 2 7 10 15 5 3 91 2 5 10 15 7 3 91 2 3 10 15 7 5 9
1 2 3 7 15 10 5 91 2 3 5 10 15 7 9
1 2 3 5 7 15 10 9...
1 2 3 5 7 9 10 15
24/5/13Valdemar W. Setzer – Algoritmos 12
Método da bolha
(Compara o 1o com o 2o, troca se o 1o for maior; depois compara o 2o com 3o e troca se for maior etc.)
5 10 3 7 15 2 1 9 1 5 7 10 3 2 15 9
5 10 3 7 15 2 1 9 1 5 7 10 3 2 9 15
3 5 10 7 15 2 1 9 1 5 7 10 3 2 9 15
2 5 7 10 15 3 1 9 1 5 7 10 3 2 9 15
1 5 7 10 15 3 2 9 1 5 7 10 3 2 9 15
1 5 7 10 3 15 2 9 1 5 7 3 10 2 9 15
24/5/13Valdemar W. Setzer – Algoritmos 13
3. Soluções obtidas (cont.) MÉTODO DA BOLHA (em cada varrida, compara-se e troca-se de 2 em 2)
5 10 3 7 15 2 1 95 3 10 7 15 2 1 95 3 7 10 15 2 1 95 3 7 10 15 2 1 95 3 7 10 2 15 1 95 3 7 10 2 1 15 95 3 7 10 2 1 9 153 5 7 10 2 1 9 153 5 7 2 10 1 9 153 5 7 2 1 10 9 153 5 7 2 1 9 10 153 5 2 7 1 9 10 153 5 2 1 7 9 10 153 2 5 1 7 9 10 152 3 5 1 7 9 10 15
2 3 1 5 7 9 10 152 1 3 5 7 9 10 151 2 3 5 7 9 10 15
24/5/13Valdemar W. Setzer – Algoritmos 14
Método de inserção
(Compara cada par consecutivo; quando houver troca, compara para trás e troca se necessário)
5 10 3 7 15 2 1 9 3 5 7 10 15 2 1 9
5 10 3 7 15 2 1 9 3 5 7 10 2 15 1 9
5 3 10 7 15 2 1 9 3 5 7 2 10 15 1 9
3 5 10 7 15 2 1 9 3 5 2 7 10 15 1 9
3 5 7 10 15 2 1 9 3 2 5 7 10 15 1 9
3 5 7 10 15 2 1 9 3 2 5 7 10 1 15 9
24/5/13Valdemar W. Setzer – Algoritmos 15
3. Soluções obtidas (cont.)MÉTODO DA INSERÇÃO (compara-se de 2 em 2; se houver troca, compara para
trás)
5 10 3 7 15 2 1 95 3 10 7 15 2 1 93 5 10 7 15 2 1 93 5 7 10 15 2 1 93 5 7 10 2 15 1 93 5 7 2 10 15 1 93 5 2 7 10 15 1 93 2 5 7 10 15 1 92 3 5 7 10 15 1 92 3 5 7 10 1 15 92 3 5 7 1 10 15 92 3 5 1 7 10 15 92 3 1 5 7 10 15 92 1 3 5 7 10 15 91 2 3 5 7 10 15 91 2 3 5 7 10 9 151 2 3 5 7 9 10 15
24/5/13Valdemar W. Setzer – Algoritmos 16
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas4. O que é um algoritmo?
5. Qual é o melhor algoritmo?6. É possível melhorar a eficiência?7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 17
4. O que é um algoritmo?Uma sequência de passos
Cada um, com uma ação matematicamente bem definida
FinitaUsa conjuntos matematicamente bem
definidos de dados de entradaTermina para qualquer conjunto de
dados de entrada (isto é, não fica executando algumas ações indefinidamente)
24/5/13Valdemar W. Setzer – Algoritmos 18
4. O que é um algoritmo? (cont.) Uma descrição de como trocar um
pneu é um algoritmo? E uma descrição do que se deve fazer
ao acordar de manhã? Nada disso é um algoritmo!
Pois os passos não são matematicamente
bem definidos
24/5/13Valdemar W. Setzer – Algoritmos 19
4. O que é um algoritmo? (cont.) E o problema de ordenar as tiras?
NÃO! Ações físicas não são matematicamente bem
definidas
E ordenar números em um computador? Sim! Computador é uma máquina matemática Dados e as instruções executadas pela
máquina são matematicamente bem definidos! As regras R1...R5 foram feitas para se poder
processar a ordenação em um computador
24/5/13Valdemar W. Setzer – Algoritmos 20
4. O que é um algoritmo? (cont.) Regras (recordação)
R1: Pode-se levantar um pouco uma tira de seu compartimento, e ver seu conteúdo
R2: Se uma tira estiver abaixada, seu número está invisível (é desconhecido)
R3: No máximo 2 tiras podem estar levantadas ao mesmo tempo
R4: O conteúdo de 2 tiras pode ser comparado para saber qual o maior
R5: Duas tiras podem ser trocadas de compartimento
24/5/13Valdemar W. Setzer – Algoritmos 21
4. O que é um algoritmo? (cont.) Regras para um computador
R1: É possível examinar (abrir) uma posição de ‘memória’ contendo um número
R2: Sem examinar uma posição de ‘memória’, o seu conteúdo é desconhecido
R3: No máximo 2 posições de ‘memória’ podem ser examinadas ao mesmo tempo
R4: Os conteúdos de 2 posições de ‘memória’ podem ser comparados para saber qual o maior
R5: Pode-se trocar o conteúdo de duas posições de ‘memória’
24/5/13Valdemar W. Setzer – Algoritmos 22
4. O que é um algoritmo? (cont.) Regras para um computador (cont.)
Na verdade, nos computadores modernos A comparação é feita entre o conteúdo de um
registrador (fora da ‘memória’) e uma posição de ‘memória’, ou entre dois registradores O movimento de dados sempre se dá
Da memória para um registrador De um registrador para a memória Entre registradores Da memória para a memória, em bloco
24/5/13Valdemar W. Setzer – Algoritmos 23
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas 4. O que é um algoritmo?
5. Qual é o melhor algoritmo?6. É possível melhorar a eficiência?7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 24
5. Qual dos 3 é o melhor algoritmo? Critério de complexidade:
Número de comparações em função do número de dados de entrada
Indica a eficiência pela rapidez, ou o tempo que leva para ser executado
Poderia ser outroPor exemplo, num computador, o
número de instruções executadas
Não vai dar diferença em termos do ‘melhor’
24/5/13Valdemar W. Setzer – Algoritmos 25
5. Qual é o melhor algoritmo? (cont.)
MÉTODO DA SELEÇÃO (em cada varrida, seleciona-se o menor)
5 10 3 7 15 2 1 93 10 5 7 15 2 1 92 10 5 7 15 3 1 91 10 5 7 15 3 2 91 10 5 7 15 3 2 9
1 5 10 7 15 3 2 91 2 10 7 15 5 3 9
1 2 7 10 15 5 3 91 2 5 10 15 7 3 91 2 3 10 15 7 5 9
1 2 3 7 15 10 5 91 2 3 5 10 15 7 9
1 2 3 5 7 15 10 9...
1 2 3 5 7 9 10 15
24/5/13Valdemar W. Setzer – Algoritmos 26
5. Qual é o melhor algoritmo? (cont.)
1a. varrida: 7 comparações 2a. varrida: 6 comparações 3a. varrida: 5 comparações ... 7a. Varrida: 1 comparação Resulta, para as 8 tiras, uma P.A.
7 + 6 + 5 + 4 + 3 + 2 + 1 = 7 (7 + 1) / 2 = 8 (8 – 1) / 2 = 28
Para n números: n (n – 1) / 2 pode ser provado por indução finita
24/5/13Valdemar W. Setzer – Algoritmos 27
5. Qual é o melhor algoritmo? (cont.)
MÉTODO DA BOLHA (em cada varrida, compara-se de 2 em 2)
5 10 3 7 15 2 1 95 3 10 7 15 2 1 95 3 7 10 15 2 1 95 3 7 10 15 2 1 95 3 7 10 2 15 1 95 3 7 10 2 1 15 95 3 7 10 2 1 9 153 5 7 10 2 1 9 153 5 7 2 10 1 9 153 5 7 2 1 10 9 153 5 7 2 1 9 10 153 5 2 7 1 9 10 153 5 2 1 7 9 10 153 2 5 1 7 9 10 152 3 5 1 7 9 10 15
2 3 1 5 7 9 10 152 1 3 5 7 9 10 151 2 3 5 7 9 10 15
24/5/13Valdemar W. Setzer – Algoritmos 28
5. Qual é o melhor algoritmo? (cont.)
Melhor caso: sequência já ordenada Ex:
1 2 3 5 7 9 10 15
n – 1 comparações
Pior caso: ordem contrária Ex:
15 10 9 7 5 3 2 1
n (n – 1) / 2
24/5/13Valdemar W. Setzer – Algoritmos 29
5. Qual é o melhor algoritmo? (cont.)
MÉTODO DA INSERÇÃO (compara-se de 2 em 2; se houver troca, compara para trás, inserindo no lugar correto até o ponto já ordenado)
5 10 3 7 15 2 1 95 3 10 7 15 2 1 93 5 10 7 15 2 1 93 5 7 10 15 2 1 93 5 7 10 2 15 1 93 5 7 2 10 15 1 93 5 2 7 10 15 1 93 2 5 7 10 15 1 92 3 5 7 10 15 1 92 3 5 7 10 1 15 92 3 5 7 1 10 15 92 3 5 1 7 10 15 92 3 1 5 7 10 15 92 1 3 5 7 10 15 91 2 3 5 7 10 15 91 2 3 5 7 10 9 151 2 3 5 7 9 10 15
24/5/13Valdemar W. Setzer – Algoritmos 30
5. Qual é o melhor algoritmo? (cont.)
Melhor caso: sequência já ordenada Ex:
1 2 3 5 7 9 10 15
n – 1 comparações
Pior caso: ordem contrária Ex:
15 10 9 7 5 3 2 1
n (n – 1) / 2
24/5/13Valdemar W. Setzer – Algoritmos 31
5. Qual é o melhor algoritmo? (cont.)
Portanto, no pior caso todos dão
n (n – 1) / 2
Para n muito grande (caso assintótico) tem-se praticamente
n2
Notação:
O(n2) “ordem de n2”
24/5/13Valdemar W. Setzer – Algoritmos 32
5. Qual é o melhor algoritmo? (cont.)
O(n2) “ordem de n2”
Significa que, assintoticamente (n grande), dobrando-se o número de elementos a serem ordenados, o tempo de ordenação quadruplicará
24/5/13Valdemar W. Setzer – Algoritmos 33
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas 4. O que é um algoritmo?
5. Qual é o melhor algoritmo?6. É possível melhorar a eficiência?7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 34
6. É possível melhorar a eficiência? Vejamos o método
Binary merge sort
ou
Ordenação por intercalação binária
ou
Ordenação por gente preguiçosa
24/5/13Valdemar W. Setzer – Algoritmos 35
6. É possível melhorar? (cont.)
24/5/13Valdemar W. Setzer – Algoritmos 36
6. É possível melhorar? (cont.)
24/5/13Valdemar W. Setzer – Algoritmos 37
6. É possível melhorar? (cont.)
24/5/13Valdemar W. Setzer – Algoritmos 38
6. É possível melhorar? (cont.)
24/5/13Valdemar W. Setzer – Algoritmos 39
6. É possível melhorar? (cont.) Notar que as regras R1 a R5 podem ser
seguidas, se as operações são feitas sequencialmente. Estrutura de dados em forma de
ÁRVORE BINÁRIA Níveis
0123
RaizNós
Folhas
Altura
24/5/13Valdemar W. Setzer – Algoritmos 40
6. É possível melhorar? (cont.)Número de comparações:
Seja um maço inicial com n cartões Cada pessoa P, em um nível v, recebe e intercala
cartões de seus dois ajudantes do nível v+1
O último cartão não é comparado, é por construção o maior e é colocado no fim do maço construído por P
O número total de comparações feitas pelo total das pessoas no nível v com os cartões dos ajudantes do nível v+1 é então
n – (número de pessoas em v)Ex. de melhor caso: P no nível 1, intercalando 2 maços com os
números1, 2, 3, 4 e 5, 6, 7, 8
dá 3 comparações a menos (4 em lugar de 7, o pior caso)Quantas pessoas existem e quantas comparações são feitas em
cada nível, no pior caso?
24/5/13Valdemar W. Setzer – Algoritmos 41
6. É possível melhorar? (cont.)Nível No nós No comp.
0 20=1 n-1
1 21=2 n-2
2 22=4 n-4
3 23=8 n-8
... ... ...
m-1 2m-1 n-n/2
m 2m n-n=0
24/5/13Valdemar W. Setzer – Algoritmos 42
6. É possível melhorar? (cont.)Portanto, o número total de comparações
é
C = (n-1) + (n-2) + (n-4) + (n-8) + ... + (n-n/2)Como são m (0 a m-1) termos a serem somados, onde m é a altura da árvore,
C = mn – (1 + 2 + 4 + 8 + ... + n/2)
Precisamos calcular o número de nós de uma árvore binária com n folhas
No. de nós de uma árvore com n/2 folhas
24/5/13Valdemar W. Setzer – Algoritmos 43
6. É possível melhorar? (cont.) Número total de nós de uma árvore binária
Com n/2 folhas, a árvore tem 2(n/2) – 1 = n – 1 nós
NívelNo. nós
Totalde nós
0 1 1
1 2 3
2 4 7
3 8 15
... ... ...
m-1 2m-1 2m-1
m 2m 2m+1-1
24/5/13Valdemar W. Setzer – Algoritmos 44
6. É possível melhorar? (cont.) Como tínhamos
C = mn – (1 + 2 + 4 + 8 + ... + n/2) então
C = mn – (n – 1) = mn – n + 1
24/5/13Valdemar W. Setzer – Algoritmos 45
6. É possível melhorar? (cont.) Resta calcular m, a altura da árvore, em função
de n, No de elementos a ordenar (número de folhas)Nível No. nós
0 1
1 2
2 4
3 8
... ...
m-1 2m-1
m 2m
Portanto, n = 2m e então m = log2 n
24/5/13Valdemar W. Setzer – Algoritmos 46
6. É possível melhorar? (cont.) Como
C = mn – n + 1 e m = log2 n
No nosso caso, n = 8; portanto no pior caso
C = 8 3 – 8 + 1 = 17 comparações Comparar com o quadrático: 28 comparações
Portanto, a ordenação por intercalação binária tem complexidade O(n log n) Será que ela é muito melhor do que a O(n2)?
C = n log2n – n + 1
24/5/13Valdemar W. Setzer – Algoritmos 47
6. É possível melhorar? (cont.) n n(n-1)/2 nlog2n - n + 1
1 0 0
2 1 1
4 6 5
8 28 17
16 120 49
32 496 129
64 2.016 321
128 8.028 769
256 32.640 1.793
512 130.816 4.097
1024 523.776 9.217
2048 2.096.128 20.481
4096 8.386.560 45.057
8192 33.550.336 98.305
24/5/13Valdemar W. Setzer – Algoritmos 48
6. É possível melhorar? (cont.) Numa lista telefônica
Assinantes Quadrático Intercal. binária
131.072 8.589.869.056 2.097.153
1.048.576 549.755.813.888 19.922.945 Computador que faz 1.000.000 de
comparações por segundo: só nas comparações,
6 dias 20 s
24/5/13Valdemar W. Setzer – Algoritmos 49
6. É possível melhorar? (cont.) Espaço requerido
Não é preciso usar a árvore Solução simples: usar uma única fileira
adicional (mais n posições de memória) Há métodos n log n que não requerem
espaço adicional Um desses é o usado normalmente, Quicksort
(mas usa uma pilha de recursão) Ver vários vídeos no youtube, por exemplo
vizualization of quicksort
24/5/13Valdemar W. Setzer – Algoritmos 50
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas 4. O que é um algoritmo?
5. Qual é o melhor algoritmo? 6. É possível melhorar a eficiência?
7. Algoritmo ótimo8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 51
7. Algoritmo ótimo Existem métodos ainda mais rápidos
que os n log n? É possível provar formalmente que
não existe algoritmo de ordenação por comparação entre os objetos, com complexidade melhor do que n log n.
24/5/13Valdemar W. Setzer – Algoritmos 52
TÓPICOS 1. Introdução 2. O problema a ser resolvido
3. Soluções obtidas 4. O que é um algoritmo?
5. Qual é o melhor algoritmo? 6. É possível melhorar a eficiência? 7. Algoritmo ótimo
8. Conclusão
24/5/13Valdemar W. Setzer – Algoritmos 53
8. Conclusão
Vimos alguns tópicos da análise de algoritmos
uma área fundamental da ciência da computação
que visa a descoberta de algoritmos eficientesa comparação de algoritmos quanto à eficiênciaa prova de que algum algoritmo é ótimoa prova formal de que um algoritmo está corretoe muito mais!
24/5/13Valdemar W. Setzer – Algoritmos 54
8. Conclusão (cont.)
A computação, do ponto de vista algorítmico, está muito mais para a matemática do que para qualquer outra ciência
Portanto, no ensino médio, a disciplina correta
para se introduzir noções de ciência da computação e interessar alunos por ela é a matemática
Pode-se usar o método que foi aqui descrito
Ciência da computação não é saber usar um computador!
24/5/13Valdemar W. Setzer – Algoritmos 55
F I M