CES-11 Algoritmos e g m Estruturas de Dados

Propaganda
CES-11
Algoritmos
g
m e
Estruturas de Dados
Carlos Alberto Alonso Sanches
Juliana de Melo Bezerra
CES--11
CES
„
„
Alguns algoritmos de ordenação
„
Método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Lower bound para a ordenação
CES--11
CES
„
„
Alguns algoritmos de ordenação
„
Método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Lower bound para a ordenação
Alguns
g
algoritmos
g
m de ordenação
ç
„
„
„
A ordenação é o problema mais clássico da
computação.
Inicialmente, veremos algumas das suas
resoluções mais simples:
„
Ordenação pelo método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Consideraremos sempre a ordenação de um vetor
v de índices [1
[1..n].
n]
Importante!!
CES--11
CES
„
„
Alguns algoritmos de ordenação
„
Método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Lower bound para a ordenação
Método da bolha (BubbleSort)
„
É um dos algoritmos mais simples e conhecidos.
conhecidos
„
Princípio:
„
„
„
„
Os elementos vizinhos são comparados e, caso estejam
fora de ordem, são trocados.
A propagação dessas comparações permite isolar o maior
(ou o menor) elemento do vetor.
Repetindo-se esse processo com as demais posições do
vetor, é possível ordená-lo completamente.
Este método recebe este nome porque os elementos vão
um a um até a sua posição final, de modo semelhante a
b lh que sobem
bolhas
b
em um tubo
t b com água.
á
Exemplo
p para
p
n=8
No esquema abaixo,
abaixo a bolha “desce”
desce
(como se o tubo estivesse de ponta-cabeça)
1
44
44
12
12
12
12
6
6
2
55
12
42
42
18
6
12
12
3
12
42
44
18
6
18
18
18
4
42
55
18
6
42
42
42
42
5
94
18
6
44
44
44
44
44
18
6
55
55
55
55
55
55
7
6
67
67
67
67
67
67
67
8
67
94
94
94
94
94
94
94
6
Algoritmo
g
BubbleSort(){
for (i=1; i<n; i++)
for (j=1; j<=n-i; j++)
if (v[j] > v[j+1]) {
x = v[j];
[j]
v[j] = v[j+1];
v[j+1] = x;
}
}
„
„
„
É lento, pois só faz comparações entre posições adjacentes.
Pode ser melhorado com testes intermediários para verificar
se o vetor já está ordenado.
M
Mesmo
assim,
i gasta tempo O(n
O( 2) no pior
i caso.
CES--11
CES
„
„
Alguns algoritmos de ordenação
„
Método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Lower bound para a ordenação
Ordenação
ç por
p seleção
ç (SelectionSort)
„
Procedimento:
P
dim t :
„
„
Selecione o menor elemento do vetor e troque-o
q
com
o que está na posição 1.
D c n
Desconsiderando
ran a pr
primeira
m ra p
posição
çã do vetor,
t r, repita
r p ta
essa operação com as restantes.
Exemplo
mp com
m n=6
Vetor inicial:
1
2
3
4
5
6
55
62
21
35
48
13
13
62
21
35
48
55
13
21
62
35
48
55
13
21
35
62
48
55
13
21
35
48
62
55
13
21
35
48
55
62
Algoritmo
g
m
SelectionSort() {
for (i=1; i<n; i++) {
min = i;
for (j=i+1; j<=n; j++)
if (v[j] < v[min])
min = j;
x = v[min];
v[min] = v[i];
v[i] = x;
}
}
Sempre gasta tempo O(n2)
CES--11
CES
„
„
Alguns algoritmos de ordenação
„
Método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Lower bound para a ordenação
Ordenação por
p inserção (InsertionSort)
„
„
Semelhante
lh
ao método
é d de
d ordenação
d
das
d cartas de
d
um baralho.
Procedimento:
„
„
„
Verifica-se se o valor da posição 2 do vetor poderia ser
colocado na posição 1.
Repete-se este processo para as posições subsequentes,
verificando-se o local adequado da inserção.
A inserção de um elemento na sua nova posição
exige a movimentação de vários outros.
outros
Exemplo
mp com
m n=6
34
8
64
51
32
21
8
64
51
32
21
Passo 1
34
8
elemento que
pode ser inserido
34
64
51
32
21
64
51
32
21
mover
8
inserção
34
Exemplo
mp com
m n=6
Passo 2
8
34
64
51
32
21
64
Item que
pode ser inserido
Nã ocorre inserção,
Não
i
ã pois
i esse elemento
l
já está
á no seu lugar
l
Exemplo
mp com
m n=6
Passo 3
8
34
64
51
32
21
51
Item que
pode ser inserido
8
34
64
32
21
64
32
21
mover
8
34
51
inserção
Exemplo
mp com
m n=6
Passo
Pass 4
8
51
34
64
32
21
32
Item que
pode
d ser iinserido
id
8
51
34
64
21
51
64
21
51
64
21
51
64
21
mover
8
34
mover
8
34
mover
8
32
inserção
34
Exemplo
mp com
m n=6
Passo 5
8
8
32
32
34
34
51
64
21
51
64
21
Item que
pode ser inserido
mover
8
32
34
51
64
mover
8
34
32
51
64
mover
8
32
34
51
64
32
34
51
64
mover
8
21
Final
Algoritmo
g
m
InsertionSort() {
for (i=2;
(i 2; i<=n;
i< n; i++) {
x = v[i];
for (j=i; j>1 && x<v[j-1]; j--)
v[j] = v[j-1];
v[j]
[j] = x;
}
}
Gasta tempo O(n2) no pior caso.
CES--11
CES
„
„
Alguns algoritmos de ordenação
„
Método da bolha (BubbleSort)
„
Ordenação por seleção (SelectionSort)
„
Ordenação por inserção (InsertionSort)
Lower bound para a ordenação
Lower bound para
p
a ordenação
ç
„
„
„
Até
é agora, apresentamos algoritmos
l
que ordenam
d
n
números em tempo O(n2). Por enquanto, esse é o
nosso melhor
lh resultado
l d prático
á
(upper bound
b d ) para
o problema da ordenação baseado em comparações.
Seria possível calcular um lower bound para esse
problema?
Em outras p
palavras, desejamos
j
encontrar um limite
inferior teórico para esse problema, isto é, a mínima
complexidade
p
de tempo
p de q
quaisquer
q
de suas
resoluções algorítmicas.
Árvore de comparações
mp
ç
„
„
„
Qualquer
Q l
algoritmo
l
itm de
d ordenação
d
ã baseado
b s d em
m
comparações pode ser representado em uma árvore
biná i
binária.
Na raiz fica a primeira comparação realizada entre
dois elementos do vetor; nos filhos, as comparações
subsequentes. Deste modo, as folhas representam
as possíveis soluções do problema.
A altura
l
h dessa
d
á
árvore
é o número
ú
máximo
á
d
de
comparações que o algoritmo realiza, ou seja, o seu
tempo de
d pior
i caso.
Exemplo:
Exemplo
mp : com
m 3 valores distintos
v[1]:v[2]
>
<
v[2]:v[3]
v[
] v[3]
v[2]:v[3]
<
<
>
v[1] < v[2] < v[3]
v[3] < v[2] < v[1]
v[1]:v[3]
[1] [3]
<
v[1] < v[3] < v[2]
>
v[1]:v[3]
[1] [3]
>
v[3] < v[1] < v[2]
<
v[2] < v[1] < v[3]
>
v[2] < v[3] < v[1]
Como estamos ordenando 3 elementos, há 3! possíveis resultados
Generalização
ç
„
„
„
„
Na ordenação de n elementos d
distintos,
st ntos, há n!
possíveis resultados, que correspondem às
permutações desses elementos.
p
Portanto, qualquer árvore binária de comparações
terá no mínimo n! folhas.
folhas
A árvore mínima de comparações tem exatamente
n!! folhas.
f lh
Supondo
S
d que a altura
lt
dessa
d
árvore
á
seja
j
h, então LB(n) = h, onde LB(n) é o lower bound de
tempo para a ordenação de n elementos.
elementos
Sabemos q
que n! ≤ 2h, ou seja,
j h ≥ lg
g n!
Logo, LB(n) ≥ lg n!
Cálculo do lower bound
„
Pela aproximação de Stirling: n! ≈ (2πn)1/2nne-n
„
Portanto:
„
„
„
lg n! ≈ lg (2π)1/2 + lg n1/2 + lg nn + lg e-n
„
l n! ≈ O(1) + O(log
lg
O(l n) + O(n.log
O(n l n) - O(n)
Como LB(n)
( ) ≥ lg
g n!, então LB(n)
( ) = Ω(n.log
(
g n))
Se encontrarmos um algoritmo que, apenas com
c mp çõ s e trocas
comparações
t c s, resolva
s l a ordenação
d n çã em
m
tempo O(n.log n), ele será ótimo e esse problema
estará computacionalmente resolvido.
resolvido
Download