24/5/13 Valdemar 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
55
Embed
24/5/13 Valdemar 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.
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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)
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!