Universidade Federal de Lavras
Departamento de Computação Aplicada
Apostila de Resolução de Problemas
por meio de Busca
Prof.ª Elaine Cecı́lia Gatto
Agosto
2025
Universidade Federal de Lavras
Departamento de Computação Aplicada
Apostila de Resolução de Problemas
por meio de Busca
Profª Elaine Cecı́lia Gatto
Agosto
2025
Conteúdo
1 Introdução 3
2 Busca Não Informada 7
2.1 Busca em Largura . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Busca em Profundidade . . . . . . . . . . . . . . . . . . . . . 7
2.3 Busca em Profundidade Limitada . . . . . . . . . . . . . . . . 10
2.4 Busca em Profundidade Iterativa . . . . . . . . . . . . . . . . 10
3 Busca Informada 10
3.1 Busca Gulosa . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Busca A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4 Busca Competitiva 11
4.0.1 Min-Max . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.0.2 Poda Alpha-Beta . . . . . . . . . . . . . . . . . . . . . 13
4.0.3 Expect Min-Max . . . . . . . . . . . . . . . . . . . . . 18
5 Propriedades e Caracterı́sticas de Buscas 19
5.1 Admissibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 Monotocidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
6 Conclusão 20
Bibliografia 33
Resumo
Esta apostila, elaborada pela Profª Elaine Cecı́lia Gatto, do Departamento
de Computação Aplicada, da Universidade Federal de Lavras, em agosto de
2025, foi concebida para ser um guia objetivo e de referência rápida sobre
a resolução de problemas através de busca em Inteligência Artificial (IA).
O material foi desenvolvido com base em resumos dos estudos da professora
sobre o tema, não contendo todos os detalhes. A apostila aborda a busca
como uma das abordagens mais antigas e bem estabelecidas para a solução
de problemas, como navegação de robôs e jogos, definindo os componentes
essenciais para a resolução de problemas. Os algoritmos de busca são di-
vididos em duas grandes categorias: Busca Não Informada (busca cega) e
Busca Informada (busca heurı́stica). As estratégias de busca não informada,
que não usam heurı́sticas, incluem a Busca em Largura (BFS) e a Busca
em Profundidade (DFS). A Busca Informada utiliza informações adicionais
para guiar a busca em direção a uma solução ideal. Esta categoria abrange
a Busca Gulosa, a Busca A* e a Busca Competitiva. A apostila também dis-
cute as propriedades dos algoritmos de busca, como completude, otimalidade
e complexidade.
Keywords: Inteligência Artificial, Busca, Resolução de Problemas, Algorit-
mos, Heurı́stica.
1
LICENÇA
Este trabalho está licenciado sob a Creative Commons Atribuição Não
Comercial 4.0 Internacional (CC BY-NC 4.0). Isso significa que você pode
copiar, compartilhar e adaptar este material, desde que não seja para fins
comerciais e sempre dê crédito ao autor. Para mais detalhes, veja a licença
completa: ⟨https://creativecommons.org/licenses/by-nc/4.0/⟩
IMPORTANTE
Todo o material desta apostila foi desenvolvido com base em:
Neumann (1928), Moore (1959), Newell e Simon (1961), Hart, Nilsson e
Raphael (1968), Hopcroft e Tarjan (1973, 1974), Knuth e Moore (1975),
Nilsson (1980), Korf (1985a), Sleator e Tarjan (1985), Korf (1985b), Papa-
dimitriou e Yannakakis (1991), Luger (2008, 2013), Russell e Norvig (2016),
UNIVESP ()
Se encontrar qualquer erro, entre em contato com elainececilia-
gatto@gmail.com
2
1 Introdução
A busca é um componente da Intelig^
encia Artificial (IA) para so-
lucionar problemas de forma inteligente. Nas primeiras duas décas da IA, a
representação e a busca eram o foco dos pesquisadores. Portanto, a busca é
uma das abordagens mais antigas e bem estabelecidas para solucionar uma
ampla variedade de problemas. Como exemplo citam-se navegação de robôs,
soluções de jogos (quebra-cabeça, jogo da velha, etc.), otimização de rotas,
entre outros.
A resolução de problemas por meio da busca visa encontrar soluções para
problemas através da exploração sistemática de espaços de estados. Em ou-
tras palavras, é necessário encontrar uma sequência de ações que transformem
um estado inicial em um estado objetivo.
Um problema P pode ser representado como um grafo de espaço de es-
tados e, a teoria dos grafos pode ser usada para analisar a estrutura e com-
plexidade tanto do problema quanto dos procedimentos empregados. Os
componentes da resolução de problemas por meio de busca são:
Espaço de Estados (S). S é um conjunto de estados, A é um conjunto
de ações. Portanto, o espaço de estados é o conjunto de todos os estados
acessı́veis a partir de um estado inicial. Pode ser definido como um grafo,
onde cada nó representa um estado e cada aresta representa uma ação, con-
forme ilustra a Figura 1.
Figura 1: Exemplo em grafo
Estados (s). Cada um dos estados é uma representação do mundo do pro-
blema que está sendo tratado naquele instante. Os estados mudam conforme
ações são aplicadas.
3
Estado inicial (s0). É o ponto de partia da busca, ou seja, a configuração
inicial.
Estado objetivo (sf ). É a configuração que satisfaz as condições da solução
do problema, onde, s0 ∈ S e sf ∈ S.
Ações (a). São transformações que movem o problema de um estado para
outro. Correspondem aos passos de um processo de solução do problema.
Operadores (σ). É uma função que, dada um estado, retorna o novo estado
resultante da aplicação da ação, onde, δ : δ × A → S.
Caminhos (c). É uma sequência de ações que transforma o estado inicial
em um estado objetivo.
Custo C. O custo de um caminho é a soma dos custos individuais das ações
que compõem o caminho, onde C : S × A → R
Objetivo. Encontrar um caminho do estado inicial s0 até o estado objetivo
sf que minimize ou maximize um critério de custo. Portanto, são soluções
para uma instância do problema.
Teste do Objetivo. Avalia se um estado particular no espaço de estados
corresponde ao estado objetivo.
Algoritmos. Tendo definido os componentes de 1 à 9, é possı́vel usar dife-
rentes algoritmos para explorar o espaço de estados e encontrar um caminho
de s0 até sf . Eles podem ser divididos em duas grandes categorias: i) busca
não informada, e ii) Busca informada; e serão detalhadas mais adiante.
Portanto, a busca em espaço de estados caracteriza a solução de um
problema como o processo de procurar um caminho de solução geralmente
ótimo, partindo do estado inicial até o estado final. Para ilustrar: como
alguém chega da sua casa até o trabalho? Veja como fica:
• s0: a pessoa está em casa
• sf : a pessoa chegou no trabalho
• S: todas as localizações e situações possı́veis
• sc: tempo ou distância para cada ação
4
• δ: a localização muda conforme as ações
• A: carro, apê, ônibus, pare, etc.
• h: estima o tempo para chegar no trabalho
h representa uma função heurı́stica que pode ser usada no lugar da função
de custo e o objetivo é estimar o custo de alcançar o estado objetivo a partir
de um estado dado, e é geralmente utilizada em uma busca informada.
Outro exemplo clássico que ilustra bem a resolução de problemas por
busca é o 8-puzzle. Observe a Figura 2.
1 4 3
7 6
5 8 2
1 2 3
4 5 6
7 8
Figura 2: 8-puzzle
O 8-puzzle é um jogo de tabuleiro 3 × 3, onde 8 peças numeradas e uma
vazia podem ser movidas em nove espaços. O objetivo é mover as peças de
s0 até chegar na configuração de sf , dessa forma definem-se:
• S: cada estado (s) é uma configuração especı́fica do quebra cabeça,
portanto, o espaço de estados é o conjunto de todas as configurações
possı́veis;
• A: movimentos da peça vazia, ou seja, mover a peça vazia para cima,
baixo, esquerda, ou direita;
• δ: dada uma configuração atual e uma ação, a função retorna a nova
configuração do quebra cabeça;
• C: cada movimento tem um custo, no caso, 1. Por exemplo, mover a
peça vazia para baixo tem custo 1.
Movimentar a peça vazia simplifica a definição das regras de movimento,
entre elas, garantir que a peça vazia não será movida para fora do tabuleiro.
A partir de s0 existem quatro estados possı́veis, conforme ilustra a Figura 3.
5
1 4 3
7 6
5 8 2
1 3
7 4 6
5 8 2
1 4 3
7 6
5 8 2
1 4 3
7 8 6
5 2
1 4 3
7 6
5 8 2
se o movimento for
para cima
se o movimento for
para a esquerda
se o movimento for
para baixo
se o movimento for
para a direita
Figura 3: Possı́veis estados conforme movimentação
Para cada uma dessas possibilidades de movimentação, existem novos
movimentos possı́veis:
• s1: {esquerda, abaixo, direita}
• s2: {acima, direita, abaixo}
• s3: {direita, esquerda, acima}
• s4: {acima, esquerda, abaixo}
E assim, a cada novo movimento da peça vazia, novas possibilidades sur-
gem. Além dos grafos, também é possı́vel representar o problema como uma
árvore. O estado inicial é a raiz da árvore e os ramos são desenvolvidos de
acordo com as ações. Neste caso, existe o conceito de fronteira, que guarda
os nós que devem ser expandidos. Sempre que um nó é retirado da fronteira,
ele é testado para verificar se é o estado objetivo. Se ele o é de fato, então, o
processo de busca para aı́, caso contrário, o nó é expandido. As estratégias
aqui vão variar no momento de percorrer a árvore.
O restante desta apostila está organizada da seguinte forma: a Seção 2
apresenta os algoritmos de busca não informada; Seção 3 os algoritmos de
busca informada, Seção 5 as propriedades das buscas, a Seção 6 de conclusão,
a Seção 6 traz o pseudocódigo de todas as buscas apresentadas nesta apostila,
e por fim, a Seção 6 as filas e as pilhas para cada Figura que ilustra as buscas.
6
2 Busca Não Informada
Busca sem informação, busca não informada, ou ainda busca cega, é uma
bordagem na resolução de problemas que não utiliza nenhum conhecimento
especı́fico sobre o problema além das regras que definem o espaço de estado
e as transições entre eles. Os algoritmos nesta categoria exploram o espaço
de forma sistemática, sem usar heurı́stica. As estratégias são a busca em
largura, em profundidade, profundidade limitada, profundidade iterativa e
serão detalhadas nas subseções a seguir.
2.1 Busca em Largura
A busca em largura explora os estados nı́vel por nı́vel, a partir do estado
inicial. Ela é completa e ótima quando o custo das ações é uniforme, mas
pode ser ineficiente em termos de espaço. Nesse método, utiliza-se uma fila.
O algoritmo começa colocando o nó raiz (estado inicial) na fila. Em seguida,
os nós vizinhos ou adjacentes ao nó raiz são expandidos antes de avançar para
o próximo nı́vel; assim, os nós são sempre expandidos na ordem em que são
gerados. Para evitar ciclos e impedir que o mesmo nó seja visitado mais de
uma vez, cada nó é marcado como visitado no momento em que é colocado
na fila. A busca prossegue até que todos os nós tenham sido visitados ou
até que um nó especı́fico seja encontrado. A Figura 4 ilustra a busca em
largura em forma de árvore. A Figura 4 ilustra a busca em largura em forma
de árvore. Nós brancos significam nós que já foram expandidos, nó amarelo
indica o nó que está sendo avaliado naquele momento, nós cinzas e tracejados
são nós que ainda não foram avaliados nem expandidos.
2.2 Busca em Profundidade
A busca em profundidade explora o máximo possı́vel de cada ramo antes
de retroceder. É um tipo de busca que pode ser aplicado, por exemplo, na
geração de labirintos ou na solução de quebra-cabeças. Sua implementação
é simples e exige menos espaço de memória; porém, pode acabar presa em
loops infinitos, não garantir a solução ótima e também não ser completa.
Nesse método, utiliza-se uma pilha: o algoritmo começa no nó raiz, visita
um nó vizinho ainda não visitado e repete o processo até não haver mais
nós disponı́veis naquele ramo. Sempre que um nó é colocado na pilha, ele
é marcado como visitado. A Figura 5 ilustra a busca em profundidade em
forma de árvore.
7
A
B C
D E F G
ITERAÇÃO 1
ITERAÇÃO 4
A
B C
D E F G
A
B C
D E F G
ITERAÇÃO 2
A
B C
D E F G
ITERAÇÃO 3
Figura 4: Exemplo de busca em largura
A
B C
D E
F G
ITERAÇÃO 1
ITERAÇÃO 4
A
B C
D E
H G
A
B C
D E
ITERAÇÃO 2
A
B C
D E
ITERAÇÃO 3
F G
H I
Figura 5: Exemplo de busca em profundidade
8
A
B C
D
ITERAÇÃO 1 ITERAÇÃO 2
F G
E
A
B C
D F G
E
A
B C
D
ITERAÇÃO 3
F G
E
A
B C
D
FIM
F G
E
LIMITE = 2
Figura 6: Exemplo de busca em profundidade limitada
A
B C
D E
Se limite = 0 apenas A é expandido
A
B C
D E
A
B C
D E
A
B C
D E
F G F G
F G
F G
Se limite = 1, expande A, visita B e C
Se limite = 2, expande A, B, visita D e E Se limite = 3, expande A, B, e C. Visita F e G
Figura 7: Exemplo de busca em profundidade iterativa
9
2.3 Busca em Profundidade Limitada
A busca em profundidade limitada é uma variação da busca em profundi-
dade que impõe um limite máximo ao número de nı́veis a serem explorados.
Se o algoritmo atingir esse limite sem encontrar uma solução, ele interrompe
a exploração e retorna para investigar outro ramo. Essa estratégia evita
loops infinitos, mas pode levar à perda de soluções que estejam além da pro-
fundidade definida. Trata-se de um algoritmo subótimo, que pode ser útil
em cenários nos quais há restrições de recursos computacionais. A Figura 6
ilustra a busca em profundidade em forma de árvore.
2.4 Busca em Profundidade Iterativa
A busca em profundidade iterativa é uma variação da busca limitada,
que combina as vantagens da busca em largura e da busca em profundidade.
Ela consome menos memória e garante encontrar soluções rasas. A cada
iteração, aplica-se a busca em profundidade limitada com um limite crescente,
verificando-se se o nó objetivo foi encontrado. Esse tipo de algoritmo é útil
em jogos, estratégias e roteamento, sendo completo, ótimo e com uma gestão
de memória eficiente. A Figura 7 ilustra a busca em profundidade iterativa
em forma de árvore.
3 Busca Informada
A busca com informação, ou busca informada, ou ainda heurı́stica, utili-
zada informações adicionais sobre o problema para guiar a busca em direção
à solução desejada. A informação é usada para priorizar estados que pa-
recem mais promissores, na tentativa de encontrar uma solução ótima. As
funções heurı́sticas fornecem estimativas do custo ou distância até o objetivo.
Este tipo de algoritmo encontra soluções mais rápido com mais frequência
que a busca cega e explora menos estados. Estes algoritmos também utilizam
funções para avaliação de nós e expande apenas os nós com melhor avaliação.
A Busca Gulosa, Busca A*, e Busca competitiva são algoritmos deste tipo e
serão detalhados nas subseções a seguir.
3.1 Busca Gulosa
Neste tipo de algoritmo, a decisão em cada passo é baseada apenas na
informação local imediata, sem considerar consequências futuras. A busca
gulosa sempre escolhe o nó que aparenta ser o melhor naquele momento,
com base em alguma heurı́stica, e não realiza retrocessos. O problema desse
10
método é que pode existir um caminho melhor que não é escolhido porque,
naquele instante, a decisão parece pior (mas não o é); por isso, a busca
gulosa não garante a solução ótima. Embora o algoritmo não seja ótimo, sua
execução é geralmente rápida. Apesar de ser simples de implementar, ele
depende fortemente da heurı́stica: se a heurı́stica é boa, o resultado tende a
ser bom. Essa abordagem pode ser aplicada em problemas de roteamento e
otimização de recursos. A Figura 8 ilustra a busca gulosa.
3.2 Busca A*
A Busca A* considera outros tipos de custos e evita expandir caminhos
caros. Para isso, utiliza uma função heurı́stica que estima o custo de um
nó até o objetivo e avalia quão promissor é explorá-lo. O algoritmo mantém
também um custo acumulado, que representa o custo real para alcançar o nó.
Uma função de avaliação combina esse custo real com a heurı́stica e prioriza
a expansão dos nós de menor custo. Esse método garante uma solução ótima,
é eficiente, mas ainda depende da heurı́stica, exigindo relativamente pouco
espaço de memória. Pode ser aplicado em sistemas de navegação e jogos. A
Figura 9 ilustra a busca A*.
4 Busca Competitiva
Os algoritmos desse tipo de busca são amplamente utilizados em IA e teo-
ria dos jogos para resolver problemas em que múltiplos agentes, ou jogadores,
buscam otimizar suas próprias metas dentro de um ambiente compartilhado.
Cada agente considera não apenas suas próprias estratégias e objetivos, mas
também os dos demais agentes. Nesse contexto, definem-se:
• S: o conjunto de todos os possı́veis estados do ambiente compartilhado;
• A: o conjunto de ações que cada agente pode realizar em qualquer
estado;
• δ: função de transição de estado, que define a probabilidade de passar
de um estado para outro dado um conjunto de ações dos agentes;
• R: função de recompensa, que mede o sucesso ou a utilidade de um
determinado estado ou transição;
• σ: estratégias adotadas pelos agentes para maximizar suas recompen-
sas, considerando também as estratégias dos outros agentes.
11
7
3 12
99 8 5 6
7
3 12
99 8 5 6
7
3 12
99 8 5 6
7
3 12
99 8 5 6
Para chegar à maior soma, em cada etapa, o algoritmo
guloso escolherá o que parece ser a escolha imediata
ideal, então ele escolherá 12 em vez de 3 na segunda
etapa, e não chegará à melhor solução, que contém 99.
Figura 8: Exemplo de Busca Gulosa
A
D
B
E
C
F
2
1
1
6
3
9
99
6
11
7 1
0
A
D
B
E
C
F
2
1
1
6
3
9
99
6
11
7 1
0
A
D
B
E
C
F
2
1
1
6
3
9
6
11
7 1
0
A
D
B
E
C
F
2
1
1
6
3
9
99
6
11
7 1
0
Figura 9: Exemplo de Busca A*
12
Nas subseções seguintes serão explicadas, portanto, as estratégias de
min-max e alfa-beta, que são formas de busca competitiva.
4.0.1 Min-Max
O algoritmo Min-Max é utilizado em jogos de dois jogadores com soma
zero, nos quais um deles tenta maximizar sua recompensa enquanto o outro
busca minimizá-la. Em termos simples, trata-se de escolher a jogada com
o melhor retorno possı́vel, supondo que o oponente também fará sempre a
melhor jogada possı́vel.
A representação desse processo é feita por meio de uma árvore, onde cada
nı́vel corresponde às jogadas possı́veis. Para um estado do jogo s, o valor
V (s) é definido da seguinte forma:
• Se s é um estado terminal, então V (s) = valor do estado;
• Se s é a vez do jogador max, então V (s) = maxa∈A V (s′
);
• Se s é a vez do jogador min, então V (s) = mina′∈A′ V (s′
);
onde A é o conjunto de ações de max, A′
o conjunto de ações de min, e s′
é
o estado resultante da aplicação de uma ação.
Cada estado terminal recebe um valor de utilidade, por exemplo: win =
+1, loss = −1 e tie = 0. Esses valores são então propagados pela árvore:
nos nós de min, escolhe-se o menor valor entre os filhos; nos nós de max,
o maior valor. A jogada ótima é determinada na raiz, onde o jogador max
seleciona a ação que leva ao nó filho com valor máximo.
O algoritmo é completo e sempre encontra a solução ótima, assumindo
que toda a árvore pode ser explorada. Em jogos complexos como o xadrez,
que possui aproximadamente 1056
possibilidades, torna-se inviável explorar a
árvore inteira, sendo necessário considerar apenas algumas jogadas à frente.
A Figura 10 ilustra a busca min-max.
4.0.2 Poda Alpha-Beta
Este algoritmo aprimora o min-max ao reduzir o número de nós avaliados
na árvore, evitando a expansão daqueles que não afetam a decisão final.
Dessa forma, ele encontra a mesma decisão correta que o min-max, mas sem
precisar examinar todos os nós. Por isso recebe o nome de poda: elimina
ramos da árvore que não influenciam o resultado final. Nesse contexto, α
representa o limite inferior e β o limite superior para a avaliação de um nó.
Em outras palavras, α é o melhor valor encontrado até o momento para o
max, e β o melhor para o min.
13
MAXIMIZER
MINIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
H I J K L M N O
-1 4 2 6 -3 -5 0 7
A
-1 4 2 6 -3 -5 0 7
4 6 -3 7
B C
D E F G
H I J K L M N O
MAXIMIZER
MINIMIZER
MAXIMIZER
MINIMIZER
MAXIMIZER
MINIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
H I J K L M N O
-1 4 2 6 -3 -5 0 7
4 -3
4 6 -3 7
MAXIMIZER
MINIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
H I J K L M N O
-1 4 2 6 -3 -5 0 7
4
4 6 -3 7
4
Figura 10: Exemplo de busca competitiva min-max
14
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
A
B C
D E F G
3 5 6 9 1 2 0 -1
MAXIMIZER
MAXIMIZER
MINIMIZER
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
Figura 11: Exemplo de busca com poda alfa-beta Parte 1
15
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
=
Poda o 9!
MAXIMIZER
MAXIMIZER
MINIMIZER
A
B C
D E F G
3 5 6 9 1 2 0 1
=
Poda o 9!
=
=
=
Figura 12: Exemplo de busca com poda alfa-beta Parte 2
16
A poda ocorre para o max quando o valor de um nó é maior ou igual
a β, ou seja, o nó é ignorado pois o min já possui uma opção melhor. Já
para o min, a poda acontece quando o valor do nó é menor ou igual a
α, significando que esse nó pode ser descartado porque o max já tem uma
alternativa superior. Assim, o algoritmo diminui a complexidade e se mostra
bastante eficiente, embora sua performance dependa da ordem em que os nós
são analisados. As Figuras 11 e 12 ilustram a busca com poda alfa-beta.
Análise e valores completos da árvore min-max com intervalos [α, β]
das Figuras 11 e 12.
1. Raiz A (MAX)
• Inicial: [−∞, +∞].
• Depois de explorar B, atualiza α = 5.
• Fica: [5, +∞].
2. Nó B (MIN)
• Recebe de A: [−∞, +∞].
• Depois de avaliar D=5, atualiza β = 5.
• Fica: [−∞, 5].
• Nó D (MAX)
– Recebe de B: [−∞, +∞].
– Avalia folha 3 ⇒ α = 3.
– Avalia folha 5 ⇒ α = 5.
– Retorna 5.
– Fica: [5, +∞].
• Nó E (MAX)
– Recebe de B: [−∞, 5].
– Avalia folha 6 ⇒ α = 6.
– Como α = 6 ≥ β = 5, poda o filho 9.
– Retorna 6, mas B mantém β = 5.
– Fica: [6, 5] (indica poda).
3. Nó C (MIN)
• Recebe de A: [5, +∞].
• Após F=2, atualiza β = 2.
17
• Fica: [5, 2] ⇒ poda G.
• Nó F (MAX)
– Recebe de C: [5, +∞].
– Avalia folha 1 ⇒ α = max(5, 1) = 5.
– Avalia folha 2 ⇒ α = max(5, 2) = 5.
– Retorna 2 para C.
– Fica: [5, +∞].
• Nó G (MAX), podado
– Receberia de C: [5, 2].
– Mas como já temos β = 2 ≤ α = 5, é cortado.
A
B C
10 10 9 100
A
B C
10 10 9 100
(10+10)/2 = 10
A
B C
10 10 9 100
INICIO Para o minimiador, faz sentido ir
para a esquerda primeiro!
10
CHANCE!
(100+9)/2 = 54.5
Mas e se houver a possibilidade de o minimizador
cometer um erro? Ir para a direita pode parecer mais
atraente ou resultar em uma solução melhor!
A
B C
10 10 9 100
10 54.5
O nó maximizador escolhe a
subárvore correta para maximizar
as utilidades esperadas.
Figura 13: Exemplo de busca expect min-max.
4.0.3 Expect Min-Max
Este algoritmo incorpora incerteza e aleatoriedade, sendo aplicado em
cenários onde as ações dos jogadores têm caráter probabilı́stico. A ideia é
calcular a expectativa do valor de um estado, levando em conta possı́veis
resultados aleatórios. Assim, max busca maximizar o próprio ganho, min
tenta minimizar o ganho de max, e alt introduz a incerteza no processo.
A árvore é construı́da a partir do estado inicial do jogo, incluindo os nı́veis
de decisão dos jogadores. Para cada estado terminal são atribuı́dos valores
18
de utilidade, que depois são propagados pelos nós internos. A diferença aqui
está no cálculo da expectativa: os valores dos filhos de um nó são combinados
segundo as probabilidades dos eventos aleatórios. Por fim, o max seleciona
a jogada que oferece a melhor expectativa de ganho, considerando tanto as
escolhas adversárias quanto os efeitos do acaso. A Figura 13 ilustra esta
busca.
5 Propriedades e Caracterı́sticas de Buscas
Um algoritmo é completo se ele garante encontrar uma solução se ela
existir. Um algoritmo é ótimo se encontra a solução de menor custo ou
caminho. Um algoritmo com complexidade temporal menor é mais eficiente
pois executa em menos tempo uma solução complexa. O espaço de memória
necessário para executar o algoritmo também é analisado como complexidade
espacial: maior espaço, mais memória. Um algoritmo pode encontrar uma
ótima solução em uma região especı́fica do espaço de estados (local) ou uma
solução ótima global. Por fim, à capacidade do algoritmo de buscar soluções
de forma rápida e eficaz é dado o nome de eficiência. A Tabela 1 apresenta
um comparativo entre os quatro tipos de buscas não informada, a Tabela 3
apresenta um comparativo entre os dois tipos de buscas informada, a Tabela 5
apresenta um comparativo entre os três tipos de busca competitiva, a Tabela
4 apresenta as vantagens e desvantagens entre tipos de buscas informada, a
Tabela 4 apresenta as vantagens e desvantagens entre tipos de buscas não
informada, e por fim, a Tabela 6 apresenta as vantagens e desvantagens entre
os tipos de buscas competitivas.
5.1 Admissibilidade
A admissibilidade nos permite entender em que sentido uma heurı́stica é
melhor do que outra, ou seja, reflete o grau de informação que a heurı́stica
fornece. Um algoritmo de busca é considerado admissı́vel se ele garantir a
descoberta de um caminho mı́nimo até uma solução, sempre que esta exista,
como acontece na busca em largura. Esse tipo de heurı́stica nunca superes-
tima o custo real para alcançar o objetivo, por isso é chamada de otimista.
Em outras palavras, o valor da heurı́stica para um nó deve ser sempre me-
nor ou igual ao custo real do caminho mais curto do nó até o objetivo:
h(n) ≤ h∗
(n)
19
5.2 Monotocidade
Quando um estado é descoberto usando busca heurı́stica, existe a garantia
de que o mesmo estado não será descoberto novamente com um custo menor?
Uma heurı́stica é chamada de monotônica se, para qualquer nó n e qualquer
sucessor n′
gerado por uma ação a, a diferença entre as heurı́sticas satisfaz
h(n) ≤ c(n, a, n′
) + h(n′
), ou seja, o valor da heurı́stica nunca supera o custo
real para alcançar o sucessor mais a heurı́stica desse sucessor. Dessa forma,
em qualquer ponto do espaço de busca, a heurı́stica é localmente consistente,
garantindo coerência na exploração dos nós.
6 Conclusão
A resolução de problemas por meio de busca oferece uma variedade de
métodos e algoritmos para tratar problemas complexos em diferentes domı́nios.
A escolha do algoritmo adequado depende das caracterı́sticas do problema,
do tamanho do espaço de busca, do grau de informação disponı́vel e também
do nı́vel de incerteza envolvido.
A busca não informada é amplamente aplicada em problemas de na-
vegação e exploração, especialmente quando o espaço pode ser grande e
complexo. Exemplos: mapas, labirintos, sistemas de transporte, jogos de
tabuleiro, puzzles e sudoku. Já a busca informada é indicada para situações
em que informações adicionais podem guiar o processo de maneira mais efi-
ciente. Exemplos: GPS, jogos e labirintos. Por sua vez, a busca competitiva
é empregada em jogos de estratégia e em cenários de tomada de decisão, nos
quais a interação entre dois jogadores é um fator central. Exemplo: xadrez
e outros jogos de tabuleiro.
Esses tipos de busca continuam sendo fundamentais para o desenvolvi-
mento de soluções tecnológicas, contribuindo para reduzir o custo computa-
cional, lidar melhor com problemas em larga escala e criar algoritmos mais
robustos e adaptáveis.
20
Tabela 1: Comparação entre diferentes as buscas não informadas
Critério Largura Profundidade P. Limitada P. Iterativa
Estrutura
usada
Fila (FIFO) Pilha (LIFO) Pilha com li-
mite de profun-
didade
Repete com li-
mites crescen-
tes
Exploração Nı́vel por nı́vel Aprofunda em
um ramo antes
de retroceder
Explora até um
limite definido
Aumenta o
limite gradual-
mente
Memória Alta (guarda
todos os nós do
nı́vel)
Baixa (apenas
o ramo atual)
Moderada
(limitada ao
nı́vel)
Baixa
Completude Completa Não completa
(pode entrar
em loop)
Pode não en-
contrar além
do limite
Completa
Otimidade Ótima (se
custo uni-
forme)
Não garante
solução ótima
Não é ótima Ótima (se
custo uni-
forme)
Aplicações Caminhos
mı́nimos, rote-
amento
Labirintos,
quebra-cabeças
Cenários com
restrição de
profundidade
ou memória;
jogos e es-
tratégias
Igual Limitada
Tabela 2: Vantagens e desvantagens entre as buscas não informadas
Estratégia Vantagens Desvantagens
Busca em Largura Completa (encontra solução
se existir). Ótima se o custo
das ações for uniforme.
Alto consumo de memória
(guarda muitos nós na fila).
Ineficiente em problemas
muito grandes.
Busca em Profundidade Baixo consumo de memória
(usa pilha). Implementação
simples. Útil em cenários
onde a solução está em ra-
mos profundos.
Não é completa (pode en-
trar em loops). Não é ótima
(não garante menor cami-
nho).
Busca em Profundidade
Limitada
Evita loops infinitos. Con-
trola o consumo de recursos.
Pode perder soluções que
estão além do limite. Não
garante otimalidade.
Busca em Profundidade
Iterativa
Completa (encontra solução
se existir). Ótima (quando
o custo é uniforme). Baixo
uso de memória.
Reexploração repetida de
nós em cada iteração. Pode
ser mais lenta em alguns ca-
sos.
21
Tabela 3: Comparação entre estratégias de busca informada
Critério Gulosa A*
Estratégia Expande o nó com menor
heurı́stica h(n)
Expande o nó com menor
f(n) = g(n) + h(n)
Otimidade Não garante solução ótima Garante ótima (se h ad-
missı́vel)
Completude Completa (se espaço finito) Completa (com h admissı́vel)
Complexidade Baixa, rápida execução Exponencial no pior caso, mas
eficiente com boa h
Memória Baixa Moderada (mantém fronteira)
Aplicações Roteamento, otimização local GPS, jogos, planejamento
Tabela 4: Vantagens e Desvantagens da Busca Informada
Algoritmo Vantagens Desvantagens
Busca Gulosa Rápida; simples; explora me-
nos estados; boa para rotea-
mento
Não garante solução ótima; de-
pende da heurı́stica; pode esco-
lher caminhos subótimos
Busca A* Garante solução ótima; efici-
ente; explora menos estados;
baixo consumo de memória;
útil em navegação e jogos
Depende da heurı́stica; pode
ser lenta em espaços grandes
Tabela 5: Comparação entre as buscas competitivas
Critério Min-Max Alpha-Beta Expect Min-
Max
Estratégia Alterna entre
nı́veis de MAX e
MIN
Igual ao Min-Max,
mas elimina ramos
irrelevantes
Igual ao Min-Max,
mas inclui nós
aleatórios (chance)
Otimidade Ótima (se toda a
árvore for explo-
rada)
Ótima (mesmo re-
sultado do Min-
Max)
Ótima em expecta-
tiva
Completude Completo (mas de-
pende da profundi-
dade da árvore)
Completo Completo, mas de-
pende de probabili-
dades
Complexidade Exponencial,
inviável em jogos
grandes
Menos expansões
que Min-Max
Mais custosa, exige
cálculo de expecta-
tivas
Memória Alta (árvore com-
pleta)
Menor que Min-
Max
Alta (árvore + pro-
babilidades)
Aplicações Jogos de soma zero
(ex.: xadrez simpli-
ficado)
Jogos competitivos
(ex.: xadrez, da-
mas)
Jogos com sorte
(ex.: dados, cartas)
22
Tabela 6: Vantagens e Desvantagens da Busca Competitiva
Algoritmo Vantagens Desvantagens
Min-Max Ótimo; simples; adequado para
jogos de soma zero
Exponencial; inviável para jo-
gos grandes
Alpha-Beta Ótimo; elimina ramos irrele-
vantes; mais eficiente que Min-
Max
Complexidade ainda alta; de-
pende da ordem de expansão
Expect Min-Max Considera aleatoriedade; útil
em jogos com sorte; resultado
ótimo em expectativa
Mais custoso; exige cálculo de
probabilidades; alta memória
23
Algoritmos em pseudocódigo
Nesta seção são apresentados os algoritmos fundamentais de busca, es-
critos em pseudocódigo padronizado. O objetivo é fornecer uma descrição
clara, independente de linguagem de programação especı́fica, de modo que o
leitor possa compreender a lógica de cada técnica e posteriormente traduzir
para a linguagem de sua preferência. Está organizado da seguinte forma:
• Algoritmos 1, 2 e 3: implementações iterativa e recursiva das buscas
em largura e em profundidade;
• Algoritmos 4 e 5: variações em profundidade com limite explı́cito
(DLS) e com aprofundamento iterativo (IDDFS);
• Algoritmos 6 e 7: estratégias informadas baseadas em heurı́sticas
(busca gulosa e A*);
• Algoritmo 8 – método clássico de decisão em jogos de dois jogadores
com soma zero;
• Algoritmo 9: versão otimizada do min-max com poda α-β para re-
duzir o espaço de busca;
• Algoritmo 10: generalização para jogos com incerteza, o Expectimi-
nimax, que incorpora nós de chance.
Esses pseudocódigos complementam as tabelas e figuras anteriores, per-
mitindo ao leitor não apenas visualizar a evolução das estruturas de dados,
mas também ter um guia direto de implementação dos métodos estudados.
Algorithm 1 Busca em Largura (BFS) - Iterativo
Require: Grafo G, nó inicial s
1: criar uma fila vazia Q
2: criar um conjunto vazio V isitados
3: enfileirar s em Q
4: marcar s como visitado
5: while Q não está vazia do
6: u ← desenfileirar(Q)
7: processar(u)
8: for cada v em vizinhos(u) do
9: if v /
∈ V isitados then
10: enfileirar(v) em Q
11: marcar v como visitado
12: end if
13: end for
14: end while
24
Algorithm 2 Busca em Profundidade (DFS) - Iterativa
Require: Grafo G, nó inicial s
1: criar uma pilha vazia P
2: criar um conjunto vazio V isitados
3: empilhar s em P
4: marcar s como visitado
5: while P não está vazia do
6: u ← desempilhar(P)
7: processar(u)
8: for cada v em vizinhos(u) do
9: if v /
∈ V isitados then
10: empilhar(v) em P
11: marcar v como visitado
12: end if
13: end for
14: end while
Algorithm 3 Busca em Profundidade (DFS) - Recursiva
Require: Grafo G, nó inicial s, conjunto V isitados
1: if s /
∈ V isitados then
2: marcar s como visitado
3: processar(s)
4: for cada v em vizinhos(s) do
5: if v /
∈ V isitados then
6: DFS(G, v, V isitados)
7: end if
8: end for
9: end if
Algorithm 4 Busca em Profundidade Limitada (DLS) — Recursiva
Require: Grafo G, nó inicial s, limite de profundidade L
1: criar conjunto vazio V isitados
2: chamar DLS(s, L)
3:
4: Procedimento DLS(u, limite):
5: if limite < 0 then
6: return
7: end if
8: marcar u como visitado
9: processar(u)
10: if u é objetivo then
11: retornar solução
12: end if
13: for cada v em vizinhos(u) do
14: if v /
∈ V isitados then
15: chamar DLS(v, limite − 1)
16: end if
17: end for
25
Algorithm 5 Busca em Profundidade Iterativa (IDDFS)
Require: Grafo G, nó inicial s, limite máximo Lmax
1: for L ← 0 até Lmax do
2: criar conjunto vazio V isitados
3: chamar DLS(s, L, V isitados)
4: if foi encontrada solução then
5: return solução
6: end if
7: end for
8:
9: Procedimento DLS(u, limite, V isitados):
10: if limite < 0 then
11: return
12: end if
13: marcar u como visitado
14: processar(u)
15: if u é objetivo then
16: retornar solução
17: end if
18: for cada v em vizinhos(u) do
19: if v /
∈ V isitados then
20: chamar DLS(v, limite − 1, V isitados)
21: end if
22: end for
Algorithm 6 Busca Gulosa (Greedy Search)
Require: Estado inicial s, função heurı́stica h(s)
1: criar conjunto vazio V isitados
2: criar lista Aberto e inserir s
3: marcar s como visitado
4: while Aberto não está vazio do
5: u ← nó de menor h(u) em Aberto
6: remover u de Aberto
7: processar(u)
8: if u é objetivo then
9: retornar solução
10: end if
11: for cada vizinho v de u do
12: if v /
∈ V isitados then
13: adicionar v em Aberto
14: marcar v como visitado
15: end if
16: end for
17: end while
26
Algorithm 7 Busca A*
Require: Estado inicial s, função heurı́stica h(s), custo acumulado g(s)
1: criar conjunto vazio V isitados
2: criar fila de prioridade Aberto e inserir s com prioridade f(s) = g(s) + h(s)
3: marcar s como visitado
4: while Aberto não está vazio do
5: u ← nó com menor f(u) em Aberto
6: remover u de Aberto
7: processar(u)
8: if u é objetivo then
9: retornar solução
10: end if
11: for cada vizinho v de u do
12: g(v) ← g(u) + custo(u, v)
13: f(v) ← g(v) + h(v)
14: if v /
∈ V isitados then
15: adicionar v em Aberto com prioridade f(v)
16: marcar v como visitado
17: end if
18: end for
19: end while
Algorithm 8 Algoritmo Min-Max
Require: Estado inicial s
1: criar conjunto vazio V isitados
2: valor ← MinMax(s)
3:
4: Função MinMax(s):
5: if s é estado terminal then
6: return valor(s)
7: end if
8: if s é a vez do jogador max then
9: melhor ← −∞
10: for cada ação a ∈ A(s) do
11: s′ ← estado resultante de a
12: v ← MinMax(s′)
13: if v > melhor then
14: melhor ← v
15: end if
16: end for
17: return melhor
18: else
19: melhor ← +∞
20: for cada ação a′ ∈ A′(s) do
21: s′ ← estado resultante de a′
22: v ← MinMax(s′)
23: if v < melhor then
24: melhor ← v
25: end if
26: end for
27: return melhor
28: end if
27
Algorithm 9 Poda Alpha-Beta
Require: Nó inicial s, profundidade máxima d, valores iniciais α = −∞, β = +∞
Ensure: Valor da melhor jogada a partir de s
1:
2: Função AlphaBeta(nó, profundidade, α, β, jogadorMax):
3: if profundidade = 0 or nó é terminal then
4: return valor heurı́stico(nó)
5: end if
6: if jogadorMax then
7: valor ← −∞
8: for cada filho em sucessores(nó) do
9: valor ← max(valor, AlphaBeta(filho, profundidade-1, α, β, FALSO))
10: α ← max(α, valor)
11: if α ≥ β then
12: interromper {poda beta}
13: end if
14: end for
15: return valor
16: else
17: valor ← +∞
18: for cada filho em sucessores(nó) do
19: valor ← min(valor, AlphaBeta(filho, profundidade-1, α, β, VERDADEIRO))
20: β ← min(β, valor)
21: if β ≤ α then
22: interromper {poda alfa}
23: end if
24: end for
25: return valor
26: end if
Algorithm 10 Expect Min-Max
Require: Nó inicial s, profundidade máxima d, jogadorMax
Ensure: Valor esperado da melhor jogada a partir de s
1:
2: Função ExpectMinMax(nó, profundidade, jogadorMax):
3: if profundidade = 0 or nó é terminal then
4: return valor heurı́stico(nó)
5: end if
6: if nó é de MAX then
7: valor ← −∞
8: for cada filho em sucessores(nó) do
9: valor ← max(valor, ExpectMinMax(filho, profundidade-1, FALSO))
10: end for
11: return valor
12: else if nó é de MIN then
13: valor ← +∞
14: for cada filho em sucessores(nó) do
15: valor ← min(valor, ExpectMinMax(filho, profundidade-1, VERDADEIRO))
16: end for
17: return valor
18: else { nó de CHANCE }
19: valor ← 0
20: for cada filho em sucessores(nó) do
21: prob ← probabilidade de ocorrência do filho
22: valor ← valor + prob× ExpectMinMax(filho, profundidade-1, jogadorMax)
23: end for
24: return valor
25: end if
28
Filas e pilhas das Figuras
Nesta seção, são apresentadas a dinâmica de funcionamento das estrutu-
ras de dados internas (filas e pilhas) utilizadas durante a execução dos algo-
ritmos de busca. Cada tabela mostra a evolução da estrutura de controle a
cada passo da execução, indicando como os nós são inseridos, removidos e
processados em cada estratégia:
• Tabela 7: descreve a evolução da fila na Busca em Largura, evidenci-
ando a ordem FIFO (first-in, first-out) caracterı́stica desse algoritmo;
• Tabela 8: apresenta o comportamento da pilha na Busca em Profun-
didade, seguindo a polı́tica LIFO (last-in, first-out);
• Tabela 9: mostra a variação da pilha na Busca em Profundidade Li-
mitada, destacando o controle imposto pela profundidade máxima;
• Tabela 10: ilustra a execução do algoritmo Minimax, incluindo a
ordem de expansão dos nós e a propagação dos valores até a raiz;
• Tabela 11: complementa o caso anterior, demonstrando como a poda
Alpha-Beta reduz o espaço de busca ao descartar ramos não promisso-
res;
• Tabela 12: exemplifica o algoritmo Expectiminimax, detalhando o
cálculo de valores esperados nos nós de chance.
Dessa forma, as tabelas associadas às figuras não apenas registram a or-
dem de visita dos nós, mas também evidenciam como a escolha da estrutura
de dados (fila ou pilha) e a natureza do algoritmo (determinı́stico ou pro-
babilı́stico, com ou sem poda) influenciam diretamente na execução e no
resultado final.
Tabela 7: Evolução da fila na busca em largura
Iteração Fila (antes) Nó sendo expandido Descobertos Fila (depois)
0 [ ] – A [A]
1 [A] A B, C [B, C]
2 [B, C] B D, E [C, D, E]
3 [C, D, E] C F, G [D, E, F, G]
4 [D, E, F, G] D – [E, F, G]
5 [E, F, G] E – [F, G]
6 [F, G] F – [G]
7 [G] G – [ ]
29
Tabela 8: Evolução da pilha na busca em profundidade
Iteração Pilha (antes) Nó sendo expandido Descoberto (empilhado) Pilha (depois)
0 [ ] – A [A]
1 [A] A B [A, B]
2 [A, B] B D [A, B, D]
3 [A, B, D] D – (folha) [A, B]
4 [A, B] B E [A, B, E]
5 [A, B, E] E – (folha) [A, B]
6 [A, B] B – (todos vizinhos vistos) [A]
7 [A] A C [A, C]
8 [A, C] C F [A, C, F]
9 [A, C, H] F – (folha) [A, C]
10 [A, C] C G [A, C, G]
11 [A, C, I] G – (folha) [A, C]
12 [A, C] C – (todos vizinhos vistos) [A]
13 [A] A – (todos vizinhos vistos) [ ]
Tabela 9: Tabela da pilha para busca em profundidade com limite L = 2
Passo Nó expandido Pilha antes Pilha depois Observação
1 A [A] [C, B] Limite 2 → A expandido
2 B [C, B] [C, E, D] Filhos de B adicionados
3 D [C, E, D] [C, E] D não tem filhos ou L=2 atingido
4 E [C, E] [C] L=2 atingido para E
5 C [C] [G, F] Expandindo C
6 F [G, F] [G] L=2 atingido
7 G [G] [] L=2 atingido
Tabela 10: Tabela da pilha para Min-Max
Passo Nó expandido Pilha antes Pilha depois Observação
1 A [A] [B, D] Raiz (Max) expandida, filhos B (Min)
e D (Min) adicionados
2 B [B, D] [C] Filho C de B (Max) adicionado à pilha
3 C [C] [] Nó terminal, retorna valor 1
4 B [] [] Min escolhe o menor valor entre filhos
de B → 1
5 D [D] [E, F] D expandido, filhos E (Max) e F (Max)
adicionados
6 E [E, F] [] Nó terminal, retorna valor -1
7 F [F] [] Nó terminal, retorna valor 0
8 D [] [] Min escolhe o menor valor entre filhos
E (-1) e F (0) → -1
9 A [] [] Max escolhe o maior valor entre filhos
B (1) e D (-1) → 1
30
Tabela 11: Tabela da pilha para Poda Alpha-Beta
Passo Nó Pilha antes Pilha depois α β Observação
1 A (Max) [A] [B] −∞ +∞ Raiz expandida, adiciona filho
B
2 B (Min) [B] [D] −∞ +∞ B expandido, chama filho D
3 D (Max) [D] [folhas 3,5] −∞ +∞ Nó expandido, adiciona folhas
3 e 5
4 Folha (3) [3,5] [5] 3 +∞ D atualiza α = 3
5 Folha (5) [5] [] 5 +∞ D atualiza α = 5, retorna 5
6 B (Min) [] [E] −∞ 5 B atualiza β = 5, chama filho
E
7 E (Max) [E] [folhas 6,9] −∞ 5 Nó expandido, adiciona folhas
6 e 9
8 Folha (6) [6,9] [9] 6 5 E atualiza α = 6, como α ≥ β
ocorre poda do 9
9 B (Min) [] [] −∞ 5 B retorna 5 para A
10 A (Max) [] [C] 5 +∞ A atualiza α = 5, chama C
11 C (Min) [C] [F] 5 +∞ C expandido, chama filho F
12 F (Max) [F] [folhas 1,2] 5 +∞ Nó expandido, adiciona folhas
1 e 2
13 Folha (1) [1,2] [2] 5 +∞ F avalia folha 1, α =
max(5, 1) = 5
14 Folha (2) [2] [] 5 +∞ F avalia folha 2, α =
max(5, 2) = 5, retorna 2
15 C (Min) [] [G] 5 2 C atualiza β = 2, como β ≤ α
ocorre poda do nó G
16 A (Max) [] [] 5 +∞ A escolhe max(5, 2) = 5, valor
ótimo encontrado
31
Tabela 12: Tabela da pilha para Expect Min Max
Passo Nó Pilha antes Pilha depois Valor/EV Observação
1 A (Max) [A] [B] – Raiz expandida; empilha o 1º
filho B.
2 B (Chance) [B] [10,10] acumulando Nó de chance (p=0,5,0,5); em-
pilha folhas de B.
3 Folha (10) [10,10] [10] soma=10 Primeira amostra de B: soma
parcial = 10.
4 Folha (10) [10] [] EV (B) = 10 Segunda amostra; EV (B) =
(10+10)/2 = 10. Retorna para
A.
5 A (Max) [] [C] melhor=10 A atualiza melhor=10 e segue
para C.
6 C (Chance) [C] [9,100] acumulando Nó de chance (p=0,5,0,5); em-
pilha folhas de C.
7 Folha (9) [9,100] [100] soma=9 Primeira amostra de C: soma
parcial = 9.
8 Folha (100) [100] [] EV (C) = 54,5 Segunda amostra; EV (C) =
(9 + 100)/2 = 54,5. Retorna
para A.
9 A (Max) [] [] V (A) = 54,5 A escolhe max(10, 54,5) = 54,5
(subárvore de C).
32
Referências
HART, P. E.; NILSSON, N. J.; RAPHAEL, B. A formal basis for the
heuristic determination of minimum cost paths. IEEE Transactions on
Systems Science and Cybernetics, IEEE, v. 4, n. 2, p. 100–107, 1968.
HOPCROFT, J. E.; TARJAN, R. E. Algorithm 447: Efficient algorithms
for graph manipulation. Communications of the ACM, ACM, v. 16, n. 6, p.
372–378, 1973.
HOPCROFT, J. E.; TARJAN, R. E. Efficient algorithms for graph
manipulation. SIAM Journal on Computing, Society for Industrial and
Applied Mathematics, v. 2, n. 3, p. 225–241, 1974.
KNUTH, D. E.; MOORE, R. W. An analysis of alpha-beta pruning.
Artificial Intelligence, Elsevier, v. 6, n. 4, p. 293–326, 1975.
KORF, R. E. Depth-first iterative-deepening: An optimal admissible tree
search. Artificial Intelligence, Elsevier, v. 27, n. 1, p. 97–109, 1985.
KORF, R. E. Iterative-deepening-a*: An optimal admissible tree search.
In: Proceedings of the 9th International Joint Conference on Artificial
Intelligence (IJCAI). [S.l.: s.n.], 1985. p. 1034–1036.
LUGER, G. Inteligencia Artificial. 6. ed. [S.l.]: Pearson Brasil, 2013. ISBN
8581435505.
LUGER, G. F. Artificial Intelligence: Structures and strategies. [S.l.: s.n.],
2008. ISBN 9780321545893.
MOORE, E. F. The shortest path through a maze. In: Proceedings of
the International Symposium on the Theory of Switching. [S.l.]: Harvard
University Press, 1959. p. 285–292.
NEUMANN, J. von. Zur theorie der gesellschaftsspiele. Mathematische
Annalen, Springer, v. 100, p. 295–320, 1928.
NEWELL, A.; SIMON, H. A. Gps, a program that simulates human
thought. In: FEIGENBAUM, E. A.; FELDMAN, J. (Ed.). Computers and
Thought. [S.l.]: McGraw-Hill, 1961. p. 279–293.
NILSSON, N. J. Principles of Artificial Intelligence. [S.l.]: Tioga Publishing,
1980.
33
PAPADIMITRIOU, C. H.; YANNAKAKIS, M. Shortest paths without a
map. Theoretical Computer Science, Elsevier, v. 84, n. 1, p. 127–150, 1991.
RUSSELL, S. J.; NORVIG, P. Artificial intelligence : a modern approach.
[S.l.]: Pearson, 2016. 1132 p. ISBN 1292153962.
SLEATOR, D. D.; TARJAN, R. E. Amortized efficiency of list update and
paging rules. Communications of the ACM, ACM, v. 28, n. 2, p. 202–208,
1985.
UNIVESP. Inteligência Artificial. Disponı́vel em: ⟨https://www.
youtube.com/watch?v=lFIIpCbb6Do&list=PLxI8Can9yAHfY4b6dAzpH5
Z-gz4wM-Jq⟩.
34

Apostila de Resolução de Problemas com Busca

  • 1.
    Universidade Federal deLavras Departamento de Computação Aplicada Apostila de Resolução de Problemas por meio de Busca Prof.ª Elaine Cecı́lia Gatto Agosto 2025
  • 2.
    Universidade Federal deLavras Departamento de Computação Aplicada Apostila de Resolução de Problemas por meio de Busca Profª Elaine Cecı́lia Gatto Agosto 2025
  • 3.
    Conteúdo 1 Introdução 3 2Busca Não Informada 7 2.1 Busca em Largura . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Busca em Profundidade . . . . . . . . . . . . . . . . . . . . . 7 2.3 Busca em Profundidade Limitada . . . . . . . . . . . . . . . . 10 2.4 Busca em Profundidade Iterativa . . . . . . . . . . . . . . . . 10 3 Busca Informada 10 3.1 Busca Gulosa . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2 Busca A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 4 Busca Competitiva 11 4.0.1 Min-Max . . . . . . . . . . . . . . . . . . . . . . . . . . 13 4.0.2 Poda Alpha-Beta . . . . . . . . . . . . . . . . . . . . . 13 4.0.3 Expect Min-Max . . . . . . . . . . . . . . . . . . . . . 18 5 Propriedades e Caracterı́sticas de Buscas 19 5.1 Admissibilidade . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.2 Monotocidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 6 Conclusão 20 Bibliografia 33
  • 4.
    Resumo Esta apostila, elaboradapela Profª Elaine Cecı́lia Gatto, do Departamento de Computação Aplicada, da Universidade Federal de Lavras, em agosto de 2025, foi concebida para ser um guia objetivo e de referência rápida sobre a resolução de problemas através de busca em Inteligência Artificial (IA). O material foi desenvolvido com base em resumos dos estudos da professora sobre o tema, não contendo todos os detalhes. A apostila aborda a busca como uma das abordagens mais antigas e bem estabelecidas para a solução de problemas, como navegação de robôs e jogos, definindo os componentes essenciais para a resolução de problemas. Os algoritmos de busca são di- vididos em duas grandes categorias: Busca Não Informada (busca cega) e Busca Informada (busca heurı́stica). As estratégias de busca não informada, que não usam heurı́sticas, incluem a Busca em Largura (BFS) e a Busca em Profundidade (DFS). A Busca Informada utiliza informações adicionais para guiar a busca em direção a uma solução ideal. Esta categoria abrange a Busca Gulosa, a Busca A* e a Busca Competitiva. A apostila também dis- cute as propriedades dos algoritmos de busca, como completude, otimalidade e complexidade. Keywords: Inteligência Artificial, Busca, Resolução de Problemas, Algorit- mos, Heurı́stica. 1
  • 5.
    LICENÇA Este trabalho estálicenciado sob a Creative Commons Atribuição Não Comercial 4.0 Internacional (CC BY-NC 4.0). Isso significa que você pode copiar, compartilhar e adaptar este material, desde que não seja para fins comerciais e sempre dê crédito ao autor. Para mais detalhes, veja a licença completa: ⟨https://creativecommons.org/licenses/by-nc/4.0/⟩ IMPORTANTE Todo o material desta apostila foi desenvolvido com base em: Neumann (1928), Moore (1959), Newell e Simon (1961), Hart, Nilsson e Raphael (1968), Hopcroft e Tarjan (1973, 1974), Knuth e Moore (1975), Nilsson (1980), Korf (1985a), Sleator e Tarjan (1985), Korf (1985b), Papa- dimitriou e Yannakakis (1991), Luger (2008, 2013), Russell e Norvig (2016), UNIVESP () Se encontrar qualquer erro, entre em contato com elainececilia- gatto@gmail.com 2
  • 6.
    1 Introdução A buscaé um componente da Intelig^ encia Artificial (IA) para so- lucionar problemas de forma inteligente. Nas primeiras duas décas da IA, a representação e a busca eram o foco dos pesquisadores. Portanto, a busca é uma das abordagens mais antigas e bem estabelecidas para solucionar uma ampla variedade de problemas. Como exemplo citam-se navegação de robôs, soluções de jogos (quebra-cabeça, jogo da velha, etc.), otimização de rotas, entre outros. A resolução de problemas por meio da busca visa encontrar soluções para problemas através da exploração sistemática de espaços de estados. Em ou- tras palavras, é necessário encontrar uma sequência de ações que transformem um estado inicial em um estado objetivo. Um problema P pode ser representado como um grafo de espaço de es- tados e, a teoria dos grafos pode ser usada para analisar a estrutura e com- plexidade tanto do problema quanto dos procedimentos empregados. Os componentes da resolução de problemas por meio de busca são: Espaço de Estados (S). S é um conjunto de estados, A é um conjunto de ações. Portanto, o espaço de estados é o conjunto de todos os estados acessı́veis a partir de um estado inicial. Pode ser definido como um grafo, onde cada nó representa um estado e cada aresta representa uma ação, con- forme ilustra a Figura 1. Figura 1: Exemplo em grafo Estados (s). Cada um dos estados é uma representação do mundo do pro- blema que está sendo tratado naquele instante. Os estados mudam conforme ações são aplicadas. 3
  • 7.
    Estado inicial (s0).É o ponto de partia da busca, ou seja, a configuração inicial. Estado objetivo (sf ). É a configuração que satisfaz as condições da solução do problema, onde, s0 ∈ S e sf ∈ S. Ações (a). São transformações que movem o problema de um estado para outro. Correspondem aos passos de um processo de solução do problema. Operadores (σ). É uma função que, dada um estado, retorna o novo estado resultante da aplicação da ação, onde, δ : δ × A → S. Caminhos (c). É uma sequência de ações que transforma o estado inicial em um estado objetivo. Custo C. O custo de um caminho é a soma dos custos individuais das ações que compõem o caminho, onde C : S × A → R Objetivo. Encontrar um caminho do estado inicial s0 até o estado objetivo sf que minimize ou maximize um critério de custo. Portanto, são soluções para uma instância do problema. Teste do Objetivo. Avalia se um estado particular no espaço de estados corresponde ao estado objetivo. Algoritmos. Tendo definido os componentes de 1 à 9, é possı́vel usar dife- rentes algoritmos para explorar o espaço de estados e encontrar um caminho de s0 até sf . Eles podem ser divididos em duas grandes categorias: i) busca não informada, e ii) Busca informada; e serão detalhadas mais adiante. Portanto, a busca em espaço de estados caracteriza a solução de um problema como o processo de procurar um caminho de solução geralmente ótimo, partindo do estado inicial até o estado final. Para ilustrar: como alguém chega da sua casa até o trabalho? Veja como fica: • s0: a pessoa está em casa • sf : a pessoa chegou no trabalho • S: todas as localizações e situações possı́veis • sc: tempo ou distância para cada ação 4
  • 8.
    • δ: alocalização muda conforme as ações • A: carro, apê, ônibus, pare, etc. • h: estima o tempo para chegar no trabalho h representa uma função heurı́stica que pode ser usada no lugar da função de custo e o objetivo é estimar o custo de alcançar o estado objetivo a partir de um estado dado, e é geralmente utilizada em uma busca informada. Outro exemplo clássico que ilustra bem a resolução de problemas por busca é o 8-puzzle. Observe a Figura 2. 1 4 3 7 6 5 8 2 1 2 3 4 5 6 7 8 Figura 2: 8-puzzle O 8-puzzle é um jogo de tabuleiro 3 × 3, onde 8 peças numeradas e uma vazia podem ser movidas em nove espaços. O objetivo é mover as peças de s0 até chegar na configuração de sf , dessa forma definem-se: • S: cada estado (s) é uma configuração especı́fica do quebra cabeça, portanto, o espaço de estados é o conjunto de todas as configurações possı́veis; • A: movimentos da peça vazia, ou seja, mover a peça vazia para cima, baixo, esquerda, ou direita; • δ: dada uma configuração atual e uma ação, a função retorna a nova configuração do quebra cabeça; • C: cada movimento tem um custo, no caso, 1. Por exemplo, mover a peça vazia para baixo tem custo 1. Movimentar a peça vazia simplifica a definição das regras de movimento, entre elas, garantir que a peça vazia não será movida para fora do tabuleiro. A partir de s0 existem quatro estados possı́veis, conforme ilustra a Figura 3. 5
  • 9.
    1 4 3 76 5 8 2 1 3 7 4 6 5 8 2 1 4 3 7 6 5 8 2 1 4 3 7 8 6 5 2 1 4 3 7 6 5 8 2 se o movimento for para cima se o movimento for para a esquerda se o movimento for para baixo se o movimento for para a direita Figura 3: Possı́veis estados conforme movimentação Para cada uma dessas possibilidades de movimentação, existem novos movimentos possı́veis: • s1: {esquerda, abaixo, direita} • s2: {acima, direita, abaixo} • s3: {direita, esquerda, acima} • s4: {acima, esquerda, abaixo} E assim, a cada novo movimento da peça vazia, novas possibilidades sur- gem. Além dos grafos, também é possı́vel representar o problema como uma árvore. O estado inicial é a raiz da árvore e os ramos são desenvolvidos de acordo com as ações. Neste caso, existe o conceito de fronteira, que guarda os nós que devem ser expandidos. Sempre que um nó é retirado da fronteira, ele é testado para verificar se é o estado objetivo. Se ele o é de fato, então, o processo de busca para aı́, caso contrário, o nó é expandido. As estratégias aqui vão variar no momento de percorrer a árvore. O restante desta apostila está organizada da seguinte forma: a Seção 2 apresenta os algoritmos de busca não informada; Seção 3 os algoritmos de busca informada, Seção 5 as propriedades das buscas, a Seção 6 de conclusão, a Seção 6 traz o pseudocódigo de todas as buscas apresentadas nesta apostila, e por fim, a Seção 6 as filas e as pilhas para cada Figura que ilustra as buscas. 6
  • 10.
    2 Busca NãoInformada Busca sem informação, busca não informada, ou ainda busca cega, é uma bordagem na resolução de problemas que não utiliza nenhum conhecimento especı́fico sobre o problema além das regras que definem o espaço de estado e as transições entre eles. Os algoritmos nesta categoria exploram o espaço de forma sistemática, sem usar heurı́stica. As estratégias são a busca em largura, em profundidade, profundidade limitada, profundidade iterativa e serão detalhadas nas subseções a seguir. 2.1 Busca em Largura A busca em largura explora os estados nı́vel por nı́vel, a partir do estado inicial. Ela é completa e ótima quando o custo das ações é uniforme, mas pode ser ineficiente em termos de espaço. Nesse método, utiliza-se uma fila. O algoritmo começa colocando o nó raiz (estado inicial) na fila. Em seguida, os nós vizinhos ou adjacentes ao nó raiz são expandidos antes de avançar para o próximo nı́vel; assim, os nós são sempre expandidos na ordem em que são gerados. Para evitar ciclos e impedir que o mesmo nó seja visitado mais de uma vez, cada nó é marcado como visitado no momento em que é colocado na fila. A busca prossegue até que todos os nós tenham sido visitados ou até que um nó especı́fico seja encontrado. A Figura 4 ilustra a busca em largura em forma de árvore. A Figura 4 ilustra a busca em largura em forma de árvore. Nós brancos significam nós que já foram expandidos, nó amarelo indica o nó que está sendo avaliado naquele momento, nós cinzas e tracejados são nós que ainda não foram avaliados nem expandidos. 2.2 Busca em Profundidade A busca em profundidade explora o máximo possı́vel de cada ramo antes de retroceder. É um tipo de busca que pode ser aplicado, por exemplo, na geração de labirintos ou na solução de quebra-cabeças. Sua implementação é simples e exige menos espaço de memória; porém, pode acabar presa em loops infinitos, não garantir a solução ótima e também não ser completa. Nesse método, utiliza-se uma pilha: o algoritmo começa no nó raiz, visita um nó vizinho ainda não visitado e repete o processo até não haver mais nós disponı́veis naquele ramo. Sempre que um nó é colocado na pilha, ele é marcado como visitado. A Figura 5 ilustra a busca em profundidade em forma de árvore. 7
  • 11.
    A B C D EF G ITERAÇÃO 1 ITERAÇÃO 4 A B C D E F G A B C D E F G ITERAÇÃO 2 A B C D E F G ITERAÇÃO 3 Figura 4: Exemplo de busca em largura A B C D E F G ITERAÇÃO 1 ITERAÇÃO 4 A B C D E H G A B C D E ITERAÇÃO 2 A B C D E ITERAÇÃO 3 F G H I Figura 5: Exemplo de busca em profundidade 8
  • 12.
    A B C D ITERAÇÃO 1ITERAÇÃO 2 F G E A B C D F G E A B C D ITERAÇÃO 3 F G E A B C D FIM F G E LIMITE = 2 Figura 6: Exemplo de busca em profundidade limitada A B C D E Se limite = 0 apenas A é expandido A B C D E A B C D E A B C D E F G F G F G F G Se limite = 1, expande A, visita B e C Se limite = 2, expande A, B, visita D e E Se limite = 3, expande A, B, e C. Visita F e G Figura 7: Exemplo de busca em profundidade iterativa 9
  • 13.
    2.3 Busca emProfundidade Limitada A busca em profundidade limitada é uma variação da busca em profundi- dade que impõe um limite máximo ao número de nı́veis a serem explorados. Se o algoritmo atingir esse limite sem encontrar uma solução, ele interrompe a exploração e retorna para investigar outro ramo. Essa estratégia evita loops infinitos, mas pode levar à perda de soluções que estejam além da pro- fundidade definida. Trata-se de um algoritmo subótimo, que pode ser útil em cenários nos quais há restrições de recursos computacionais. A Figura 6 ilustra a busca em profundidade em forma de árvore. 2.4 Busca em Profundidade Iterativa A busca em profundidade iterativa é uma variação da busca limitada, que combina as vantagens da busca em largura e da busca em profundidade. Ela consome menos memória e garante encontrar soluções rasas. A cada iteração, aplica-se a busca em profundidade limitada com um limite crescente, verificando-se se o nó objetivo foi encontrado. Esse tipo de algoritmo é útil em jogos, estratégias e roteamento, sendo completo, ótimo e com uma gestão de memória eficiente. A Figura 7 ilustra a busca em profundidade iterativa em forma de árvore. 3 Busca Informada A busca com informação, ou busca informada, ou ainda heurı́stica, utili- zada informações adicionais sobre o problema para guiar a busca em direção à solução desejada. A informação é usada para priorizar estados que pa- recem mais promissores, na tentativa de encontrar uma solução ótima. As funções heurı́sticas fornecem estimativas do custo ou distância até o objetivo. Este tipo de algoritmo encontra soluções mais rápido com mais frequência que a busca cega e explora menos estados. Estes algoritmos também utilizam funções para avaliação de nós e expande apenas os nós com melhor avaliação. A Busca Gulosa, Busca A*, e Busca competitiva são algoritmos deste tipo e serão detalhados nas subseções a seguir. 3.1 Busca Gulosa Neste tipo de algoritmo, a decisão em cada passo é baseada apenas na informação local imediata, sem considerar consequências futuras. A busca gulosa sempre escolhe o nó que aparenta ser o melhor naquele momento, com base em alguma heurı́stica, e não realiza retrocessos. O problema desse 10
  • 14.
    método é quepode existir um caminho melhor que não é escolhido porque, naquele instante, a decisão parece pior (mas não o é); por isso, a busca gulosa não garante a solução ótima. Embora o algoritmo não seja ótimo, sua execução é geralmente rápida. Apesar de ser simples de implementar, ele depende fortemente da heurı́stica: se a heurı́stica é boa, o resultado tende a ser bom. Essa abordagem pode ser aplicada em problemas de roteamento e otimização de recursos. A Figura 8 ilustra a busca gulosa. 3.2 Busca A* A Busca A* considera outros tipos de custos e evita expandir caminhos caros. Para isso, utiliza uma função heurı́stica que estima o custo de um nó até o objetivo e avalia quão promissor é explorá-lo. O algoritmo mantém também um custo acumulado, que representa o custo real para alcançar o nó. Uma função de avaliação combina esse custo real com a heurı́stica e prioriza a expansão dos nós de menor custo. Esse método garante uma solução ótima, é eficiente, mas ainda depende da heurı́stica, exigindo relativamente pouco espaço de memória. Pode ser aplicado em sistemas de navegação e jogos. A Figura 9 ilustra a busca A*. 4 Busca Competitiva Os algoritmos desse tipo de busca são amplamente utilizados em IA e teo- ria dos jogos para resolver problemas em que múltiplos agentes, ou jogadores, buscam otimizar suas próprias metas dentro de um ambiente compartilhado. Cada agente considera não apenas suas próprias estratégias e objetivos, mas também os dos demais agentes. Nesse contexto, definem-se: • S: o conjunto de todos os possı́veis estados do ambiente compartilhado; • A: o conjunto de ações que cada agente pode realizar em qualquer estado; • δ: função de transição de estado, que define a probabilidade de passar de um estado para outro dado um conjunto de ações dos agentes; • R: função de recompensa, que mede o sucesso ou a utilidade de um determinado estado ou transição; • σ: estratégias adotadas pelos agentes para maximizar suas recompen- sas, considerando também as estratégias dos outros agentes. 11
  • 15.
    7 3 12 99 85 6 7 3 12 99 8 5 6 7 3 12 99 8 5 6 7 3 12 99 8 5 6 Para chegar à maior soma, em cada etapa, o algoritmo guloso escolherá o que parece ser a escolha imediata ideal, então ele escolherá 12 em vez de 3 na segunda etapa, e não chegará à melhor solução, que contém 99. Figura 8: Exemplo de Busca Gulosa A D B E C F 2 1 1 6 3 9 99 6 11 7 1 0 A D B E C F 2 1 1 6 3 9 99 6 11 7 1 0 A D B E C F 2 1 1 6 3 9 6 11 7 1 0 A D B E C F 2 1 1 6 3 9 99 6 11 7 1 0 Figura 9: Exemplo de Busca A* 12
  • 16.
    Nas subseções seguintesserão explicadas, portanto, as estratégias de min-max e alfa-beta, que são formas de busca competitiva. 4.0.1 Min-Max O algoritmo Min-Max é utilizado em jogos de dois jogadores com soma zero, nos quais um deles tenta maximizar sua recompensa enquanto o outro busca minimizá-la. Em termos simples, trata-se de escolher a jogada com o melhor retorno possı́vel, supondo que o oponente também fará sempre a melhor jogada possı́vel. A representação desse processo é feita por meio de uma árvore, onde cada nı́vel corresponde às jogadas possı́veis. Para um estado do jogo s, o valor V (s) é definido da seguinte forma: • Se s é um estado terminal, então V (s) = valor do estado; • Se s é a vez do jogador max, então V (s) = maxa∈A V (s′ ); • Se s é a vez do jogador min, então V (s) = mina′∈A′ V (s′ ); onde A é o conjunto de ações de max, A′ o conjunto de ações de min, e s′ é o estado resultante da aplicação de uma ação. Cada estado terminal recebe um valor de utilidade, por exemplo: win = +1, loss = −1 e tie = 0. Esses valores são então propagados pela árvore: nos nós de min, escolhe-se o menor valor entre os filhos; nos nós de max, o maior valor. A jogada ótima é determinada na raiz, onde o jogador max seleciona a ação que leva ao nó filho com valor máximo. O algoritmo é completo e sempre encontra a solução ótima, assumindo que toda a árvore pode ser explorada. Em jogos complexos como o xadrez, que possui aproximadamente 1056 possibilidades, torna-se inviável explorar a árvore inteira, sendo necessário considerar apenas algumas jogadas à frente. A Figura 10 ilustra a busca min-max. 4.0.2 Poda Alpha-Beta Este algoritmo aprimora o min-max ao reduzir o número de nós avaliados na árvore, evitando a expansão daqueles que não afetam a decisão final. Dessa forma, ele encontra a mesma decisão correta que o min-max, mas sem precisar examinar todos os nós. Por isso recebe o nome de poda: elimina ramos da árvore que não influenciam o resultado final. Nesse contexto, α representa o limite inferior e β o limite superior para a avaliação de um nó. Em outras palavras, α é o melhor valor encontrado até o momento para o max, e β o melhor para o min. 13
  • 17.
    MAXIMIZER MINIMIZER MAXIMIZER MINIMIZER A B C D EF G H I J K L M N O -1 4 2 6 -3 -5 0 7 A -1 4 2 6 -3 -5 0 7 4 6 -3 7 B C D E F G H I J K L M N O MAXIMIZER MINIMIZER MAXIMIZER MINIMIZER MAXIMIZER MINIMIZER MAXIMIZER MINIMIZER A B C D E F G H I J K L M N O -1 4 2 6 -3 -5 0 7 4 -3 4 6 -3 7 MAXIMIZER MINIMIZER MAXIMIZER MINIMIZER A B C D E F G H I J K L M N O -1 4 2 6 -3 -5 0 7 4 4 6 -3 7 4 Figura 10: Exemplo de busca competitiva min-max 14
  • 18.
    MAXIMIZER MAXIMIZER MINIMIZER A B C D EF G 3 5 6 9 1 2 0 1 A B C D E F G 3 5 6 9 1 2 0 -1 MAXIMIZER MAXIMIZER MINIMIZER MAXIMIZER MAXIMIZER MINIMIZER A B C D E F G 3 5 6 9 1 2 0 1 MAXIMIZER MAXIMIZER MINIMIZER A B C D E F G 3 5 6 9 1 2 0 1 Figura 11: Exemplo de busca com poda alfa-beta Parte 1 15
  • 19.
    MAXIMIZER MAXIMIZER MINIMIZER A B C D EF G 3 5 6 9 1 2 0 1 MAXIMIZER MAXIMIZER MINIMIZER A B C D E F G 3 5 6 9 1 2 0 1 MAXIMIZER MAXIMIZER MINIMIZER A B C D E F G 3 5 6 9 1 2 0 1 = Poda o 9! MAXIMIZER MAXIMIZER MINIMIZER A B C D E F G 3 5 6 9 1 2 0 1 = Poda o 9! = = = Figura 12: Exemplo de busca com poda alfa-beta Parte 2 16
  • 20.
    A poda ocorrepara o max quando o valor de um nó é maior ou igual a β, ou seja, o nó é ignorado pois o min já possui uma opção melhor. Já para o min, a poda acontece quando o valor do nó é menor ou igual a α, significando que esse nó pode ser descartado porque o max já tem uma alternativa superior. Assim, o algoritmo diminui a complexidade e se mostra bastante eficiente, embora sua performance dependa da ordem em que os nós são analisados. As Figuras 11 e 12 ilustram a busca com poda alfa-beta. Análise e valores completos da árvore min-max com intervalos [α, β] das Figuras 11 e 12. 1. Raiz A (MAX) • Inicial: [−∞, +∞]. • Depois de explorar B, atualiza α = 5. • Fica: [5, +∞]. 2. Nó B (MIN) • Recebe de A: [−∞, +∞]. • Depois de avaliar D=5, atualiza β = 5. • Fica: [−∞, 5]. • Nó D (MAX) – Recebe de B: [−∞, +∞]. – Avalia folha 3 ⇒ α = 3. – Avalia folha 5 ⇒ α = 5. – Retorna 5. – Fica: [5, +∞]. • Nó E (MAX) – Recebe de B: [−∞, 5]. – Avalia folha 6 ⇒ α = 6. – Como α = 6 ≥ β = 5, poda o filho 9. – Retorna 6, mas B mantém β = 5. – Fica: [6, 5] (indica poda). 3. Nó C (MIN) • Recebe de A: [5, +∞]. • Após F=2, atualiza β = 2. 17
  • 21.
    • Fica: [5,2] ⇒ poda G. • Nó F (MAX) – Recebe de C: [5, +∞]. – Avalia folha 1 ⇒ α = max(5, 1) = 5. – Avalia folha 2 ⇒ α = max(5, 2) = 5. – Retorna 2 para C. – Fica: [5, +∞]. • Nó G (MAX), podado – Receberia de C: [5, 2]. – Mas como já temos β = 2 ≤ α = 5, é cortado. A B C 10 10 9 100 A B C 10 10 9 100 (10+10)/2 = 10 A B C 10 10 9 100 INICIO Para o minimiador, faz sentido ir para a esquerda primeiro! 10 CHANCE! (100+9)/2 = 54.5 Mas e se houver a possibilidade de o minimizador cometer um erro? Ir para a direita pode parecer mais atraente ou resultar em uma solução melhor! A B C 10 10 9 100 10 54.5 O nó maximizador escolhe a subárvore correta para maximizar as utilidades esperadas. Figura 13: Exemplo de busca expect min-max. 4.0.3 Expect Min-Max Este algoritmo incorpora incerteza e aleatoriedade, sendo aplicado em cenários onde as ações dos jogadores têm caráter probabilı́stico. A ideia é calcular a expectativa do valor de um estado, levando em conta possı́veis resultados aleatórios. Assim, max busca maximizar o próprio ganho, min tenta minimizar o ganho de max, e alt introduz a incerteza no processo. A árvore é construı́da a partir do estado inicial do jogo, incluindo os nı́veis de decisão dos jogadores. Para cada estado terminal são atribuı́dos valores 18
  • 22.
    de utilidade, quedepois são propagados pelos nós internos. A diferença aqui está no cálculo da expectativa: os valores dos filhos de um nó são combinados segundo as probabilidades dos eventos aleatórios. Por fim, o max seleciona a jogada que oferece a melhor expectativa de ganho, considerando tanto as escolhas adversárias quanto os efeitos do acaso. A Figura 13 ilustra esta busca. 5 Propriedades e Caracterı́sticas de Buscas Um algoritmo é completo se ele garante encontrar uma solução se ela existir. Um algoritmo é ótimo se encontra a solução de menor custo ou caminho. Um algoritmo com complexidade temporal menor é mais eficiente pois executa em menos tempo uma solução complexa. O espaço de memória necessário para executar o algoritmo também é analisado como complexidade espacial: maior espaço, mais memória. Um algoritmo pode encontrar uma ótima solução em uma região especı́fica do espaço de estados (local) ou uma solução ótima global. Por fim, à capacidade do algoritmo de buscar soluções de forma rápida e eficaz é dado o nome de eficiência. A Tabela 1 apresenta um comparativo entre os quatro tipos de buscas não informada, a Tabela 3 apresenta um comparativo entre os dois tipos de buscas informada, a Tabela 5 apresenta um comparativo entre os três tipos de busca competitiva, a Tabela 4 apresenta as vantagens e desvantagens entre tipos de buscas informada, a Tabela 4 apresenta as vantagens e desvantagens entre tipos de buscas não informada, e por fim, a Tabela 6 apresenta as vantagens e desvantagens entre os tipos de buscas competitivas. 5.1 Admissibilidade A admissibilidade nos permite entender em que sentido uma heurı́stica é melhor do que outra, ou seja, reflete o grau de informação que a heurı́stica fornece. Um algoritmo de busca é considerado admissı́vel se ele garantir a descoberta de um caminho mı́nimo até uma solução, sempre que esta exista, como acontece na busca em largura. Esse tipo de heurı́stica nunca superes- tima o custo real para alcançar o objetivo, por isso é chamada de otimista. Em outras palavras, o valor da heurı́stica para um nó deve ser sempre me- nor ou igual ao custo real do caminho mais curto do nó até o objetivo: h(n) ≤ h∗ (n) 19
  • 23.
    5.2 Monotocidade Quando umestado é descoberto usando busca heurı́stica, existe a garantia de que o mesmo estado não será descoberto novamente com um custo menor? Uma heurı́stica é chamada de monotônica se, para qualquer nó n e qualquer sucessor n′ gerado por uma ação a, a diferença entre as heurı́sticas satisfaz h(n) ≤ c(n, a, n′ ) + h(n′ ), ou seja, o valor da heurı́stica nunca supera o custo real para alcançar o sucessor mais a heurı́stica desse sucessor. Dessa forma, em qualquer ponto do espaço de busca, a heurı́stica é localmente consistente, garantindo coerência na exploração dos nós. 6 Conclusão A resolução de problemas por meio de busca oferece uma variedade de métodos e algoritmos para tratar problemas complexos em diferentes domı́nios. A escolha do algoritmo adequado depende das caracterı́sticas do problema, do tamanho do espaço de busca, do grau de informação disponı́vel e também do nı́vel de incerteza envolvido. A busca não informada é amplamente aplicada em problemas de na- vegação e exploração, especialmente quando o espaço pode ser grande e complexo. Exemplos: mapas, labirintos, sistemas de transporte, jogos de tabuleiro, puzzles e sudoku. Já a busca informada é indicada para situações em que informações adicionais podem guiar o processo de maneira mais efi- ciente. Exemplos: GPS, jogos e labirintos. Por sua vez, a busca competitiva é empregada em jogos de estratégia e em cenários de tomada de decisão, nos quais a interação entre dois jogadores é um fator central. Exemplo: xadrez e outros jogos de tabuleiro. Esses tipos de busca continuam sendo fundamentais para o desenvolvi- mento de soluções tecnológicas, contribuindo para reduzir o custo computa- cional, lidar melhor com problemas em larga escala e criar algoritmos mais robustos e adaptáveis. 20
  • 24.
    Tabela 1: Comparaçãoentre diferentes as buscas não informadas Critério Largura Profundidade P. Limitada P. Iterativa Estrutura usada Fila (FIFO) Pilha (LIFO) Pilha com li- mite de profun- didade Repete com li- mites crescen- tes Exploração Nı́vel por nı́vel Aprofunda em um ramo antes de retroceder Explora até um limite definido Aumenta o limite gradual- mente Memória Alta (guarda todos os nós do nı́vel) Baixa (apenas o ramo atual) Moderada (limitada ao nı́vel) Baixa Completude Completa Não completa (pode entrar em loop) Pode não en- contrar além do limite Completa Otimidade Ótima (se custo uni- forme) Não garante solução ótima Não é ótima Ótima (se custo uni- forme) Aplicações Caminhos mı́nimos, rote- amento Labirintos, quebra-cabeças Cenários com restrição de profundidade ou memória; jogos e es- tratégias Igual Limitada Tabela 2: Vantagens e desvantagens entre as buscas não informadas Estratégia Vantagens Desvantagens Busca em Largura Completa (encontra solução se existir). Ótima se o custo das ações for uniforme. Alto consumo de memória (guarda muitos nós na fila). Ineficiente em problemas muito grandes. Busca em Profundidade Baixo consumo de memória (usa pilha). Implementação simples. Útil em cenários onde a solução está em ra- mos profundos. Não é completa (pode en- trar em loops). Não é ótima (não garante menor cami- nho). Busca em Profundidade Limitada Evita loops infinitos. Con- trola o consumo de recursos. Pode perder soluções que estão além do limite. Não garante otimalidade. Busca em Profundidade Iterativa Completa (encontra solução se existir). Ótima (quando o custo é uniforme). Baixo uso de memória. Reexploração repetida de nós em cada iteração. Pode ser mais lenta em alguns ca- sos. 21
  • 25.
    Tabela 3: Comparaçãoentre estratégias de busca informada Critério Gulosa A* Estratégia Expande o nó com menor heurı́stica h(n) Expande o nó com menor f(n) = g(n) + h(n) Otimidade Não garante solução ótima Garante ótima (se h ad- missı́vel) Completude Completa (se espaço finito) Completa (com h admissı́vel) Complexidade Baixa, rápida execução Exponencial no pior caso, mas eficiente com boa h Memória Baixa Moderada (mantém fronteira) Aplicações Roteamento, otimização local GPS, jogos, planejamento Tabela 4: Vantagens e Desvantagens da Busca Informada Algoritmo Vantagens Desvantagens Busca Gulosa Rápida; simples; explora me- nos estados; boa para rotea- mento Não garante solução ótima; de- pende da heurı́stica; pode esco- lher caminhos subótimos Busca A* Garante solução ótima; efici- ente; explora menos estados; baixo consumo de memória; útil em navegação e jogos Depende da heurı́stica; pode ser lenta em espaços grandes Tabela 5: Comparação entre as buscas competitivas Critério Min-Max Alpha-Beta Expect Min- Max Estratégia Alterna entre nı́veis de MAX e MIN Igual ao Min-Max, mas elimina ramos irrelevantes Igual ao Min-Max, mas inclui nós aleatórios (chance) Otimidade Ótima (se toda a árvore for explo- rada) Ótima (mesmo re- sultado do Min- Max) Ótima em expecta- tiva Completude Completo (mas de- pende da profundi- dade da árvore) Completo Completo, mas de- pende de probabili- dades Complexidade Exponencial, inviável em jogos grandes Menos expansões que Min-Max Mais custosa, exige cálculo de expecta- tivas Memória Alta (árvore com- pleta) Menor que Min- Max Alta (árvore + pro- babilidades) Aplicações Jogos de soma zero (ex.: xadrez simpli- ficado) Jogos competitivos (ex.: xadrez, da- mas) Jogos com sorte (ex.: dados, cartas) 22
  • 26.
    Tabela 6: Vantagense Desvantagens da Busca Competitiva Algoritmo Vantagens Desvantagens Min-Max Ótimo; simples; adequado para jogos de soma zero Exponencial; inviável para jo- gos grandes Alpha-Beta Ótimo; elimina ramos irrele- vantes; mais eficiente que Min- Max Complexidade ainda alta; de- pende da ordem de expansão Expect Min-Max Considera aleatoriedade; útil em jogos com sorte; resultado ótimo em expectativa Mais custoso; exige cálculo de probabilidades; alta memória 23
  • 27.
    Algoritmos em pseudocódigo Nestaseção são apresentados os algoritmos fundamentais de busca, es- critos em pseudocódigo padronizado. O objetivo é fornecer uma descrição clara, independente de linguagem de programação especı́fica, de modo que o leitor possa compreender a lógica de cada técnica e posteriormente traduzir para a linguagem de sua preferência. Está organizado da seguinte forma: • Algoritmos 1, 2 e 3: implementações iterativa e recursiva das buscas em largura e em profundidade; • Algoritmos 4 e 5: variações em profundidade com limite explı́cito (DLS) e com aprofundamento iterativo (IDDFS); • Algoritmos 6 e 7: estratégias informadas baseadas em heurı́sticas (busca gulosa e A*); • Algoritmo 8 – método clássico de decisão em jogos de dois jogadores com soma zero; • Algoritmo 9: versão otimizada do min-max com poda α-β para re- duzir o espaço de busca; • Algoritmo 10: generalização para jogos com incerteza, o Expectimi- nimax, que incorpora nós de chance. Esses pseudocódigos complementam as tabelas e figuras anteriores, per- mitindo ao leitor não apenas visualizar a evolução das estruturas de dados, mas também ter um guia direto de implementação dos métodos estudados. Algorithm 1 Busca em Largura (BFS) - Iterativo Require: Grafo G, nó inicial s 1: criar uma fila vazia Q 2: criar um conjunto vazio V isitados 3: enfileirar s em Q 4: marcar s como visitado 5: while Q não está vazia do 6: u ← desenfileirar(Q) 7: processar(u) 8: for cada v em vizinhos(u) do 9: if v / ∈ V isitados then 10: enfileirar(v) em Q 11: marcar v como visitado 12: end if 13: end for 14: end while 24
  • 28.
    Algorithm 2 Buscaem Profundidade (DFS) - Iterativa Require: Grafo G, nó inicial s 1: criar uma pilha vazia P 2: criar um conjunto vazio V isitados 3: empilhar s em P 4: marcar s como visitado 5: while P não está vazia do 6: u ← desempilhar(P) 7: processar(u) 8: for cada v em vizinhos(u) do 9: if v / ∈ V isitados then 10: empilhar(v) em P 11: marcar v como visitado 12: end if 13: end for 14: end while Algorithm 3 Busca em Profundidade (DFS) - Recursiva Require: Grafo G, nó inicial s, conjunto V isitados 1: if s / ∈ V isitados then 2: marcar s como visitado 3: processar(s) 4: for cada v em vizinhos(s) do 5: if v / ∈ V isitados then 6: DFS(G, v, V isitados) 7: end if 8: end for 9: end if Algorithm 4 Busca em Profundidade Limitada (DLS) — Recursiva Require: Grafo G, nó inicial s, limite de profundidade L 1: criar conjunto vazio V isitados 2: chamar DLS(s, L) 3: 4: Procedimento DLS(u, limite): 5: if limite < 0 then 6: return 7: end if 8: marcar u como visitado 9: processar(u) 10: if u é objetivo then 11: retornar solução 12: end if 13: for cada v em vizinhos(u) do 14: if v / ∈ V isitados then 15: chamar DLS(v, limite − 1) 16: end if 17: end for 25
  • 29.
    Algorithm 5 Buscaem Profundidade Iterativa (IDDFS) Require: Grafo G, nó inicial s, limite máximo Lmax 1: for L ← 0 até Lmax do 2: criar conjunto vazio V isitados 3: chamar DLS(s, L, V isitados) 4: if foi encontrada solução then 5: return solução 6: end if 7: end for 8: 9: Procedimento DLS(u, limite, V isitados): 10: if limite < 0 then 11: return 12: end if 13: marcar u como visitado 14: processar(u) 15: if u é objetivo then 16: retornar solução 17: end if 18: for cada v em vizinhos(u) do 19: if v / ∈ V isitados then 20: chamar DLS(v, limite − 1, V isitados) 21: end if 22: end for Algorithm 6 Busca Gulosa (Greedy Search) Require: Estado inicial s, função heurı́stica h(s) 1: criar conjunto vazio V isitados 2: criar lista Aberto e inserir s 3: marcar s como visitado 4: while Aberto não está vazio do 5: u ← nó de menor h(u) em Aberto 6: remover u de Aberto 7: processar(u) 8: if u é objetivo then 9: retornar solução 10: end if 11: for cada vizinho v de u do 12: if v / ∈ V isitados then 13: adicionar v em Aberto 14: marcar v como visitado 15: end if 16: end for 17: end while 26
  • 30.
    Algorithm 7 BuscaA* Require: Estado inicial s, função heurı́stica h(s), custo acumulado g(s) 1: criar conjunto vazio V isitados 2: criar fila de prioridade Aberto e inserir s com prioridade f(s) = g(s) + h(s) 3: marcar s como visitado 4: while Aberto não está vazio do 5: u ← nó com menor f(u) em Aberto 6: remover u de Aberto 7: processar(u) 8: if u é objetivo then 9: retornar solução 10: end if 11: for cada vizinho v de u do 12: g(v) ← g(u) + custo(u, v) 13: f(v) ← g(v) + h(v) 14: if v / ∈ V isitados then 15: adicionar v em Aberto com prioridade f(v) 16: marcar v como visitado 17: end if 18: end for 19: end while Algorithm 8 Algoritmo Min-Max Require: Estado inicial s 1: criar conjunto vazio V isitados 2: valor ← MinMax(s) 3: 4: Função MinMax(s): 5: if s é estado terminal then 6: return valor(s) 7: end if 8: if s é a vez do jogador max then 9: melhor ← −∞ 10: for cada ação a ∈ A(s) do 11: s′ ← estado resultante de a 12: v ← MinMax(s′) 13: if v > melhor then 14: melhor ← v 15: end if 16: end for 17: return melhor 18: else 19: melhor ← +∞ 20: for cada ação a′ ∈ A′(s) do 21: s′ ← estado resultante de a′ 22: v ← MinMax(s′) 23: if v < melhor then 24: melhor ← v 25: end if 26: end for 27: return melhor 28: end if 27
  • 31.
    Algorithm 9 PodaAlpha-Beta Require: Nó inicial s, profundidade máxima d, valores iniciais α = −∞, β = +∞ Ensure: Valor da melhor jogada a partir de s 1: 2: Função AlphaBeta(nó, profundidade, α, β, jogadorMax): 3: if profundidade = 0 or nó é terminal then 4: return valor heurı́stico(nó) 5: end if 6: if jogadorMax then 7: valor ← −∞ 8: for cada filho em sucessores(nó) do 9: valor ← max(valor, AlphaBeta(filho, profundidade-1, α, β, FALSO)) 10: α ← max(α, valor) 11: if α ≥ β then 12: interromper {poda beta} 13: end if 14: end for 15: return valor 16: else 17: valor ← +∞ 18: for cada filho em sucessores(nó) do 19: valor ← min(valor, AlphaBeta(filho, profundidade-1, α, β, VERDADEIRO)) 20: β ← min(β, valor) 21: if β ≤ α then 22: interromper {poda alfa} 23: end if 24: end for 25: return valor 26: end if Algorithm 10 Expect Min-Max Require: Nó inicial s, profundidade máxima d, jogadorMax Ensure: Valor esperado da melhor jogada a partir de s 1: 2: Função ExpectMinMax(nó, profundidade, jogadorMax): 3: if profundidade = 0 or nó é terminal then 4: return valor heurı́stico(nó) 5: end if 6: if nó é de MAX then 7: valor ← −∞ 8: for cada filho em sucessores(nó) do 9: valor ← max(valor, ExpectMinMax(filho, profundidade-1, FALSO)) 10: end for 11: return valor 12: else if nó é de MIN then 13: valor ← +∞ 14: for cada filho em sucessores(nó) do 15: valor ← min(valor, ExpectMinMax(filho, profundidade-1, VERDADEIRO)) 16: end for 17: return valor 18: else { nó de CHANCE } 19: valor ← 0 20: for cada filho em sucessores(nó) do 21: prob ← probabilidade de ocorrência do filho 22: valor ← valor + prob× ExpectMinMax(filho, profundidade-1, jogadorMax) 23: end for 24: return valor 25: end if 28
  • 32.
    Filas e pilhasdas Figuras Nesta seção, são apresentadas a dinâmica de funcionamento das estrutu- ras de dados internas (filas e pilhas) utilizadas durante a execução dos algo- ritmos de busca. Cada tabela mostra a evolução da estrutura de controle a cada passo da execução, indicando como os nós são inseridos, removidos e processados em cada estratégia: • Tabela 7: descreve a evolução da fila na Busca em Largura, evidenci- ando a ordem FIFO (first-in, first-out) caracterı́stica desse algoritmo; • Tabela 8: apresenta o comportamento da pilha na Busca em Profun- didade, seguindo a polı́tica LIFO (last-in, first-out); • Tabela 9: mostra a variação da pilha na Busca em Profundidade Li- mitada, destacando o controle imposto pela profundidade máxima; • Tabela 10: ilustra a execução do algoritmo Minimax, incluindo a ordem de expansão dos nós e a propagação dos valores até a raiz; • Tabela 11: complementa o caso anterior, demonstrando como a poda Alpha-Beta reduz o espaço de busca ao descartar ramos não promisso- res; • Tabela 12: exemplifica o algoritmo Expectiminimax, detalhando o cálculo de valores esperados nos nós de chance. Dessa forma, as tabelas associadas às figuras não apenas registram a or- dem de visita dos nós, mas também evidenciam como a escolha da estrutura de dados (fila ou pilha) e a natureza do algoritmo (determinı́stico ou pro- babilı́stico, com ou sem poda) influenciam diretamente na execução e no resultado final. Tabela 7: Evolução da fila na busca em largura Iteração Fila (antes) Nó sendo expandido Descobertos Fila (depois) 0 [ ] – A [A] 1 [A] A B, C [B, C] 2 [B, C] B D, E [C, D, E] 3 [C, D, E] C F, G [D, E, F, G] 4 [D, E, F, G] D – [E, F, G] 5 [E, F, G] E – [F, G] 6 [F, G] F – [G] 7 [G] G – [ ] 29
  • 33.
    Tabela 8: Evoluçãoda pilha na busca em profundidade Iteração Pilha (antes) Nó sendo expandido Descoberto (empilhado) Pilha (depois) 0 [ ] – A [A] 1 [A] A B [A, B] 2 [A, B] B D [A, B, D] 3 [A, B, D] D – (folha) [A, B] 4 [A, B] B E [A, B, E] 5 [A, B, E] E – (folha) [A, B] 6 [A, B] B – (todos vizinhos vistos) [A] 7 [A] A C [A, C] 8 [A, C] C F [A, C, F] 9 [A, C, H] F – (folha) [A, C] 10 [A, C] C G [A, C, G] 11 [A, C, I] G – (folha) [A, C] 12 [A, C] C – (todos vizinhos vistos) [A] 13 [A] A – (todos vizinhos vistos) [ ] Tabela 9: Tabela da pilha para busca em profundidade com limite L = 2 Passo Nó expandido Pilha antes Pilha depois Observação 1 A [A] [C, B] Limite 2 → A expandido 2 B [C, B] [C, E, D] Filhos de B adicionados 3 D [C, E, D] [C, E] D não tem filhos ou L=2 atingido 4 E [C, E] [C] L=2 atingido para E 5 C [C] [G, F] Expandindo C 6 F [G, F] [G] L=2 atingido 7 G [G] [] L=2 atingido Tabela 10: Tabela da pilha para Min-Max Passo Nó expandido Pilha antes Pilha depois Observação 1 A [A] [B, D] Raiz (Max) expandida, filhos B (Min) e D (Min) adicionados 2 B [B, D] [C] Filho C de B (Max) adicionado à pilha 3 C [C] [] Nó terminal, retorna valor 1 4 B [] [] Min escolhe o menor valor entre filhos de B → 1 5 D [D] [E, F] D expandido, filhos E (Max) e F (Max) adicionados 6 E [E, F] [] Nó terminal, retorna valor -1 7 F [F] [] Nó terminal, retorna valor 0 8 D [] [] Min escolhe o menor valor entre filhos E (-1) e F (0) → -1 9 A [] [] Max escolhe o maior valor entre filhos B (1) e D (-1) → 1 30
  • 34.
    Tabela 11: Tabelada pilha para Poda Alpha-Beta Passo Nó Pilha antes Pilha depois α β Observação 1 A (Max) [A] [B] −∞ +∞ Raiz expandida, adiciona filho B 2 B (Min) [B] [D] −∞ +∞ B expandido, chama filho D 3 D (Max) [D] [folhas 3,5] −∞ +∞ Nó expandido, adiciona folhas 3 e 5 4 Folha (3) [3,5] [5] 3 +∞ D atualiza α = 3 5 Folha (5) [5] [] 5 +∞ D atualiza α = 5, retorna 5 6 B (Min) [] [E] −∞ 5 B atualiza β = 5, chama filho E 7 E (Max) [E] [folhas 6,9] −∞ 5 Nó expandido, adiciona folhas 6 e 9 8 Folha (6) [6,9] [9] 6 5 E atualiza α = 6, como α ≥ β ocorre poda do 9 9 B (Min) [] [] −∞ 5 B retorna 5 para A 10 A (Max) [] [C] 5 +∞ A atualiza α = 5, chama C 11 C (Min) [C] [F] 5 +∞ C expandido, chama filho F 12 F (Max) [F] [folhas 1,2] 5 +∞ Nó expandido, adiciona folhas 1 e 2 13 Folha (1) [1,2] [2] 5 +∞ F avalia folha 1, α = max(5, 1) = 5 14 Folha (2) [2] [] 5 +∞ F avalia folha 2, α = max(5, 2) = 5, retorna 2 15 C (Min) [] [G] 5 2 C atualiza β = 2, como β ≤ α ocorre poda do nó G 16 A (Max) [] [] 5 +∞ A escolhe max(5, 2) = 5, valor ótimo encontrado 31
  • 35.
    Tabela 12: Tabelada pilha para Expect Min Max Passo Nó Pilha antes Pilha depois Valor/EV Observação 1 A (Max) [A] [B] – Raiz expandida; empilha o 1º filho B. 2 B (Chance) [B] [10,10] acumulando Nó de chance (p=0,5,0,5); em- pilha folhas de B. 3 Folha (10) [10,10] [10] soma=10 Primeira amostra de B: soma parcial = 10. 4 Folha (10) [10] [] EV (B) = 10 Segunda amostra; EV (B) = (10+10)/2 = 10. Retorna para A. 5 A (Max) [] [C] melhor=10 A atualiza melhor=10 e segue para C. 6 C (Chance) [C] [9,100] acumulando Nó de chance (p=0,5,0,5); em- pilha folhas de C. 7 Folha (9) [9,100] [100] soma=9 Primeira amostra de C: soma parcial = 9. 8 Folha (100) [100] [] EV (C) = 54,5 Segunda amostra; EV (C) = (9 + 100)/2 = 54,5. Retorna para A. 9 A (Max) [] [] V (A) = 54,5 A escolhe max(10, 54,5) = 54,5 (subárvore de C). 32
  • 36.
    Referências HART, P. E.;NILSSON, N. J.; RAPHAEL, B. A formal basis for the heuristic determination of minimum cost paths. IEEE Transactions on Systems Science and Cybernetics, IEEE, v. 4, n. 2, p. 100–107, 1968. HOPCROFT, J. E.; TARJAN, R. E. Algorithm 447: Efficient algorithms for graph manipulation. Communications of the ACM, ACM, v. 16, n. 6, p. 372–378, 1973. HOPCROFT, J. E.; TARJAN, R. E. Efficient algorithms for graph manipulation. SIAM Journal on Computing, Society for Industrial and Applied Mathematics, v. 2, n. 3, p. 225–241, 1974. KNUTH, D. E.; MOORE, R. W. An analysis of alpha-beta pruning. Artificial Intelligence, Elsevier, v. 6, n. 4, p. 293–326, 1975. KORF, R. E. Depth-first iterative-deepening: An optimal admissible tree search. Artificial Intelligence, Elsevier, v. 27, n. 1, p. 97–109, 1985. KORF, R. E. Iterative-deepening-a*: An optimal admissible tree search. In: Proceedings of the 9th International Joint Conference on Artificial Intelligence (IJCAI). [S.l.: s.n.], 1985. p. 1034–1036. LUGER, G. Inteligencia Artificial. 6. ed. [S.l.]: Pearson Brasil, 2013. ISBN 8581435505. LUGER, G. F. Artificial Intelligence: Structures and strategies. [S.l.: s.n.], 2008. ISBN 9780321545893. MOORE, E. F. The shortest path through a maze. In: Proceedings of the International Symposium on the Theory of Switching. [S.l.]: Harvard University Press, 1959. p. 285–292. NEUMANN, J. von. Zur theorie der gesellschaftsspiele. Mathematische Annalen, Springer, v. 100, p. 295–320, 1928. NEWELL, A.; SIMON, H. A. Gps, a program that simulates human thought. In: FEIGENBAUM, E. A.; FELDMAN, J. (Ed.). Computers and Thought. [S.l.]: McGraw-Hill, 1961. p. 279–293. NILSSON, N. J. Principles of Artificial Intelligence. [S.l.]: Tioga Publishing, 1980. 33
  • 37.
    PAPADIMITRIOU, C. H.;YANNAKAKIS, M. Shortest paths without a map. Theoretical Computer Science, Elsevier, v. 84, n. 1, p. 127–150, 1991. RUSSELL, S. J.; NORVIG, P. Artificial intelligence : a modern approach. [S.l.]: Pearson, 2016. 1132 p. ISBN 1292153962. SLEATOR, D. D.; TARJAN, R. E. Amortized efficiency of list update and paging rules. Communications of the ACM, ACM, v. 28, n. 2, p. 202–208, 1985. UNIVESP. Inteligência Artificial. Disponı́vel em: ⟨https://www. youtube.com/watch?v=lFIIpCbb6Do&list=PLxI8Can9yAHfY4b6dAzpH5 Z-gz4wM-Jq⟩. 34