5cop096 – teoria da computação aula 7 – ordenação 5cop096 teoria da computação aula 7...

34
5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – [email protected] 1

Upload: internet

Post on 17-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 1

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

5COP096 Teoria da Computação

Aula 7Prof. Dr. Sylvio Barbon Junior

Page 2: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 2

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Sumário1) Ordenação

2) Ordenação Interna

3) Ordenação Externa

Page 3: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 3

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação- A ordenação é um dos bons exemplos da resolução de problemas

utilizando computador.- A maioria dos métodos de ordenação é baseada em:

- Distribuição (Ordenação Digital, Radixsort ou Bucketsort): Não existe comparação entre chaves, sendo o principal problema associado a memória, uma vez que cada grupo exige memória extra.Exemplos: ordenar Cartas de Baralho, classificar cartões perfurados, distribuição de correspondências por bairro/rua etc.O custo para ordenar elementos é da ordem de O(n), pois cada elemento é manipulado algumas vezes.

- Comparação (maioria dos métodos): Utilizam normalmente uma chave e serão estudados detalhadamente.

Page 4: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 4

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

OrdenaçãoExemplo de Ordenação por Distribuição

Page 5: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 5

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

OrdenaçãoExemplo de Ordenação por Distribuição

Page 6: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 6

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação- Um método de ordenação é dito estável, se a ordem relativa dos itens com chaves

iguais mantém-se inalterada pelo processo de ordenação.Exemplo: Se uma lista alfabética de nomes de funcionários de uma empresa é ordenada pelo campo salário, então um método estável produz uma lista em que os funcionários com mesmo salário aparecem em ordem alfabética

Page 7: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 7

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação- Os métodos de ordenação são classificados em dois grupos:

- Ordenação Interna:Quando o arquivo a ser ordenado cabe todo na memória principal.Exemplo: Quando o número de registros a ser ordenado é pequeno o bastante para caber em um array de Java.

- Ordenação Externa:Quando o arquivo não cabe na memória principal, e por isso deve ser armazenado em outros dispositivos, por exemplos fitas ou discos.

- A principal diferença seria a necessidade de lidar com os registros de forma sequencial para o caso de Ordenação Externa.

Page 8: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 8

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna- Trata principalmente o tempo gasto comparando as chaves e

movimentações de itens avaliados, assim vamos utilizar a seguinte notação:

C(n) – Comparações entre as chaves;M(n) – Movimentações entre os itens;n – Quantidade de itens.

- Algoritmos is situ (in place) são métodos que utilizam permutações entre os itens do próprio vetor, não precisando de memória extra.

Page 9: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 9

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna

OrdenaçãoDistribuição

Comparação

ExternaInterna

Método Simples Método Eficientes

Page 10: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 10

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaOs métodos internos são classificados em:

- Métodos Simples, são adequados para pequenos arquivos e requerem O(n²) comparações, são programas pequenos, fáceis de entender com simplicidade nos seus princípios.

- Métodos Eficientes, são aqueles para arquivos maiores e requerem O(n log n) comparações, comparações complexas como a implementação.

Considerando Ordenação Interna, serão estudados:1) Ordenação por Seleção (Selectionsort);2) Ordenação por Inserção (Insertionsort);3) Shellsort;4) Quicksort;5) Heapsort;

Page 11: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

Sylvio Barbon Jr – [email protected] 11

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaSelectionsort (Ordenação por Seleção)

- É um dos métodos mais simples;

C(n) = n²/2 – n/2M(n) = 3(n-1)

Aspectos negativos:- O fato do arquivo estar ordenado não

auxilia em nada;

- O algoritmo não é estável, pois ele nem sempre mantém os registros com chaves iguais na mesma posição relativa.

Page 12: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

12

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna

Sylvio Barbon Jr – [email protected]

Insertionsort (Ordenação por Inserção)

- A partir de i=2, o i-ésimo item da sequência é transferido para a sequência de destino, sendo inserido no local correto. Os itens maiores são movidos para a direita e inserido o item na posição vazia deixada.

- O método é estável.- Registro sentinela marca o registro avaliado.

C(n) = n-1 Melhor Caso

Pior Caso C(n) = n²/2+n/2-1

M(n) = 3(n-1)

M(n) = n²/2+5n/2-3

Caso Médio C(n) = n²/4+3n/4-1 M(n) = n²/4+11n/4-3

-O número mínimo ocorre quando os itens já estão organizados;-O número máximo de comparações ocorrem quando o arquivo está na ordem inversa.

Page 13: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

13

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna

Sylvio Barbon Jr – [email protected]

Shellsort - Foi proposto em 1959 como uma extensão do algoritmo de ordenação

por inserção, contornando as trocas separados por h posições.- O método não é estável.- A sua análise contém problemas matemáticos complexos, e uma analise

formalizada ainda não foi realizada.

- O tempo de execução é sensível à ordem inicial.

C(n) = O(n(ln n)²)

Page 14: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

14

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna

Sylvio Barbon Jr – [email protected]

Shellsort vs Insertionsort

Insertionsort: Eficiente quando os itens estão quase ordenados

Shellsort: Opção com separações h

Page 15: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

15

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna

Sylvio Barbon Jr – [email protected]

Quicksort

- Foi publicado em 1962 e é o algoritmo mais rápido e mais utilizado para ordenação.

- Utiliza um pivô para particionamento e comparação.- Sua ineficiência aparece quando o arquivo já está ordenado e o pivô

escolhido não é adequado. Porém isso pode ser evitado com pequenos ajustes no código.

- Os aspectos negativos são: a versão recursiva tem pior caso quadrático de operações, a implementação é muito delicada e o método não é estável.

Page 16: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

16

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Interna

Sylvio Barbon Jr – [email protected]

Quicksort

C(n) = O(n log n) Melhor Caso

Pior Caso C(n) = O(n²)

Caso Médio C(n) = O(n log n)

Para evitar o pior caso do algoritmo, recomenda-se utilizar como o item divisor com valor mais próximo da mediana de três valores quaisquer do arquivo.

Page 17: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

17

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaHeapsort

- É semelhante ao Selectionsort, onde são feitas trocas com o primeiro item da lista.

- O custo n para encontrar o menor item da fila pode ser reduzido utilizando estruturas de dados como a fila por prioridade.

- Não é estável.- Não é recomendado para arquivos com poucos registros, devido ao

tempo para construir o heap.- Em média o Quicksort é duas vezes mais rápido do que o Heapsort.- Heapsort é melhor que o Shellsort para grandes arquivos.

C(n) = O(n log n) Melhor Caso

Pior Caso C(n) = O(n log n)

Caso Médio C(n) = O(n log n)

Page 18: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

18

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaHeapsort

- É semelhante ao Selectionsort, onde são feitas trocas com o primeiro item da lista.

- O custo n para encontrar o menor item da fila pode ser reduzido utilizando estruturas de dados como a fila por prioridade.

- Não é estável.- Não é recomendado para arquivos com poucos registros, devido ao

tempo para construir o heap.- Em média o Quicksort é duas vezes mais rápido do que o Heapsort.- Heapsort é melhor que o Shellsort para grandes arquivos.

C(n) = O(n log n) Melhor Caso

Pior Caso C(n) = O(n log n)

Caso Médio C(n) = O(n log n)

Page 19: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

19

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaHeapsort

Page 20: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

20

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaComparação entre os métodos

Métodos SimplesO (n2)

Selectiosort Insertionsort

Métodos EficientesO( n log n) Shellsort Quicksort Heapsort

Analiticamente sem formalização, mas

considerado eficiente

Mais rápido

São constantes para todos os tamanhos (heapsort, maislento)

Shellsort é mais rápido que o Heapsort para listas pequenas.

É melhor em diversos tamanhos, comparando os

métodos simplesPior caso para elementos decrescentes

e mais rápido para elementos ordenados (O(n))

Mais simples

Page 21: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

21

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação InternaComparação entre os métodos e sua ordem inicial

Métodos SimplesO (n2)

Selectiosort Insertionsort

Métodos EficientesO( n log n) Shellsort Quicksort Heapsort

Sensível à ordenação, executa mais rápido para

elementos ordenados

Sensível à ordenação, mais rápido quando ordenado.

Não é sensível a ordenação, porém 10% mais lento quando

estiver ordenado

Método interessante para arquivos com menos de 20

elementosA vantagem é o número de

movimentos, assim adequado para arquivos grandes.

Page 22: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

22

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa-A ordenação externa envolve arquivos compostos por um número de registros que é maior do que a memória interna do computador pode armazenar.

- Restrição: O registro pode ser acessado somente em um dado momento.

- Diferenças com Ordenação Interna:1) O custo para acessar o dado é maior do que o custo para processá-lo.

2) Restrições Severas de acesso aos dados, por exemplo, os dados em uma fita magnética só podem ser acessados sequencialmente. Em um disco magnético o acesso direto é mais custoso do que o acesso sequêncial.

3) Alta dependência da tecnologia.

Page 23: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

23

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa- A grande ênfase deve ser na minimização do número de vezes que cada item é transferido entre as memórias.

- A maioria dos métodos de Ordenação Externa utilizam a estratégia de:1) É realizada uma varredura na memória externa, “quebrando-a” em

blocos compatíveis com a memória interna.2) Os blocos são intercalados, fazendo várias leituras sobre o arquivo,

criando blocos ordenados cada vez maiores.

- Os métodos que serão estudados são:- Intercalação Balanceada de Vários Caminhos;- Seleção por Substituição;- Intercalação Polifásica;- Quicksort Externo;

Page 24: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

24

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa1- Intercalação Balanceada de Vários Caminhos

-Considerando o seguinte arquivo com 22 registros:

- Considerando que a memória interna tem apenas espaço para 3 registros.

- Os registros são escritos nas fitas 1, 2 e 3.

I N T E R C A L A C A O B A L A N C E A D A

I N T E R C A L A C A O B A L A N C E A D A

I N T

C E R

A A L

Fita 1

Fita 2

Fita 3

A C O

A C N

A

A D E

A B L

Page 25: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

25

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa1- Intercalação Balanceada de Vários Caminhos

- O processo é repetido até formar novos conjuntos inseridos em novas fitas.

I N T C E R A A L

Fita 1 Fita 2 Fita 3

Memória Interna

I C A

Fita 4

A

Page 26: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

26

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa1- Intercalação Balanceada de Vários Caminhos

- Os registros serão intercalados, o primeiro registro de cada fita é transferido para M.I. e o menor é retirado da fita, dando lugar ao próximo elemento da mesma.

Fita 4 A A C E I L N R T

I N T

C E R

A A L

Fita 1

Fita 2

Fita 3

A C O

A C N

A

A D E

A B L

Fita 5

Fita 6

A A A B C C L N O

A A D E

Memória Interna

A A A

Fita 7

Inte

rcal

ação

1In

terc

alaç

ão 2

Page 27: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

27

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa1- Intercalação Balanceada de Vários Caminhos

- Considere um arquivo contendo n registros, f fitas e uma memória interna de m palavras. Dessa forma é possível encontrar a Função de Complexidade P, sendo P(n) o número de intercalações.

P(n) = logf n/m

-No exemplo anterior P(n) = log3 22/3 = 2

- Um arquivo com 1 bilhão de palavras e com uma memória de 2 milhões de palavras, utilizando quatro fita, obtemos P(n) = 5.

Page 28: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

28

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa2- Seleção por Substituição

- É uma implementação semelhante à intercalação balanceada com o acréscimo de uma abordagem de filas por prioridade, implementadas por um heap.

- Exemplo:

R A P A Z E 1 2 3

A A R P

Z A R P

P R Z

R Z

Z

A A R P Z

Page 29: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

29

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa3- Intercalação Polifásica

- Um dos problemas com a Intercalação Balanceada pode ser a necessidade de utilizar um grande número de fitas para garantir a sua operação.

- O método Intercalação Polifásica elimina a necessidade de cópias adicionais pois distribui os blocos ordenados por meio de uma seleção desigual.

-Exemplo. Passo 1

I N T R E C A L A C A O B L A A N C E A D A

I N R T A C E L A A B C L OFita 1

Fita 2 A A C E N A A D

Page 30: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

30

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa3- Intercalação Polifásica

Passo 2 - Intercala-se para a Fita 3, deixando a Fita 2 livre.

Passo 3 - Intercala-se a Fita 1 e Fita 3 na Fita 2, deixando a Fita 1 livre.

A A B C L OFita 1

Fita 2

A A C E I N N R T A A A C D E LFita 3

Fita 1

Fita 2 A A A A B C C E I L N N O R T

A A A C D E LFita 3

Page 31: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

31

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa3- Intercalação Polifásica

Passo 4 - Intercala-se para a Fita 3, deixando a Fita 2 livre.

A intercalação polifásica é ligeiramente melhor do que a intercalação balanceada para valores pequenos de fitas (f), para f > 8 a intercalação balanceada pode ser mais rápida.

Fita 1

Fita 2 Fita 3

A A A A A A A B C C C D E E I L L N N O R T

Page 32: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

32

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Ordenação Externa4- Quicksort Externo

-Proposto em 1980, utiliza o paradigma divisão e conquista, sendo a versão in situ para ordenação de registros.

-O algoritmo utiliza memória interna em O(log n), não sendo necessário memória externa (além da que armazena os registros).

-A complexidade de melhor caso é O(n/b), sendo b é o tamanho do bloco de leitura e gravação sistema operacional.

-A complexidade de pior caso é O(n²/tamArea), sendo tamArea o número de registros que podem ser armazenados na memória interna.

-A complexidade de médio caso é O(n/b log(n/tamArea)), segundo o trabalho de Monard(1980) este é o caso com maior probabilidade de ocorrer.

Page 33: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

33

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

Exercícios1 – Monte uma tabela com as características de melhor caso, pior caso, caso médio, sensibilidade de ordenação, influência de n e estabilidade para os algoritmos: Selectionsort, Insertionsort, Shellsort, Heapsort, Quicksort, Intercalação Balanceada, Seleção por Substituição, Intercalação Polifásica e Quicksort Externo.

2- Entregue um resumo do artigo “Quicksort Externo”, de Fabiano Cupertino Botelho e Ligiane Alves de Souza.

Page 34: 5COP096 – Teoria da Computação Aula 7 – Ordenação 5COP096 Teoria da Computação Aula 7 Prof. Dr. Sylvio Barbon Junior Sylvio Barbon Jr – barbon@uel.br1

5COP096 – Teoria da ComputaçãoAula 7 – Ordenação

ReferênciasZiviani, Nivio. Projeto de algoritmos: com implementações em Java e C. Thomson Learning, 2007.

Leiserson, Charles E., Ronald L. Rivest, and Clifford Stein. Introduction to algorithms. Ed. Thomas H. Cormen. The MIT press, 2001.