Você está na página 1de 3

Código de Busca em Largura e Profundidade

Gomes. Sidnei e Santos. Luis

1Resumo — O método de busca em largura ou profundidade é


um alternativa para resolução de problemas por meio da geração
de sistemática de novos estados, os quais são testados alguns
pontos a fim de se certificar se correspondem à solução do
problema, se existir. Essa estratégia basicamente segue uma
ordem de expansão de nodos. Também se pode denominar como
busca cega, que busca estritamente a informação disponível na
formulação do problema principalmente na área de Inteligência
Artificial.
Com o intuito de desenvolver um código que auxilia a
resolução de problemas com esta característica, foi utilizada a
programação em VBA (Visual Basic for Applications) que é um Figura 1. Grafo de busca em Largura. – Fonte: Autores
recurso disponível também no Excel e possibilita uma
formatação mais estruturada e avançada, capaz de realizar A busca em profundidade é aquela que sempre expande o
vários tipos de operações, cálculos, copiar, colar, fazer gráficos, nó seguinte, imediatamente mais profundo da borda atual da
simulações, jogos, buscas, etc. No VBA, tratando-se de Excel, o
principal objetivo é trabalhar diretamente com os dados
árvore de busca até que este não tenha mais sucessores. À
armazenados nas células das planilhas. medida que esses nós são expandidos, eles são retirados da
Assim este trabalho foi desenvolvido com base em um código borda e então a busca “retorna” ao nó seguinte mais profundo
de busca por largura e profundidade em determinadas células, e que tem sucessores inexplorados. O Algoritmo de busca em
o intuito é automatizar tarefas repetitivas, proporcionando uma profundidade é uma instância do algoritmo de busca em grafo,
maior rapidez na elaboração de algumas tarefas. sendo que a busca em largura utiliza uma fila FIFO e a busca
em profundidade utiliza uma fila LIFO. Uma fila LIFO
Paravras Chave — Visual Basic for Appliacations, Excel, significa que o nó gerado mais recente é o escolhido para
código. expansão e deverá ser o nó mais profundo não expandido
porque é mais do que o seu “pai”, que, por sua vez, era o nó
não expandido mais profundo quando foi selecionado [2].
I. INTRODUÇÃO

Define-se Inteligência Artificial (IA) como “a parte da


ciência da computação envolvida no projeto de sistemas que
exibem características que associamos com a inteligência do
comportamento humano” [1]
Busca em largura é uma estratégia simples em que o nó raiz
é expandido primeiro, em seguida todos os sucessores do nó
raiz são expandidos, depois os sucessores desses nós, e assim
por diante. Em geral, todos os nós em dada profundidade na
árvore de busca são expandidos, antes que todos os nós no Figura 2. Grafo de busca em Profundidade. – Fonte: Autores
nível seguinte sejam expandidos. A busca em largura é uma
instância do algoritmo de busca em grafo, em que o nó mais II. MATERIAIS E MÉTODOS
raso não expandido é escolhido para a expansão. Isso é
conseguido utilizando uma fila FIFO para a borda, assim os A codificação da aplicação foi realizada na linguagem
novos nós vão para o fim da fila, e os nós antigos, que são Visual Basic for Applications (VBA) que é uma linguagem de
mais rasos que os novos são expandidos primeiro. programação baseada no Visual Basic (VB) e está concebido
para funcionar em conjunto com diferentes aplicativos da
Microsoft, tais como o Excel, Word, Project, Access e outras
aplicações desenvolvidas pela empresa [3].
Este trabalho trata do problema de busca de caminhos,
assunto da área da Inteligência Artificial (IA), que é um estudo
de como fazer os computadores realizarem tarefas em que, no
Gomes. S, UNISOCIESC – Curitiba, Paraná, Brasil, momento, as pessoas são melhores [4].
gomessidnei@yahoo.com Algumas das ciências mais recentes que abrangem
Luis. S, UNISOCIESC – Curitiba, Paraná, Brasil,
marcelojustino75@gmail.com
diversos seguimentos foram desenvolvidas dentro dos dois
métodos de busca em espaços de estados sendo busca em
profundidade e busca por largura. Também em um problema Com este novo formato reestruturado, dividiu-se o código
baseado em um grafo, que é um conjunto de caminhos com em três módulos utilizando a função “Call” do VBA para
pontos interligados pelos vértices e arestas, formando o que integrar-se os módulos de programação, conforme
podemos chamar de nós. demonstrado na figura 5.

III. CÓDIGO DE BUSCA

O problema aqui descrito é a simulação de uma busca em


largura e também uma busca em profundidade em uma árvore
na forma de grafo, mostrado na figura 3. O objetivo é
selecionar um determinado valor, neste caso os numerais 10 e
20. Selecionar também o modo de busca em uma tabela e
desenvolver um código em VBA para realizar a busca,
retornando as coordenadas do nó procurado e o número de nós
percorridos até encontrá-lo. Figura 5. Estrutura do Código VBA. – Fonte: Autores

No módulo 1 definiu-se a cor principal de todos os pontos,


no módulo 2 desenvolveu-se o código para realizar a busca
por profundidade e no módulo 3 o código para a busca por
largura. O botão de busca está atribuído ao módulo 1, que
percorre por todas as células com conteúdo numérico e os
colori com a cor definida na variável “cor”. Após todos os
comandos do módulo 1 serem percorridos, o código desvia a
operação para o módulo 2 (busca por profundidade) através do
comando “Call profundidade”, e quando entra no primeiro
comando “IF” ele compara se a variável “P” (atribuição de
Figura 3. Grafo. – Fonte: Apresentação Professor Vitor. profundidade). Se esta for verdadeira, então percorrerá os
comandos seguintes. Caso contrário, a função entra no
Na tabela1 mostra-se as variáveis que auxiliam na resolução comando “Call Largura” e desvia a varredura para o módulo 3.
do problema, tais como, número do nó procurado, tipo de
procura (se é largura ou profundidade), o resultado encontrado
mostrado em forma de coordenadas e a quantidade de nós
percorridos até o ponto desejado.

Figura 6. Declarações do Código VBA. – Fonte: Autores

No código de busca encontram-se os dois primeiros


Tabela 1: Auxilio da busca – Fonte: Autores comandos como visto na figura 6. A variável “valor”, que
recebe o valor digitado na linha 2, coluna 26, que faz
Para dar início à programação, a árvore foi reorganizada de referência ao nó procurado da tabela 1. A variável “modo”
forma que simplificasse o entendimento, mas mantendo a recebe o valor digitado na linha 3, coluna 26, que faz
mesma característica anterior como mostrado na figura 4. Esta referência ao tipo de procura que o código vai realizar.
reorganização também foi necessária devido ao ambiente
VBA utilizar a estrutura de planilhas (linhas e colunas) do Na sequência, conforme figura 7, o código segue no
Microsoft Excel, sendo então, esta abstração, uma das primeiro comando de decisão “IF”.
primeiras ações para poder-se estruturar o código.

Figura 7. 1ª e 2ª tomada de decisão do Código VBA. – Fonte: Autores

Esta função limita a área de busca do código que está


definido no máximo em 23 colunas em “x” e quinze linhas em
Figura 4. Grafo. – Fonte: Autores
“y”. No segundo “IF”, soma-se 1 a cada célula percorrida se
ela for diferente de vazio, e armazena esta contagem
sequencial na variável “Z”. Este valor armazenado é exibido
na figura 1 como “número de nós percorridos”. As variáveis algoritmo desenvolvido possa ser modificado e ou ampliado.
“y” e “x” do código, representam as linhas e colunas Desta forma pode ser utilizado em outras aplicações práticas
percorridas. envolvendo este tipo de problema de busca, economizando
tempo e por sua estrutura de código ser amigável e de fácil
compreensão. O presente artigo não tem como objetivo o
aprofundamento em questões de implementação, nem de
estudo de complexidade dos algoritmos, mas apresentar
principalmente de forma conceitual como podem ser aplicados
Figura 8. 3ª tomada de decisão do Código VBA. – Fonte: Autores tais algoritmos nestes sistemas de busca. Para um estudo mais
aprofundado sobre a teoria dos grafos e buscas, existem boas
Como visualizado na figura 8, quando o valor selecionado obras que abrangem melhor as questões de implementação,
na tabela 1, célula (2, 26) é igual “Z”, significa que o valor outros métodos em função do ambiente de código utilizado e
escolhido foi encontrado e esta variável transfere o valor exploram mais a fundo outras possibilidades de algoritmos.
memorizado para a tabela 1, célula (5, 26) que mostra a
quantidade de nós percorridos. Já a célula (4, 26) informa e
escreve as coordenadas que se encontra o número procurado e
armazena esta informação nas variáveis “y e x”. REFERÊNCIAS
O quarto “IF” do código VBA, da figura 9, compara o valor
encontrado em “y” e “x” com o “valor” e se este for igual ao [1] Feigenbaum E.A. “The Handbook of Artificial
valor selecionado, o comando “with>interior>color” pinta esta Intelligence”, Vol. 1 (1981)
célula com a cor amarela, que é definida pelo número 65535
do código. [2] Russel, Stuart J. “Inteligência Artificial” (2012)

[3] Peres, P. (2005), “Excel Avançado”, Edições Sílabo.

[4] Rich, Elaine. (1988) “Inteligência Artificial”, cap1.

Figura 9. 4ª tomada de decisão do Código VBA. – Fonte: Autores

Os comandos do módulo 3 de busca por largura, seguem os


mesmos passos descritos acima.

IV. RESULTADOS E DISCUSSÃO


O algoritmo desenvolvido e descrito neste relatório, segue
uma sequência de busca “cega”, não recursiva.
Identifica-se o valor do nó desejado e quando a busca é
selecionada por profundidade, ela é executada de cima para
baixo e da direita para esquerda, sendo os extremos limitados
pelos valores definidos, neste caso máximo de 15 linhas e 23
colunas. Quando selecionada a busca por largura, ela é
executada da esquerda para direita e de cima para baixo,
igualmente com os mesmos limites estabelecidos no modo
anterior. Nesta busca cega, quando o valor do nó desejado é
encontrado usando o modo selecionado, o endereço da sua
célula (linha e coluna) é armazenado, preenchido com cor e
exibido. As buscas serão sempre finitas com este código
porque limitou-se o número de células visitadas por
profundidade e largura.

V. CONCLUSÃO

A utilização do Visual Basic for Applications (VBA) para esta


resolução de um problema de busca em profundidade e largura
na área de estudo de Inteligência Artificial (IA) mostrou-se
eficiente. Porém, houve grande discussão em sala de aula,
devido ao fato de que foi-se necessário “abstrair” para
encontrar uma solução viável para a recursão no ambiente
Microsoft Excel. Com isso os autores acreditam que o

Você também pode gostar