Académique Documents
Professionnel Documents
Culture Documents
em Aplicações Industriais
Programação de Algoritmos
de Busca
Não Informados
ProfFernandoGomide DCA-FEEC-Unicamp
Busca Não Informada em Grafos
4 4
A B C
3
S 5 5
4 G
3
2 4
D E F Nó meta
Nó inicial
Caminho entre S e G ?
ProfFernandoGomide DCA-FEEC-Unicamp
Resolvendo o Problema de Busca em Grafos
S
A D
B D A E
C E E B B F
D F B F C E A C G
13
G C G F
19 17
G
26
A maneira óbvia de resolver o problema é enumerar todos os caminhos possíveis.
Em geral, esta estratégia é inviável.
ProfFernandoGomide DCA-FEEC-Unicamp
Busca em Profundidade (depth-first search)
loop do
if nodes is empty then return failure
node ← REMOVE_FRONT (nodes)
if GOAL_TEST [problem] applied to STATE (node) succeeds
then return node
nodes ← QUEUING_FN (nodes, EXPAND (node, OPERATORS [problem]))
end
ProfFernandoGomide DCA-FEEC-Unicamp
Busca em Profundidade (depth-first search)
Árvore de Busca 1
S
2 A
3
B D
4 C E 5
6 D F 7
G 8
19
ProfFernandoGomide DCA-FEEC-Unicamp
Busca em Largura (breadth-first search)
loop do
if nodes is empty then return failure
node ← REMOVE_FRONT (nodes)
if GOAL_TEST [problem] applied to STATE (node) succeeds
then return node
nodes ← QUEUING_FN (nodes, EXPAND (node, OPERATORS [problem]))
end
ProfFernandoGomide DCA-FEEC-Unicamp
Busca em Largura (breadth-first search)
Árvore de Busca
1
S
2 A D 3
4 5 6 7
B D A E
8 C E 9 10 E 11 B 12 B F 13
21
14 D F 15 B 16 F 17 C 18 E 19 A 20 C G 22
13
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Java
AbstractGraphSearch
DephtFirstSearch BreadhtFirstSearch
#goalNodeIndex:int
+findPath:int[] #startNodeIndex:int +findPath:int[]
+findPathHelper:int[] #path:int[] #connected_nodes:int[]
#connected_nodes:int[] #num_path:int
+MAX:int IntQueue
#nodeNames:String[]
#node_x:int[]
#node_y:int[]
#link_1:int[]
#link_2:int[]
GraphDepthFirstSearch #lenghts:int[] GraphBreadthFirstSearch
– Métodos:
– Método abstrato:
– Métodos:
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Java
– Métodos:
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Lisp
Entrada dos dados do grafo
;;;; DADOS
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Lisp
Busca em Profundidade – comportamento de queue
Início
((S))
Primeira chamada recursiva
((A S) (D S))
Segunda chamada recursiva
((B A S) (D A S) (D S))
Terceira chamada recursiva
((C B A S) (E B A S) (D A S) (D S))
Quarta chamada recursiva
((E B A S) (D A S) (D S))
Quinta chamada recursiva
((D E B A S) (F E B A S) (D A S) (D S))
Sexta chamada recursiva
((F E B A S) (D A S) (D S))
Sétima chamada recursiva
((G F E B A S) (D A S) (D S))
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Lisp
Busca em Largura
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Lisp
Busca em Largura – comportamento de queue
Início
((S))
Primeira chamada recursiva
((A S) (D S))
Segunda chamada recursiva
((D S) (B A S) (D A S))
Terceira chamada recursiva
((B A S) (D A S) (A D S) (E D S))
Quarta chamada recursiva
((D A S) (A D S) (E D S) (C B A S) (E B A S))
Quinta chamada recursiva
((A D S) (E D S) (C B A S) (E B A S) (E D A S))
Sexta chamada recursiva
((E D S) (C B A S) (E B A S) (E D A S) (B A D S))
Sétima chamada recursiva
((C B A S) (E B A S) (E D A S) (B A D S) (B E D S) (F E D S))
Oitava chamada recursiva
((E B A S) (E D A S) (B A D S) (B E D S) (F E D S))
ProfFernandoGomide DCA-FEEC-Unicamp
Implementação dos Algoritmos em Lisp
Busca em Largura – comportamento de queue
ProfFernandoGomide DCA-FEEC-Unicamp
Observação
ProfFernandoGomide DCA-FEEC-Unicamp