Upload
jucimar-oliveira
View
16
Download
3
Embed Size (px)
DESCRIPTION
projeto e analise de algoritmos
Citation preview
Projeto e Análise de Algoritmos
Força bruta - Busca exaustiva
Prof. Flávio José Mendes Coelho [email protected]
UNIVERSIDADE DO ESTADO DO AMAZONAS�ESCOLA SUPERIOR DE TECNOLOGIA �
NÚCLEO DE COMPUTAÇÃO - NUCOMP
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Busca exaustiva
Busca em profundida em grafos (DFS)
Busca em largura em grafos (BFS)
Nesta aula...
2
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 3
Busca exaustiva
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
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.
Em geral, tais elementos são objetos
combinatórios tais como permutações, combinações e subconjuntos de um conjunto.
Busca exaustiva
4
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Muitos deste problemas são problemas de otimização combinatória: descobrir um elemento que maximiza ou minimiza alguma característica desejável.
Definição. Busca exaustiva (enumeração
explícita) é a aplicação da abordagem de força bruta para problemas de otimização combinatória.
Busca exaustiva
5
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
A estratégia de busca exaustiva é simples: 1. Construa todos os objetos combinatórios do
espaço de busca E para a instância I do problema P.
2. Escolha o elemento ótimo de E para I.
Como E cresce exponencialmente com o tamanho de P, empregar esta estratégia para instâncias não moderadas de P é computacionalmente inviável.
Busca exaustiva
6
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
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)
Busca exaustiva
7
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Definição. Dadas n cidades com distâncias conhecidas entre cada par de cidades, encontrar o tour mais curto que passe por todas as cidades exatamente uma vez antes de retornar a cidade de origem.
Definição alternativa. Encontrar o circuito Hamiltoniano mais curto em um grafo conectado e ponderado.
PCV
8
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
PCV
9
2 b
d c
a
7
4 8
5
3
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Solução exaustiva 1. Construa o conjunto de todas as
permutações (tours) das n–1 cidades. 2. Encontre neste conjunto uma permutação
com o custo mínimo.
PCV
10
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Tour a – b – c – d – a
a – b – d – c – a
a – c – b – d – a
a – c – d – b – a
a – d – b – c – a
a – d – c – b – a
Custo 2 + 3 + 7 + 5 = 17
2 + 4 + 7 + 8 = 21
8 + 3 + 4 + 5 = 20
8 + 7 + 4 + 2 = 21
5 + 4 + 3 + 8 = 20
5 + 7 + 3 + 2 = 17
PCV
11
2 b
dc
a
7
4 8
5
3
T(n) = (n–1)!
T(n)∈Θ(n!)
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Definição. Dados n objetos, seus pesos w1, w2, …, wn, seus valores v1, v2, …, vn e uma mochila (knapsack) de capacidade W, encontrar o subconjunto mais valioso de objetos que caibam na mochila.
Problema da mochila
12
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Problema da mochila
13
mochila
W = 10
w = 3 v = R$12
w = 4 v = R$40
w = 5 v = R$25
w = 7 v = R$42
objeto 1 objeto 2 objeto 3 objeto 4
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Solução exaustiva 1. Construa todos os subconjuntos do
conjunto de n objetos dados, calculando o peso total de cada subconjunto.
2. Encontre um subconjunto viável com o valor mais elevado entre eles.
Problema da mochila
14
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
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, 2} 10 R$36
7 {1, 3} 11 inviável
8 {1, 4} 12 inviável
9 {2, 3} 7 R$52
10 {2, 4} 8 R$37
11 {3, 4} 9 R$65
12 {1, 2, 3} 14 inviável
13 {1, 2, 4} 15 inviável
14 {1, 3, 4} 16 inviável
15 {2, 3, 4} 12 inviável
16 {1, 2, 3, 4} 19 inviável
Problema da mochila
15
# Subconjunto Peso Total Valor Total
mochila
W = 10
w = 4 v = R$40 objeto 3
w = 5 v = R$25 objeto 4
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Como o número de subconjuntos de um conjunto de n elementos é 2n, a busca exaustiva leva a um algoritmo Ω(2n).
Tanto para o PCV quanto para a mochila, a busca exaustiva leva a algoritmos extremamente ineficientes.
Estes problemas são chamados de problemas NP–difícil.
Problema da mochila
16
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Definição. Dados m pessoas e n tarefas, cada pessoa executando uma tarefa a um custo cij (1 ≤ i ≤ m, 1 ≤ j ≤ n). Determinar a alocação de pessoas a tarefas de custo mínimo.
Problema da alocação
17
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Problema da alocação
18
Pessoa 1 9 2 7 8 Pessoa 2 6 4 3 7 Pessoa 3 5 8 1 8
Pessoa 4 7 6 9 4
Tarefa 1 Tarefa 2 Tarefa 3 Tarefa 4
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Solução exaustiva 1. Construa o conjunto de todas as
permutações de pessoas onde a i-ésima pessoa executa a i-ésima tarefa, calculando o custo total de cada permutação.
2. Encontre a permutação de custo mínimo.
Problema da alocação
19
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Os algoritmos de caminhamento em grafos busca em profundidade (depth-first search - DFS) e busca em largura (breadth-first search - BFS) podem ser admitidos como algoritmos de busca exaustiva.
Busca em profundidade e busca em largura em grafos
20
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Ideia: o algoritmo caminha no grafo buscando alcançar o seu vértice mais distante (profundo), sempre que possível. Quando alcança, volta para o vértice anteriormente visitado e segue outro caminho, da mesma maneira.
Descobre no grafo uma árvore de busca em profundidade (árvore geradora).
21
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Cada vértice inicia branco.
22
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Cada vértice visitado (descoberto) fica cinza.
23
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 24
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 25
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
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Vértice com adjacentes já visitados fica preto.
28
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 29
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 30
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 31
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 32
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 33
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 34
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 35
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 36
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 37
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 38
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. Flávio José M. Coelho 40
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 41
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 42
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 43
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 44
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 45
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 46
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 47
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 48
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho 49
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Árvore de busca em profundidade.
50
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Elementos do algoritmo Cada vértice: 1. Inicia BRANCO. 2. Muda para CINZA quando é descoberto. 3. Muda para PRETO quando todos seus
vértices adjacentes já foram visitados.
51
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Elementos do algoritmo A árvore de busca em profundidade é dada por: Gπ = (V, Eπ ), onde Eπ = {(v.π, v)| : v ∈ V e v.π ≠ NULO} e v.π armazena o vértice predecessor de v.
u.d : guarda o “tempo” em que u é descoberto.
u.f : guarda o “tempo” em que u foi “concluído”.
52
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
DFS(G)paracadavérticeu∈G.Vu.cor=BRANCOu.π=NULOtempo=0paracadavérticeu∈G.Vseu.cor==BRANCODFS-VISITA(G,u)DFS-VISITA(G,u)tempo=tempo+1//descobrevérticebrancou.d=tempou.cor=CINZAparacadavérticev∈G.adj[u]//exploraarestauvsev.cor==BRANCOu.π=vDFS-VISITA(G,v)u.cor=PRETO//pintaudepreto;uestáconcluídotempo=tempo+1u.f=tempo
53
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
DFS(G)1paracadavérticeu∈G.V2u.cor=BRANCO3u.π=NULO4tempo=05paracadavérticeu∈G.V6seu.cor==BRANCO7DFS-VISITA(G,u)
54
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
DFS-VISITA(G,u)1tempo=tempo+1//descobrevérticebranco2u.d=tempo3u.cor=CINZA4paracadavérticev∈G.adj[u]//exploraarestauv5sev.cor==BRANCO6u.π=v7DFS-VISITA(G,v)8u.cor=PRETO//pintaudepreto//uestáconcluído9tempo=tempo+110u.f=tempo
55
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Eficiência de tempo Matriz de adjacência: Θ(|V|2). Lista de adjacência: Θ(|V| + |E|).
56
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Propriedades da DFS: Todos os vértices são explorados.
Descobre uma floresta de árvores geradoras (Gπ). (árvores de busca em profundidade)
57
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Aplicações da DFS Contar componentes conexas de um grafo. Verificar se o grafo é acíclico. Descobrir a saída de labirintos. Verificar estruturas de parênteses (d e f). Utilizada em ordenação topológica.
58
Busca em profundidade
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Ideia em grafos 1. Partindo de um vértice-origem s do grafo, o
algoritmo visita (descobre) todos os vértices a uma distância k = 1 do vértice s.
2. Depois, visita os vértices a uma distância k + 1 de s, e assim por diante, até os vértices mais distantes de s.
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Escolha um vértice s de origem.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Visite todos os seus adjacentes.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Visite todos os seus adjacentes.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Visite todos os seus adjacentes.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Visite todos os seus adjacentes.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Visite todos os seus adjacentes.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Pinte s de preto após visitar seus adjacentes.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Busca em largura
1
2
3
4s
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
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
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
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
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
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
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
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
Busca em largura
s
1
2
3
4
5 6
7
8
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
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
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
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
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Descobre uma árvore de busca em largura.
Busca em largura
s
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Elementos do algoritmo Cada vértice: 1. Inicia BRANCO. 2. Muda para CINZA quando é descoberto. 3. Muda para PRETO quando todos seus
vértices adjacentes já foram visitados.
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Elementos do algoritmo A árvore de busca é dada por: Gπ = (V, Eπ ), onde Eπ = {(v.π, v)| : v ∈ V e v.π ≠ NULO} e
v.π armazena o vértice predecessor de v.
u.d : acumula a “distância” da origem s até u.
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
BFS(G,s)1paracadavérticeu∈G.V–{s}2u.cor=BRANCO3u.d=∞4u.π=NULO5s.cor=CINZA6s.d=07s.π=NULO8Q=ø9ENFILEIRA(Q,s)10enquantoQ≠øfaça11u=DESENFILEIRA(Q)12paracadavérticev∈G.adj[u]13sev.cor==BRANCO14v.cor=CINZA15v.d=u.d+116v.π=u17ENFILEIRA(Q,v)18u.cor=PRETO
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
BFS(G,s)1paracadavérticeu∈G.V–{s}2u.cor=BRANCO3u.d=∞4u.π=NULO5s.cor=CINZA6s.d=07s.π=NULO
inicialização
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
BFS(G,s)...8Q=ø9ENFILEIRA(Q,s)10enquantoQ≠ø11u=DESENFILEIRA(Q)12paracadavérticev∈G.adj[u]13sev.cor==BRANCO14v.cor=CINZA15v.d=u.d+116v.p=u17ENFILEIRA(Q,v)18u.cor=PRETO
principal
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Eficiência de tempo Matriz de adjacência: Θ(|V|2). Lista de adjacência: Θ(|V| + |E|).
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Propriedades da BFS: Todos os vértices são explorados.
A busca em largura obtém o caminho mínimo de um vértice origem s até outro vértice qualquer v.
Procedimento BFS constrói uma árvore de busca em largura armazenada em Gπ.
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
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.
Busca em largura
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Força bruta é simples, mas ineficiente para instâncias de tamanho significativo.
Busca exaustiva é uma estratégia força bruta para problemas de otimização combinatória (ou caminhamento em certas estruturas).
Estratégia de busca exaustiva: gere todos os objetos combinatórios do problema e selecione um que satisfaça as restrições do problema.
Conclusões
104
UEA/EST/NUCOMP – Projeto e Análise de Algoritmos – Prof. Flávio José M. Coelho
Bibliografia
• A. Levitin. Introduction to the Design and Analysis of Algorithms. 3rd edition. Addison-Wesley, 2007.
• T. H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Introduction to Algorithms, 3rd edition, MIT Press, 2009.
105