*Busca em GrafosKatia S. [email protected]
[email protected]*Busca em GrafosOBJETIVO: Visitar todos os vrtices e arestas do grafo de forma sistemtica, para evitar repeties e conseqente desperdcio.
Se o grafo uma rvore enraizada, isto , uma rvore na qual os vrtices obedecem a uma hierarquia, a tarefa simples.
[email protected]*Busca em rvores EnraizadasBusca em pr-ordem
Raiz visitada antes dos descendentes
A B C E F D
[email protected]*Busca em rvores Enraizadas2. Busca em ps-ordem
Raiz visitada depois dos descendentes B E F C D A
[email protected]*Busca em rvores Enraizadas3. Busca em in-ordem Raiz visitada entre os descendentes
S faz sentido para rvores binrias ou similares (2-3, B, etc.)
(Applet)
[email protected]*Algoritmo Pr-ordemAlgoritmo Pr-ordem(raiz) Se raiz no nula ento Visite (raiz)Pr-ordem (left.raiz)Pr-ordem (right.raiz)
[email protected]*Algoritmo Ps-ordemAlgoritmo Ps-ordem(raiz) Se raiz no nula entoPs-ordem (left.raiz)Ps-ordem (right.raiz)Visite (raiz)
[email protected]*Algoritmo In-ordemAlgoritmo In-ordem(raiz) Se raiz no nula ento In-ordem (left.raiz)Visite (raiz)In-ordem (right.raiz)
[email protected]*Busca em Grafos com Ciclos Se o grafo contm ciclos, preciso cuidar para evitar que arestas sejam visitadas mais de uma vez.
[email protected]*Busca em Grafos com CiclosExemplo: A partir do grafo abaixo obtemos
[email protected]*Busca em Grafos com Ciclos Se o grafo no uma rvore, ns definimos um subgrafo dele que uma rvore, para servir de espinha dorsal.
Algoritmo bsico:Tome um vrtice qualquer s. Marque s. Enquanto houver arestas no visitadas, tome uma aresta (v, w) incidente a algum vrtice j marcado. Marque (v, w) (explorada) e v, w (visitados).
[email protected]*Busca em Grafos com CiclosH duas tcnicas principais para busca:
Busca em Profundidade Tomar a aresta no marcada incidente ao vrtice visitado mais recentemente.
Busca em Largura Tomar a aresta no marcada incidente ao vrtice visitado menos recentemente.
[email protected]*Busca em Profundidade JAVA Applet para uma Busca em Profundidade
JAVA Applet para Busca em grafo direcionado com pilha
*Controle para Busca em Profundidade Main Procedure Inicialize pilha Q como vazia; Desmarque todos os vrtices e arestas; Tome um vrtice v qualquer; Inclua v em Q; P(v); Remova v de Q.
[email protected]*Algoritmo para Busca em ProfundidadeProcedimento P(v)Marque v como visitado (cinza);Para toda aresta (v, w) incidente a v faa: Se w no marcado ento /* aresta de rvore */ {d[w] time; time++; pred[w] v; P(w) fim[w] time; time++} seno se w pai(v) ento /* aresta de retorno */ seno /* aresta de rvore */
*rvore de Busca em Profundidade A busca em profundidade biparticiona o conjunto de arestas em: - Arestasde rvore - Arestas de Retorno
*Teorema 23.6 (Teorema dos parnteses) Em qualquer busca em profundidade de um grafo (direcionado ou no direcionado) G = (V, E), para quaisquer dois vrtices u e v, exatamente uma das trs condies vale: - Os intervalos [d[u],f[u]] e [d[v], f[v]] so disjuntos, - O intervalo [d[u],f[u]] est contido no intervalo [d[v],f[v]], e u um descendente de v na rvore de busca em profundidade, ou - Vice-versa.
*Corolrio 23.7 (Nesting dos intervalos dos descendentes) Vrtice v um descendente prprio do vrtice u na floresta de busca em profundidade de um grafo G sse d[u] < d[v] < f[v] < f[u].
[email protected]*Variaes de Busca em ProfundidadeO algoritmo de Busca em Profundidade usado como controle para muitas aplicaes em tempo linear.Ex. Componentes Biconexos (Tolerncia a falhas em redes)
Ex: No grafo ao lado, os seguintes subgrafos gerados permanecem conexos se cair um link qualquer:
G{1, 6} G{3, 7} G{1, 2, 3, 4, 5}
*Busca em Largura Cria um centro no vrtice inicial e forma nveis ou camadas a partir deste n. 37251461645237
6*Vrtices Brancos, Cinza e Pretos - Brancos Valor inicial - Cinza Aps serem descobertos - Pretos Aps a descoberta de todos os adjacentes.16452371645237452371sss6
*Busca em Largura
Applet para Busca em Largura
*Algoritmo para Busca em LarguraTome um vrtice qualquer v. Coloque v na fila F. Enquanto F no for vazia faav Primeiro elemento da fila FPara toda aresta (v, w) incidente a v faa Se w no marcado ento Inclua w em F /* aresta de rvore */ seno se v = pai (w) ento /* aresta de rvore */ seno /* aresta de cruzamento */
*Ao trmino de Busca em Largura A busca em largura biparticiona as arestas do grafo em arestas de rvore e arestas de cruzamento. 37251461645237
*Correo de Busca em Largura (BL) Teorema 23.4 (Correo de BL)
Seja G = (V, E) um grafo direcionado ou no direcionado, e suponha que o algoritmo BL executado em G a partir de um dado vrtive s V. Ento, durante a sua execuo, BL descobre todo vrtice v V alcanvel a partir do n fonte s, e ao trmino, d[v] = distncia (s, v) para todo v V ...
*Busca em Largura vs. Distncias Teorema 23.4 (Correo de Busca em Largura) ...... Alm disso, para qualquer vrtice v s alcanvel a partir de s, um dos menores caminhos de compr. mnimo de s a v o caminho de s a pred(v) seguido pela aresta (pred(v), v).
*Variaes de Busca em LarguraO algoritmo de Busca em Largura tambm largamente usado como controle para aplicaes em tempo linear.
Ex. Broadcast de mensagens em uma rede
*Referncia BibliogrficaLeiam o Captulo 23 do livro de Cormen, Leiserson, Rivest (Pgs. 465 a 497).
No esqueam os problemas.