You are on page 1of 105

UNIVERSIDADE DO ESTADO DO AMAZONAS

ESCOLA SUPERIOR DE TECNOLOGIA
NÚCLEO DE COMPUTAÇÃO - NUCOMP

Projeto e Análise de Algoritmos
Força bruta - Busca exaustiva
Prof. Flávio José Mendes Coelho
fcoelho@uea.edu.br

Nesta aula...
Busca exaustiva
Busca em profundida em grafos (DFS)
Busca em largura em grafos (BFS)

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

2

Busca exaustiva

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

3

tais elementos são objetos combinatórios tais como permutações. Em geral. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. combinações e subconjuntos de um conjunto. Flávio José M.Busca exaustiva Muitos problemas importantes pedem a descoberta de um elemento com uma propriedade especial dentro de um espaço de busca que cresce exponencialmente ou pior com o tamanho da instância. Coelho 4 .

Busca exaustiva (enumeração explícita) é a aplicação da abordagem de força bruta para problemas de otimização combinatória. Definição. Coelho 5 . UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.Busca exaustiva Muitos deste problemas são problemas de otimização combinatória: descobrir um elemento que maximiza ou minimiza alguma característica desejável. Flávio José M.

Como E cresce exponencialmente com o tamanho de P. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 6 . 2.  Construa todos os objetos combinatórios do espaço de busca E para a instância I do problema P. Flávio José M.Busca exaustiva A estratégia de busca exaustiva é simples: 1.  Escolha o elemento ótimo de E para I. empregar esta estratégia para instâncias não moderadas de P é computacionalmente inviável.

Flávio José M. Coelho 7 .Busca exaustiva Alguns problemas importantes de otimização combinatória: •  PCV – Problema do Caixeiro Viajante (Traveling Salesman Problema – TSP) •  Problema da Mochila (Knapsack Problem) •  Problema da alocação (Assignment Problem) UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Encontrar o circuito Hamiltoniano mais curto em um grafo conectado e ponderado. Definição alternativa. encontrar o tour mais curto que passe por todas as cidades exatamente uma vez antes de retornar a cidade de origem. Flávio José M. Coelho 8 . Dadas n cidades com distâncias conhecidas entre cada par de cidades. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.PCV Definição.

PCV 2 b a 5 8 4 3 c 7 d UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 9 .

Coelho 10 . Flávio José M.  Encontre neste conjunto uma permutação com o custo mínimo. 2. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.PCV Solução exaustiva 1.  Construa o conjunto de todas as permutações (tours) das n–1 cidades.

Coelho 11 . Flávio José M.PCV 2 a b 5 8 4 c 3 7 d Tour Custo a – b – c – d – a 2 + 3 + 7 + 5 = 17 T(n) = (n–1)! a – b – d – c – a a – c – b – d – a a – c – d – b – a 2 + 4 + 7 + 8 = 21 8 + 3 + 4 + 5 = 20 8 + 7 + 4 + 2 = 21 T(n)∈Θ(n!) a – d – b – c – a a – d – c – b – a 5 + 4 + 3 + 8 = 20 5 + 7 + 3 + 2 = 17 UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

seus valores v1. encontrar o subconjunto mais valioso de objetos que caibam na mochila. v2.Problema da mochila Definição. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 12 . Flávio José M. seus pesos w1. wn. Dados n objetos. w2. …. vn e uma mochila (knapsack) de capacidade W. ….

Problema da mochila W = 10 mochila w=7 v = R$42 w=3 v = R$12 w=4 v = R$40 w=5 v = R$25 objeto 1 objeto 2 objeto 3 objeto 4 UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 13 .

Coelho 14 . Flávio José M.  Encontre um subconjunto viável com o valor mais elevado entre eles.  Construa todos os subconjuntos do conjunto de n objetos dados. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. 2. calculando o peso total de cada subconjunto.Problema da mochila Solução exaustiva 1.

2.Problema da mochila # Subconjunto Peso Total Valor Total 1 ∅ 0 R$0 2 {1} 7 R$42 3 {2} 3 R$12 4 {3} 4 R$40 5 {4} 5 R$25 6 {1. 4} 16 inviável 15 {2. 3. 4} 9 R$65 12 {1. 4} 12 inviável 16 {1. 4} 15 inviável 14 {1. 2. 4} 12 inviável 9 {2. 4} 19 inviável W = 10 w=5 v = R$25 objeto 4 w=4 v = R$40 objeto 3 mochila UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. 2} 10 R$36 7 {1. 3} 14 inviável 13 {1. 4} 8 R$37 11 {3. 2. Flávio José M. 3. Coelho 15 . 3} 11 inviável 8 {1. 3} 7 R$52 10 {2. 3.

a busca exaustiva leva a um algoritmo Ω(2n). Flávio José M. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. a busca exaustiva leva a algoritmos extremamente ineficientes. Estes problemas são chamados de problemas NP–difícil. Coelho 16 . Tanto para o PCV quanto para a mochila.Problema da mochila Como o número de subconjuntos de um conjunto de n elementos é 2n.

Determinar a alocação de pessoas a tarefas de custo mínimo. Dados m pessoas e n tarefas.Problema da alocação Definição. Flávio José M. cada pessoa executando uma tarefa a um custo cij (1 ≤ i ≤ m. 1 ≤ j ≤ n). Coelho 17 . UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Coelho 18 . Flávio José M.Problema da alocação Tarefa 1 Tarefa 2 Tarefa 3 Tarefa 4 Pessoa 1 9 2 7 8 Pessoa 2 6 4 3 7 Pessoa 3 5 8 1 8 Pessoa 4 7 6 9 4 UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

calculando o custo total de cada permutação.  Construa o conjunto de todas as permutações de pessoas onde a i-ésima pessoa executa a i-ésima tarefa.Problema da alocação Solução exaustiva 1. Coelho 19 .  Encontre a permutação de custo mínimo. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. 2. Flávio José M.

Flávio José M. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.BFS) podem ser admitidos como algoritmos de busca exaustiva.Busca em profundidade e busca em largura em grafos Os algoritmos de caminhamento em grafos busca em profundidade (depth-first search DFS) e busca em largura (breadth-first search . Coelho 20 .

sempre que possível. da mesma maneira. Quando alcança. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 21 .Busca em profundidade Ideia: o algoritmo caminha no grafo buscando alcançar o seu vértice mais distante (profundo). Descobre no grafo uma árvore de busca em profundidade (árvore geradora). volta para o vértice anteriormente visitado e segue outro caminho.

Busca em profundidade Cada vértice inicia branco. Flávio José M. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 22 .

Flávio José M. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 23 .Busca em profundidade Cada vértice visitado (descoberto) fica cinza.

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 24 .

Coelho 25 . Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em profundidade

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

26

Busca em profundidade

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

27

Busca em profundidade
Vértice com adjacentes já visitados fica preto.

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

28

Coelho 29 .Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 30 .

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 31 .

Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 32 .

Coelho 33 . Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 34 .

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 35 .

Flávio José M. Coelho 36 .Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 37 .

Coelho 38 . Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M. Coelho 39 .Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Coelho 40 .Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 41 .

Coelho 42 . Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 43 .

Coelho 44 . Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 45 . Flávio José M.

Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 46 . Flávio José M.

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 47 .

Flávio José M.Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 48 .

Flávio José M. Coelho 49 .Busca em profundidade UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Coelho 50 . UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.Busca em profundidade Árvore de busca em profundidade. Flávio José M.

  Inicia BRANCO. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 51 . 2.Busca em profundidade Elementos do algoritmo Cada vértice: 1. 3. Flávio José M.  Muda para CINZA quando é descoberto.  Muda para PRETO quando todos seus vértices adjacentes já foram visitados.

Busca em profundidade Elementos do algoritmo A árvore de busca em profundidade é dada por: Gπ = (V. Flávio José M. onde Eπ = {(v. u.π armazena o vértice predecessor de v.π ≠ NULO} e v.π. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 52 . Eπ ). v)| : v ∈ V e v.d : guarda o “tempo” em que u é descoberto.

f = tempo UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. u está concluído tempo = tempo + 1 u.cor = CINZA para cada vértice v ∈ G.V u. Coelho 53 .cor = BRANCO u.cor == BRANCO u.cor = PRETO // pinta u de preto.π = NULO tempo = 0 para cada vértice u ∈ G.V se u.cor == BRANCO DFS-VISITA(G.π = v DFS-VISITA(G. v) u.adj[u] // explora aresta uv se v. u) DFS-VISITA(G.d = tempo u.DFS( G ) para cada vértice u ∈ G. u) tempo = tempo + 1 // descobre vértice branco u. Flávio José M.

cor == BRANCO 7 DFS-VISITA(G.DFS( G ) 1 para cada vértice u ∈ G. Flávio José M.V 2 u.V 6 se u. u) UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho 54 .π = NULO 4 tempo = 0 5 para cada vértice u ∈ G.cor = BRANCO 3 u.

cor == BRANCO 6 u.cor = CINZA 4 para cada vértice v ∈ G.f = tempo UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.adj[u] // explora aresta uv 5 se v.d = tempo 3 u. Flávio José M.cor = PRETO // pinta u de preto // u está concluído 9 tempo = tempo + 1 10 u. u) 1 tempo = tempo + 1 // descobre vértice branco 2 u. v) 8 u.DFS-VISITA(G. Coelho 55 .π = v 7 DFS-VISITA(G.

Coelho 56 . Flávio José M.Busca em profundidade Eficiência de tempo Matriz de adjacência: Θ(|V|2). UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Lista de adjacência: Θ(|V| + |E|).

Busca em profundidade Propriedades da DFS: Todos os vértices são explorados. Flávio José M. (árvores de busca em profundidade) UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Descobre uma floresta de árvores geradoras (Gπ). Coelho 57 .

Verificar estruturas de parênteses (d e f). Descobrir a saída de labirintos. Utilizada em ordenação topológica. Coelho 58 . Verificar se o grafo é acíclico. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.Busca em profundidade Aplicações da DFS Contar componentes conexas de um grafo. Flávio José M.

Flávio José M. e assim por diante. o algoritmo visita (descobre) todos os vértices a uma distância k = 1 do vértice s. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Partindo de um vértice-origem s do grafo.Busca em largura Ideia em grafos 1. até os vértices mais distantes de s. Depois. 2. visita os vértices a uma distância k + 1 de s.

Coelho . Flávio José M.Busca em largura UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Coelho . Flávio José M.Busca em largura Escolha um vértice s de origem. s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em largura Visite todos os seus adjacentes. Flávio José M. Coelho . s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M. Coelho .Busca em largura Visite todos os seus adjacentes. s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.Busca em largura Visite todos os seus adjacentes. Coelho . Flávio José M.

s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.Busca em largura Visite todos os seus adjacentes. Coelho . Flávio José M.

Busca em largura Visite todos os seus adjacentes. Flávio José M. s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho .

s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.Busca em largura Pinte s de preto após visitar seus adjacentes. Flávio José M. Coelho .

Busca em largura

1
4

s

2
3

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

Busca em largura

s

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

Busca em largura

s

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho

Flávio José M. Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M. Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Flávio José M.

Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Flávio José M. Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M.Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho .

Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Coelho . Flávio José M.Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M. Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho .

Coelho . Flávio José M.Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Coelho . Flávio José M.Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Coelho .Busca em largura 2 1 3 s 8 4 7 5 6 UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho .

Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho .

Coelho . Flávio José M.Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M.Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho .

Coelho .Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.

Busca em largura s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Coelho . Flávio José M.

s UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M.Busca em largura Descobre uma árvore de busca em largura. Coelho .

Coelho .  Muda para PRETO quando todos seus vértices adjacentes já foram visitados. Flávio José M.Busca em largura Elementos do algoritmo Cada vértice: 1. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. 2.  Inicia BRANCO. 3.  Muda para CINZA quando é descoberto.

UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.π.Busca em largura Elementos do algoritmo A árvore de busca é dada por: Gπ = (V. onde Eπ = {(v.π armazena o vértice predecessor de v. Coelho . v)| : v ∈ V e v.π ≠ NULO} e v. u. Flávio José M.d : acumula a “distância” da origem s até u. Eπ ).

s) 1 para cada vértice u ∈ G.d + 1 16 v.cor = PRETO UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.cor == BRANCO 14 v. Flávio José M.π = u 17 ENFILEIRA(Q. v) 18 u.d = u.cor = CINZA 15 v.cor = CINZA 6 s.adj[u] 13 se v.cor = BRANCO 3 u.d = 0 7 s.BFS(G.d = ∞ 4 u.V – {s} 2 u. s) 10 enquanto Q ≠ ø faça 11 u = DESENFILEIRA (Q) 12 para cada vértice v ∈ G.π = NULO 8 Q = ø 9 ENFILEIRA(Q. Coelho .π = NULO 5 s.

Flávio José M.π = NULO 5 s.cor = BRANCO 3 u.V – {s} 2 u. s) 1 para cada vértice u ∈ G.d = ∞ inicialização 4 u.cor = CINZA 6 s.d = 0 7 s.BFS(G. Coelho .π = NULO UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

cor = PRETO UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.cor = CINZA 15 v. Flávio José M. .adj[u] 13 se v. Coelho .p = u 17 ENFILEIRA(Q. v) 18 u. principal 8 Q = ø 9 ENFILEIRA(Q.d + 1 16 v.BFS(G. s) . s) 10 enquanto Q ≠ ø 11 u = DESENFILEIRA(Q) 12 para cada vértice v ∈ G.d = u.cor == BRANCO 14 v. .

Flávio José M. Lista de adjacência: Θ(|V| + |E|). Coelho .Busca em largura Eficiência de tempo Matriz de adjacência: Θ(|V|2). UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Procedimento BFS constrói uma árvore de busca em largura armazenada em Gπ. A busca em largura obtém o caminho mínimo de um vértice origem s até outro vértice qualquer v. Coelho .Busca em largura Propriedades da BFS: Todos os vértices são explorados. Flávio José M. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Flávio José M. Coelho .Busca em largura Aplicações da BFS: Modelo para o algoritmo de Dijkstra para caminho mínimo de origem única e o algoritmo de Prim para árvore geradora mínima. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

Estratégia de busca exaustiva: gere todos os objetos combinatórios do problema e selecione um que satisfaça as restrições do problema. Coelho 104 . mas ineficiente para instâncias de tamanho significativo.Conclusões Força bruta é simples. Flávio José M. Busca exaustiva é uma estratégia força bruta para problemas de otimização combinatória (ou caminhamento em certas estruturas). UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof.

3rd edition. AddisonWesley. Levitin. UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. •  T. Flávio José M. Introduction to the Design and Analysis of Algorithms. Leiserson.E. 2009. MIT Press. Rivest. C.L. 3rd edition. R. H. Coelho 105 .Bibliografia •  A. Cormen. C. 2007. Stein. Introduction to Algorithms.