09.05.2013 Views

aplicação de buscas heurísticas ao problema de determinação de ...

aplicação de buscas heurísticas ao problema de determinação de ...

aplicação de buscas heurísticas ao problema de determinação de ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

A maior vantagem <strong>de</strong>sta busca é a economia <strong>de</strong> memória. Ao invés <strong>de</strong> reter<br />

todos os sucessores <strong>de</strong> um nó na memória, apenas um sucessor é mantido a<br />

cada instante.<br />

Algoritmo da variante “Backtracking” da Busca em<br />

Profundida<strong>de</strong><br />

1. Colocar a raiz da busca r em OPEN; se for uma solução,<br />

sair indicando esta condição.<br />

2. Se OPEN é vazia, finalizar com erro; caso contrário,<br />

continuar.<br />

3. Remover o nó do topo <strong>de</strong> OPEN e colocá-lo em CLOSED.<br />

Chamar este nó <strong>de</strong> n .<br />

4. Se a profundida<strong>de</strong> <strong>de</strong> n é igual <strong>ao</strong> limite <strong>de</strong><br />

profundida<strong>de</strong> OU todas as arestas partindo <strong>de</strong> n já foram<br />

percorridas, remover n <strong>de</strong> OPEN e voltar para o passo 2;<br />

caso contrário, continuar.<br />

5. Gerar um novo sucessor <strong>de</strong> n (alcançado através <strong>de</strong><br />

alguma aresta não explorada). Chamar este sucessor <strong>de</strong><br />

n ' . Colocar este sucessor no topo <strong>de</strong> OPEN e criar um<br />

ponteiro entre n ' e n .<br />

6. Marcar n , indicando que a aresta ( n , n')<br />

foi percorrida.<br />

7. Se n ' é uma solução do <strong>problema</strong>, finalizar, exibindo a<br />

solução como sendo o caminho que liga todos os nós<br />

através dos ponteiros criados em 5; caso contrário,<br />

continuar.<br />

8. Se n ' é o início <strong>de</strong> um caminho infrutífero, removê-lo <strong>de</strong><br />

OPEN.<br />

9. Ir para o passo 2.<br />

B.5.2.2 Busca em Largura: Estratégias <strong>de</strong> Busca tipo FIFO<br />

Ao contrário da busca em profundida<strong>de</strong>, a busca em largura privilegia os nós<br />

localizados em níveis <strong>de</strong> menor profundida<strong>de</strong>. Assim, a busca prossegue<br />

explorando seções do grafo (camadas) <strong>de</strong> mesma profundida<strong>de</strong>. Ao invés <strong>de</strong><br />

uma estratégia do tipo LIFO, vista na seção anterior, a busca em largura<br />

utiliza uma estratégia do tipo FIFO, atribuindo maior priorida<strong>de</strong> <strong>ao</strong> nós<br />

resi<strong>de</strong>ntes em OPEN por mais tempo (o algoritmo obe<strong>de</strong>ce à lógica <strong>de</strong> uma<br />

fila). O algoritmo é em tudo semelhante <strong>ao</strong> apresentado na seção anterior,<br />

com a diferença <strong>de</strong> colocar os novos sucessores gerados no fim da lista<br />

OPEN <strong>ao</strong> invés <strong>de</strong> colocá-los no início (lógica <strong>de</strong> fila x lógica <strong>de</strong> pilha).<br />

A Figura 50 mostra a or<strong>de</strong>m <strong>de</strong> expansão dos nós em uma busca em largura<br />

para o <strong>problema</strong> das quatro rainhas. As vantagens e <strong>de</strong>svantagens da busca<br />

em largura po<strong>de</strong>m ser levantadas comparando-se a Figura 48 e a Figura<br />

Apêndice B 193

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!