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
Projeto “Embaixadores da Matemática”
Ver artigo e esta apresentação em
www.ime.usp.br/~vwsetzer
google: valdemar setzer
Valdemar W. Setzer – Algoritmos
4/3/17
1
TÓPICOS
1. Introdução
2. O problema a ser resolvido
3. Soluções obtidas
4. O que é um algoritmo?
5. Qual dos 3 é o melhor algoritmo?
6. É possível melhorar a eficiência?
7. Algoritmo ótimo
8. Conclusão
Valdemar W. Setzer – Algoritmos
4/3/17
2
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
Valdemar W. Setzer – Algoritmos
4/3/17
3
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
Valdemar W. Setzer – Algoritmos
de números, palavras, etc.
4/3/17
4
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
Valdemar W. Setzer – Algoritmos
4/3/17
5
2. O problema a ser resolvido
Ordenar n números
Material
Cartolinas com 8 compartimentos numerados
Cada compartimento tem uma tira
Em cada tira há um número
(Pode ser feito sem cartolinas, com as tiras
sobre a mesa)
Ordenar esses 8 números em ordem
crescente
seguindo as seguintes regras
Valdemar W. Setzer – Algoritmos
4/3/17
6
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
R6: Podem-se anotar números de
compartimentos
Valdemar W. Setzer – Algoritmos
4/3/17
7
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
Valdemar W. Setzer – Algoritmos
4/3/17
8
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
Valdemar W. Setzer – Algoritmos
4/3/17
9
3.1 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. – em cada passada, seleciona o menor)
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 7 10 15 5 3 10
Valdemar W. Setzer – Algoritmos
4/3/17
10
3. Soluções obtidas (cont.)
3.1 MÉTODO DE SELEÇÃO (em cada varrida, seleciona-se o menor)
1
5
3
2
1
10
10
10
10
3
5
5
5
7
7
7
7
15
15
15
15
2
2
3
3
1
1
1
2
9
9
9
9
2
1
1
1
5
3
2
10
10
10
7
7
7
15
15
15
3
5
5
2
2
3
9
9
9
3
1
1
1
2
2
2
7
5
3
10
10
10
15
15
15
5
7
7
3
3
5
9
9
9
4
1
1
2
2
3
3
7
5
15
10
10
15
5
7
9
9
5
1
2
3
5
7
15
10
9
6
1
1
2
2
3
3
5
5
7
7
10
9
15
15
9
10
7
1
2
3
5
7
9
10
15
Valdemar W. Setzer – Algoritmos
4/3/17
11
3.2. 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. – a maior
“bolha” fica no fim, “sobe”)
5 10 3 7 15 2 1 9
5 3 7 10 2 1 15 9
5 10 3 7 15 2 1 9
5 3 7 10 2 1 9 15
5 3 10 7 15 2 1 9
3 5 7 10 3 2 9 15
5 3 7 10 15 2 1 9
3 5 7 10 3 2 9 15
5 3 7 10 15 2 1 9
1 5 7 10 3 2 9 15
5 3 7 10 2 15 1 9
1 5 7 3 10 2 9 15
Valdemar W. Setzer – Algoritmos
4/3/17
12
3. Soluções obtidas (cont.)
3.2 MÉTODO DA BOLHA (em cada varrida, compara-se e troca-se de 2 em 2)
1
2
3
4
5
6
5
5
5
5
5
5
5
5
5
3
3
3
3
3
3
3
3
2
2
1
10
10
3
3
3
3
3
3
3
5
5
5
5
5
5
2
2
3
1
2
Valdemar W. Setzer – Algoritmos
3
3
10
7
7
7
7
7
7
7
7
7
7
2
2
5
1
1
3
3
7
7
7
10
10
10
10
10
10
10
2
2
2
7
1
1
5
5
5
5
15
15
15
15
15
2
2
2
2
2
10
1
1
1
7
7
7
7
7
7
2
2
2
2
2
15
1
1
1
1
1
10
9
9
9
9
9
9
9
9
1
1
1
1
1
1
15
9
9
9
9
9
10
10
10
10
10
10
10
10
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
15
15
15
15
mostra
só trocas
4/3/17
13
3.3 Método de inserção
(Compara cada par consecutivo; quando houver troca,
compara para trás e troca se necessário – insere cada
número em sua posição definitiva até o momento)
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
2 3 5 7 10 15 1 9
Valdemar W. Setzer – Algoritmos
4/3/17
14
3. Soluções obtidas (cont.)
3.3 MÉTODO DA INSERÇÃO (compara-se de 2 em 2; se houver troca, compara
para trás)
1
2
3
4
5
5
5
3
3
3
3
3
3
2
2
2
2
2
2
1
1
1
10
3
5
5
5
5
5
2
3
3
3
3
3
1
2
2
2
Valdemar W. Setzer – Algoritmos
3
10
10
7
7
7
2
5
5
5
5
5
1
3
3
3
3
7
7
7
10
10
2
7
7
7
7
7
1
5
5
5
5
5
15
15
15
15
2
10
10
10
10
10
1
7
7
7
7
7
7
2
2
2
2
15
15
15
15
15
1
10
10
10
10
10
10
9
1
1
1
1
1
1
1
1
1
15
15
15
15
15
15
9
10
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
4/3/17
15
3.1a Método de seleção melhorado
(Compara o 1o. com cada um dos outros, se houver um
menor, compara este com os seguintes; no fim de cada
passada, troca com o primeiro, selecionando o menor)
5 10 3 7 15 2 1 9
1 10 3 7 15 2 5 9
5 10 3 7 15 2 1 9
1 10 3 7 15 2 5 9
5 10 3 7 15 2 1 9
1 10 3 7 15 2 5 9
5 10 3 7 15 2 1 9
1 2 3 7 15 10 5 9
5 10 3 7 15 2 1 9
1 2 3 7 15 10 5 9
1 10 3 7 15 2 5 9
1 2 3 5 15 10 7 9
Valdemar W. Setzer – Algoritmos
4/3/17
16
Método de seleção melhorado (cont.)
Ganho: diminui o número de trocas; o número de
comparações continua o mesmo
Valdemar W. Setzer – Algoritmos
4/3/17
17
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
Valdemar W. Setzer – Algoritmos
4/3/17
18
4. O que é um algoritmo?
Uma sequência de passos
Cada
um, com uma ação
matematicamente bem definida
Finita
Usa conjuntos matematicamente bem
definidos de dados de entrada
Termina para qualquer conjunto de dados
de entrada (isto é, não fica executando
algumas ações indefinidamente)
Valdemar W. Setzer – Algoritmos
4/3/17
19
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
Valdemar W. Setzer – Algoritmos
4/3/17
20
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...R6 foram feitas para se poder
processar a ordenação em um computador
Valdemar W. Setzer – Algoritmos
4/3/17
21
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
R6: Podem-se anotar números de
compartimentos
Valdemar W. Setzer – Algoritmos
4/3/17
22
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’
R6: podem-se armazenar ‘endereços’
(‘ponteiros’) de posições de ‘memória’
Valdemar W. Setzer – Algoritmos
4/3/17
23
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
Valdemar W. Setzer – Algoritmos
4/3/17
24
4. O que é um algoritmo? (cont.)
Deve-se descrever um algoritmo antes de
programá-lo em uma linguagem de programação
Algoritmo para o método da bolha
Versão 1 (descrição informal).
1. Compare C1 com C2 e troque-os de compartimentos
se C1 > C2.
2. Faça o mesmo com C2 e C3, depois C3 e C4, até Cn-1 e Cn.
3. Com isso, no fim dessa fase o maior elemento da
seqüência estará no compartimento n.
4. Fazemos agora uma segunda fase, indo com as
comparações até Cn-1, e então teremos o segundo maior
elemento da seqüência no compartimento n - 1.
5. Repetimos essas fases indo com as comparações até
Cn-2, depois Cn-3, … e, por último, indo até C2.
6. As tiras terminam ordenadas.
Valdemar W. Setzer – Algoritmos
4/3/17
25
4. O que é um algoritmo? (cont.)
Algoritmo
para o método da bolha (cont.)
Versão 2 (formalização inicial)
para i variando de n até 2
faça: compare C1 com C2,
C2 com C3,
…
Ci-1 com Ci,
trocando cada par de seus
compartimentos se Ci > Ci+1
Valdemar W. Setzer – Algoritmos
4/3/17
26
4. O que é um algoritmo? (cont.)
Algoritmo
para o método da bolha (cont.)
Versão 3 (formalização final)
para i variando de n até 2
faça: para j variando de 1 até i-1
faça: se Cj > Cj+1, troque-os
de compartimentos
Valdemar W. Setzer – Algoritmos
4/3/17
27
4. O que é um algoritmo? (cont.)
Programa em Pascal
Program Bolha;
{ Dados N e uma seqüência de N números, coloca-os em ordem crescente}
{ pelo método da bolha. No final, imprime a seqüência ordenada. }
var
N, { Número de elementos da seqüência }
I, J: integer; { Índices }
C: array[1..100] of real; { Compartimentos, máximo 100 elementos }
Aux: real; { Variável auxiliar usada na troca de conteúdo entre 2
compartimentos }
begin
{entrada dos dados e colocação no vetor C}
...
{ Ordenação }
for I:=N downto 2
do for J:=1 to I-1
do if C[J] > C[J+1]
then begin { troca C[J] com C[J+1] }
Aux:=C[J]; C[J]:=C[J+1]; C[J+1]:=Aux
end;
{Saída do resultado}
...
end.
Valdemar W. Setzer – Algoritmos
4/3/17
28
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
Valdemar W. Setzer – Algoritmos
4/3/17
29
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 outro critério
Por
exemplo, num computador, o número
de instruções executadas
Não vai dar diferença em termos do
‘melhor’
Valdemar W. Setzer – Algoritmos
4/3/17
30
5. Qual é o melhor algoritmo? (cont.)
3.1 MÉTODO DE SELEÇÃO (em cada varrida, seleciona-se o menor)
1
5
3
2
1
10
10
10
10
3
5
5
5
7
7
7
7
15
15
15
15
2
2
3
3
1
1
1
2
9
9
9
9
2
1
1
1
5
3
2
10
10
10
7
7
7
15
15
15
3
5
5
2
2
3
9
9
9
3
1
1
1
2
2
2
7
5
3
10
10
10
15
15
15
5
7
7
3
3
5
9
9
9
4
1
1
2
2
3
3
7
5
15
10
10
15
5
7
9
9
5
1
2
3
5
7
15
10
9
6
1
1
2
2
3
3
5
5
7
7
10
9
15
15
9
10
7
1
2
3
5
7
9
10
15
Valdemar W. Setzer – Algoritmos
4/3/17
31
5. Qual é o melhor algoritmo? (cont.)
Número total de comparações:
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
Valdemar W. Setzer – Algoritmos
4/3/17
32
5. Qual é o melhor algoritmo? (cont.)
3.2 MÉTODO DA BOLHA (em cada varrida, compara-se e troca-se de 2 em 2)
1
2
3
4
5
6
5
5
5
5
5
5
5
5
5
3
3
3
3
3
3
3
3
2
2
1
10
10
3
3
3
3
3
3
3
5
5
5
5
5
5
2
2
3
1
2
Valdemar W. Setzer – Algoritmos
3
3
10
7
7
7
7
7
7
7
7
7
7
2
2
5
1
1
3
3
7
7
7
10
10
10
10
10
10
10
2
2
2
7
1
1
5
5
5
5
15
15
15
15
15
2
2
2
2
2
10
1
1
1
7
7
7
7
7
7
2
2
2
2
2
15
1
1
1
1
1
10
9
9
9
9
9
9
9
9
1
1
1
1
1
1
15
9
9
9
9
9
10
10
10
10
10
10
10
10
9
9
9
9
9
9
9
15
15
15
15
15
15
15
15
15
15
15
15
15
mostra
só trocas
4/3/17
33
5. Qual é o melhor algoritmo? (cont.)
Método da bolha
Melhor caso: sequência já ordenada
(critério: não houve nenhuma troca)
Ex:
1
2
3
5
7
9
10
15
2
1
n – 1 comparações
Pior caso: ordem contrária
Ex:
15
10
9
7
5
3
n (n – 1) / 2
Valdemar W. Setzer – Algoritmos
4/3/17
34
5. Qual é o melhor algoritmo? (cont.)
3.3 MÉTODO DA INSERÇÃO (compara-se de 2 em 2; se houver troca, compara
para trás)
1
2
3
4
5
5
5
3
3
3
3
3
3
2
2
2
2
2
2
1
1
1
10
3
5
5
5
5
5
2
3
3
3
3
3
1
2
2
2
Valdemar W. Setzer – Algoritmos
3
10
10
7
7
7
2
5
5
5
5
5
1
3
3
3
3
7
7
7
10
10
2
7
7
7
7
7
1
5
5
5
5
5
15
15
15
15
2
10
10
10
10
10
1
7
7
7
7
7
7
2
2
2
2
15
15
15
15
15
1
10
10
10
10
10
10
9
1
1
1
1
1
1
1
1
1
15
15
15
15
15
15
9
10
9
9
9
9
9
9
9
9
9
9
9
9
9
9
9
15
15
4/3/17
35
5. Qual é o melhor algoritmo? (cont.)
Método da inserção
Melhor caso: sequência já ordenada
Ex:
1
2
3
5
7
9
10
15
2
1
n – 1 comparações
Pior caso: ordem contrária
Ex:
15
10
9
n (n – 1) / 2
Valdemar W. Setzer – Algoritmos
7
5
3
4/3/17
36
5. Qual é o melhor algoritmo? (cont.)
Portanto, no pior caso todos dão
n (n – 1) / 2 = (n2 – n ) / 2
Para n muito grande (caso assintótico)
n2 >> n
Despreza-se o n e tem-se praticamente
n2
comparações
Notação O:
O(n2) “ordem de n2”
Valdemar W. Setzer – Algoritmos
4/3/17
37
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á
Valdemar W. Setzer – Algoritmos
4/3/17
38
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
Valdemar W. Setzer – Algoritmos
4/3/17
39
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
Valdemar W. Setzer – Algoritmos
4/3/17
40
6. É possível melhorar? (cont.)
Valdemar W. Setzer – Algoritmos
4/3/17
41
6. É possível melhorar? (cont.)
Valdemar W. Setzer – Algoritmos
4/3/17
42
6. É possível melhorar? (cont.)
Valdemar W. Setzer – Algoritmos
4/3/17
43
6. É possível melhorar? (cont.)
Valdemar W. Setzer – Algoritmos
4/3/17
44
6. É possível melhorar? (cont.)
Estrutura de dados em forma de
ÁRVORE BINÁRIA
Níveis
0
1
2
3
Raiz
Nós
Folhas
Altura
Valdemar W. Setzer – Algoritmos
4/3/17
45
6. É possível melhorar? (cont.)
Exemplo de intercalação de 2 grupos de 4 dados
1
2
10 15
3
20
4
25
5
6
11
7
12 16
8
27
área
auxiliar
10
11
12
15
16
20
25
27
sai
fica
(São necessários 2 ponteiros movendo-se cada um
sequencialmente, e uma área auxiliar)
Valdemar W. Setzer – Algoritmos
4/3/17
46
6. É possível melhorar? (cont.)
Notar que as regras R1 a R6 podem ser seguidas,
se as operações são feitas sequencialmente.
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
(no caso, uma é retirada e colocada em uma área
auxiliar)
R6: Podem-se anotar números de compartimentos
Valdemar W. Setzer – Algoritmos
4/3/17
47
6. É possível melhorar? (cont.)
Número de comparações:
Seja um maço inicial com n cartões,
n = 2m, m int.
Cada pessoa P, em um nível v, recebe e intercala
cartões de seus dois ajudantes do nível v+1
Ex. com dois grupos de 4 cartões, total 8 cartões
1. Compara 2 de 8 e tira o menor, sobram 7
2. Compara 2 de 7 e tira o menor, sobram 6
3. Compara 2 de 6 e tira o menor, sobram 5
4. Compara 2 de 5 e tira o menor, sobram 4
5. Compara 2 de 4 e tira o menor, sobram 3
6. Compara 2 de 3 e tira o menor, sobram 2
7. Compara 2 de 2 e tira o menor, sobra 1, o maior
Portanto, houve 7 comparações
Assim,
para um total de n cartões nos dois grupos,
haverá n-1 comparações no pior caso
Valdemar W. Setzer – Algoritmos
4/3/17
48
6. É possível melhorar? (cont.)
Número de comparações (cont.):
Ex.
de melhor caso: P no nível 1, intercalando 2
maços com os números
1, 2, 3, 4 e 5, 6, 7, 8
dá 4 comparações (em lugar de 7, o pior caso)
Portanto,
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, no pior caso
n – (número de pessoas em v)
Quantas pessoas existem e quantas
comparações são feitas em cada nível, no pior
caso?
Valdemar W. Setzer – Algoritmos
4/3/17
49
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
número de folhas
Valdemar W. Setzer – Algoritmos
4/3/17
50
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)
No. de nós de uma árvore com n/2 folhas
Precisamos calcular o número de nós de
uma árvore binária com n/2 folhas
Valdemar W. Setzer – Algoritmos
4/3/17
51
6. É possível melhorar? (cont.)
Número total de nós de uma árvore binária
Nível
No.
nós
Total
de nós
0
1
1
1
2
3
2
4
7
3
8
15
...
...
...
m-1
2m-1
2x2m-1-1
m
2m
2x2m-1
número de folhas
Com n/2 folhas, a árvore tem 2(n/2) – 1 = n – 1
nós
Valdemar W. Setzer – Algoritmos
4/3/17
52
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
Valdemar W. Setzer – Algoritmos
4/3/17
53
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
número de folhas
Portanto, n = 2m, então log2 n = log2 2m, m = log2 n
Valdemar W. Setzer – Algoritmos
4/3/17
54
6. É possível melhorar? (cont.)
Como
C = mn – n + 1 e m = log2 n
C = n log2n – n + 1
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)?
Valdemar W. Setzer – Algoritmos
4/3/17
55
6. É possível melhorar? (cont.)
n(n-1)/2
n
Valdemar W. Setzer – Algoritmos
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
4/3/17
56
6. É possível melhorar? (cont.)
Numa lista telefônica
Assinantes
131.072
1.048.576
Quadrático
8.589.869.056
549.755.813.888
Intercal. binária
2.097.153
19.922.945
Computador que faz 1.000.000 de
comparações por segundo: só nas
comparações,
6 dias
20 s
Valdemar W. Setzer – Algoritmos
4/3/17
57
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
Valdemar W. Setzer – Algoritmos
4/3/17
58
7. Algoritmo ótimo (cont.)
Ordenadora de cartões IBM-082(1949, 650 cpm)
(Ordenação física tipo sort-merge com base 10)
Valdemar W. Setzer – Algoritmos
4/3/17
59
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
Valdemar W. Setzer – Algoritmos
4/3/17
60
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.
Valdemar W. Setzer – Algoritmos
4/3/17
61
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
Valdemar W. Setzer – Algoritmos
4/3/17
62
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 eficientes
a comparação de algoritmos quanto à eficiência
a prova de que algum algoritmo é ótimo
a prova formal de que um algoritmo está correto
e muito mais!
Valdemar W. Setzer – Algoritmos
4/3/17
63
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!
É
resolver problemas por meio de algoritmos!!!
Valdemar W. Setzer – Algoritmos
4/3/17
64
FIM
Valdemar W. Setzer – Algoritmos
4/3/17
65