• Nenhum resultado encontrado

Análise de Algoritmos

N/A
N/A
Protected

Academic year: 2022

Share "Análise de Algoritmos"

Copied!
52
0
0

Texto

(1)

Análise de Algoritmos

Zé Augusto

Adaptado de slides de José Coelho e Paulo Feofiloff

Abril de 2008

(2)

Ordenação em tempo linear

CLRS 8.2–8.3

(3)

Ordenação por contagem

Recebe vetoresA[1. .n]eB[1. .n]e devolve no vetorB[1. .n]os elementos deA[1. .n]em ordem crescente.

CadaA[i]está em{0, . . . ,k}.

Entra: 1 2 3 4 5 6 7 8 9 10 A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

Sai: 1 2 3 4 5 6 7 8 9 10

B 0 0 0 2 2 3 3 3 5 5

(4)

Ordenação por contagem

Recebe vetoresA[1. .n]eB[1. .n]e devolve no vetorB[1. .n]os elementos deA[1. .n]em ordem crescente.

CadaA[i]está em{0, . . . ,k}.

Entra: 1 2 3 4 5 6 7 8 9 10 A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

Sai: 1 2 3 4 5 6 7 8 9 10

B 0 0 0 2 2 3 3 3 5 5

(5)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 2 3 4 5 6 7 8 9 10 A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

(6)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 2 3 4 5 6 7 8 9 10 A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C

(7)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 2 3 4 5 6 7 8 9 10 A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 0 0 0 0 0 0

(8)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 0 0 1 0 0 0

(9)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 0 0 1 0 0 1

(10)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 0 0 1 1 0 1

(11)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 1 0 1 1 0 1

(12)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 1 0 2 1 0 1

(13)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 1 0 2 2 0 1

(14)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 2 0 2 2 0 1

(15)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 2 0 2 2 0 2

(16)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 2 0 2 3 0 2

(17)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 0 2 3 0 2

(18)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 10

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 0 2 3 0 2

(19)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 10

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 3 2 3 0 2

(20)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 10

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 3 5 3 0 2

(21)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 10

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 3 5 8 0 2

(22)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 10

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 3 5 8 8 2

(23)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

1 10

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 3 5 8 8 10

(24)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B

0 1 2 3 4 5 C 3 3 5 8 8 10

(25)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10

B 0

0 1 2 3 4 5 C 2 3 5 8 8 10

(26)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j A 2 5 3 0 2 3 0 5 3 0

1 2 3 4 5 6 7 8 9 10

B 0 3

0 1 2 3 4 5 C 2 3 5 7 8 10

(27)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10

B 0 3 5

0 1 2 3 4 5 C 2 3 5 7 8 9

(28)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10

B 0 0 3 5

0 1 2 3 4 5 C 1 3 5 7 8 9

(29)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10

B 0 0 3 3 5

0 1 2 3 4 5 C 1 3 5 6 8 9

(30)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10

B 0 0 2 3 3 5

0 1 2 3 4 5 C 1 3 4 6 8 9

(31)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10

B 0 0 0 2 3 3 5

0 1 2 3 4 5 C 0 3 4 6 8 9

(32)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10

B 0 0 0 2 3 3 3 5

0 1 2 3 4 5 C 0 3 4 5 8 9

(33)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B 0 0 0 2 3 3 3 5 5

0 1 2 3 4 5 C 0 3 4 5 8 8

(34)

Ordenação por contagem

CadaA[i]está em{0, . . . ,5}.

j

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B 0 0 0 2 2 3 3 3 5 5

0 1 2 3 4 5 C 0 3 3 5 8 8

(35)

Ordenação por contagem

COUNTING-SORT(A,B,n,k) 1 parai←0atékfaça

2 C[i]←0

3 paraj←1aténfaça 4 C[A[j]]←C[A[j]] +1

BC[i]é o número dejs tais queA[j] =i 5 parai←1atékfaça

6 C[i]←C[i] +C[i−1]

BC[i]é o número dejs tais queA[j]≤i 7 paraj←ndecrescendo até1faça 8 B[C[A[j]]]←A[j]

9 C[A[j]]←C[A[j]]−1

Obs: são feitas0comparações entre elementos do vetor.

(36)

Consumo de tempo

linha consumo na linha 1−2 Θ(k)

3−4 Θ(n) 5−6 Θ(k) 7−9 Θ(n) Consumo total:Θ(n+k)

(37)

Conclusões

O consumo de tempo doCOUNTING-SORTéΘ(n+k).

I sek≤nentão consumo éΘ(n)

I sek≤10nentão consumo éΘ(n)

I sek=O(n)então consumo éΘ(n)

I sek≥n2então consumo éΘ(k)

I sek= Ω(n)então consumo éΘ(k)

(38)

Estabilidade

A propósito:COUNTING-SORTéestável:

na saída, chaves com mesmo valor estão namesma ordemque apareciam na entrada.

A 2 5 3 0 2 3 0 5 3 0 1 2 3 4 5 6 7 8 9 10 B 0 0 0 2 2 3 3 3 5 5

(39)

Ordenação digital (=radix sort)

Exemplo:

329 457 657 839 436 720 355

720 355 436 457 657 329 839

720 329 436 839 355 457 657

329 355 436 457 657 720 839 CadaA[j]têmddígitos decimais:

A[j] =ad10d−1+· · ·+a2101+a1100 Exemplo comd=3: 3·102+2·10+9

(40)

Ordenação digital (=radix sort)

Exemplo:

329 457 657 839 436 720 355

720 355 436 457 657 329 839

720 329 436 839 355 457 657

329 355 436 457 657 720 839 CadaA[j]têmddígitos decimais:

A[j] =ad10d−1+· · ·+a2101+a1100 Exemplo comd=3: 3·102+2·10+9

(41)

Ordenação digital (=radix sort)

Exemplo:

329 457 657 839 436 720 355

720 355 436 457 657 329 839

720 329 436 839 355 457 657

329 355 436 457 657 720 839 CadaA[j]têmddígitos decimais:

A[j] =ad10d−1+· · ·+a2101+a1100 Exemplo comd=3: 3·102+2·10+9

(42)

Ordenação digital (=radix sort)

Exemplo:

329 457 657 839 436 720 355

720 355 436 457 657 329 839

720 329 436 839 355 457 657

329 355 436 457 657 720 839

CadaA[j]têmddígitos decimais: A[j] =ad10d−1+· · ·+a2101+a1100 Exemplo comd=3: 3·102+2·10+9

(43)

Ordenação digital (=radix sort)

Exemplo:

329 457 657 839 436 720 355

720 355 436 457 657 329 839

720 329 436 839 355 457 657

329 355 436 457 657 720 839 CadaA[j]têmddígitos decimais:

A[j] =ad10d−1+· · ·+a2101+a1100 Exemplo comd=3: 3·102+2·10+9

(44)

Ordenação digital

RADIX-SORT(A,n,d) 1 parai←1atédfaça

2 B1atéde não o contrário!

3 ordeneA[1. .n]pelo dígitoi

Linha 3:

I faz ordenaçãoA[j1. .jn]deA[1. .n]tal que A[j1]i≤ · · · ≤A[jn]i;

I ordenação deve serestável; e

I useCOUNTING-SORT.

(45)

Exemplos

I dígitos decimais: Θ(dn)

I dígitos em0. .k: Θ(d(n+k)).

Exemplo comd=5ek=127:

a51284+a41283+a31282+a2128+a1 sendo0≤ai≤127

(46)

Conclusão

Dadosnnúmeros combbits e um inteiror≤b, RADIX-SORTordena esses números em tempo

Θ

b

r(n+2r)

.

Prova:Considere cada chave comd=db/redígitos comrbits cada.

UseCOUNTING-SORTcomk=2r−1.

Cada passada doCOUNTING-SORT:Θ(n+k) = Θ(n+2r). Tempo total:

Θ(d(n+2r)) = Θb

r(n+2r) .

(47)

Conclusão

Dadosnnúmeros combbits e um inteiror≤b, RADIX-SORTordena esses números em tempo

Θ

b

r(n+2r)

.

Prova:Considere cada chave comd=db/redígitos comrbits cada.

UseCOUNTING-SORTcomk=2r−1.

Cada passada doCOUNTING-SORT:Θ(n+k) = Θ(n+2r). Tempo total:

Θ(d(n+2r)) = Θb

r(n+2r) .

(48)

Conclusão

Dadosnnúmeros combbits e um inteiror≤b, RADIX-SORTordena esses números em tempo

Θ

b

r(n+2r)

.

Prova:Considere cada chave comd=db/redígitos comrbits cada.

UseCOUNTING-SORTcomk=2r−1.

Cada passada doCOUNTING-SORT:Θ(n+k) = Θ(n+2r).

Tempo total:

Θ(d(n+2r)) = Θb

r(n+2r) .

(49)

Conclusão

Dadosnnúmeros combbits e um inteiror≤b, RADIX-SORTordena esses números em tempo

Θ

b

r(n+2r)

.

Prova:Considere cada chave comd=db/redígitos comrbits cada.

UseCOUNTING-SORTcomk=2r−1.

Cada passada doCOUNTING-SORT:Θ(n+k) = Θ(n+2r).

Tempo total:

Θ(d(n+2r)) = Θb

r(n+2r) .

(50)

Bucket sort

Bucket sort: algoritmo de ordenação em tempo esperado linear.

Descrito emCRLS 8.4.

(51)

Exercícios

Exercício 1.A

O seguinte algoritmo promete rearranjar o vetorA[1. .n]em ordem crescente supondo que cadaA[i]está em{0, . . . ,k}. O algoritmo está correto?

C-SORT(A,n,k)

parai←0atékfaça C[i]←0

paraj←1aténfaça C[A[j]]←C[A[j]] +1 j←1

parai←0atékfaça

enquantoC[i]>0faça A[j]←i

j←j+1 C[i]←C[i]−1

Qual o consumo de tempo do algoritmo?

(52)

Mais exercícios

Exercício 1.B

O seguinte algoritmo promete rearranjar o vetorA[1. .n]em ordem crescente supondo que cadaA[j]está em{1, . . . ,k}. O algoritmo está correto? Estime, em notaçãoO, o consumo de tempo do algoritmo.

VITO-SORT(A,n,k) 1 i←1

2 paraa←1aték−1faça 3 paraj←iaténfaça 4 seA[j] =a

5 entãoA[j]↔A[i] B troca

6 i←i+1

Exercício 1.C

Suponha que os components do vetorA[1. .n]estão todos em{0,1}.

Prove quen−1comparações são suficientes para rearranjar o vetor em ordem crescente.

Exercício 1.D

Qual a principal invariante do algoritmoRADIX-SORT?

Referências

Documentos relacionados

Dentro do processo utilizado para a gestão de projetos, existe alguma diferenciação entre a gestão de equipes locais e virtuais (quanto à gestão de recursos humanos,

Assim sendo, o objetivo geral deste trabalho é propor um modelo de predição precoce que mapeie o desempenho dos alunos em cursos de nível superior, na modalidade de ensino a

Este trabalho reflete o estudo de dez currículos de especialização em Gestão de Serviços de TI, sendo cinco de outros países e cinco nacionais, partindo da hipótese

• Dado que em um vetor possui elementos inteiros menores ou iguais a k, escreva um algoritmo de seleção de tempo linear no pior caso. www.nakamura.eti.br/eduardo Análise de

Slides adaptados dos slides do livro texto (Ziviani) e dos slides de aula dos professores Davi Menotti (DECOM/UFOP) e Antônio Alfredo Ferreira Loureiro (DCC/UFMG)...

.n ] pelo i-ésimo campo dos registros em A por meio de um algoritmo estável.... .n ] pelo i-ésimo campo dos registros em A por meio de um

I Inserção direta para vetores pequenos Quicksort.. I Elementos repetidos: partição ternária I Mediana

Alternância entre dois vetores Teste se já ordenado.. Dicas