320 likes | 641 Vues
Para representar um grafo precisaramos de 3 conjuntos:ARESTAS={a1,a2,a3,a4,a5,a6...}VERTICES={v1,v2,v3,v4....}eV A={[a1,v1,v2],[a2,v1,v3].....]}Porm, como encontrar o menor caminho nesta representao?. Matriz de adjacnciasDe posse dos vrtices, podemos formar uma matriz NxN elementos o
E N D
1. Representao computacional de Grafos
2. Para representar um grafo precisaramos de 3 conjuntos:
ARESTAS={a1,a2,a3,a4,a5,a6...}
VERTICES={v1,v2,v3,v4....}
e
V+A={[a1,v1,v2],[a2,v1,v3].....]}
Porm, como encontrar o menor caminho nesta representao?
3. Matriz de adjacncias
De posse dos vrtices, podemos formar uma matriz NxN elementos onde i,j contem a aresta entre os elementos do vrtice Ni e Nj.
Esta matriz armazena 1 se existe a aresta ou 0 se no existe. Ou seja, ela totalmente simtrica, caso seja um grafo no direcionado.
4. Caso um grafo contenha poucas arestas, a matriz tende a ser esparsa, ou seja, conter muitos zeros!
Caso tenhamos N arestas o tamanho da matriz sempre ser N2. Qualquer algoritmo que precise verificar algo na matriz ter que fazer N2 comparaes.
Se o grafo possuir poucas arestas, a matriz passa a no ser interessante, desta forma podemos utilizar Listas encadeadas!
5. Lista encadeada
Usa ponteiros para mostrar o prximo da lista.
Para encontrar os vrtices adjacentes, precisamos percorrer toda a lista.
Precisamos de informaes adicionais para armazenar o endereo do prximo elemento.
6. Em um grafo no-direcionado, cada aresta aparecer 2 vezes. Se nj est na lista de adjacentes a ni, ento ni, tambm est na lista de adjacncias de nj.
Em um grafo rotulado, as informaes podem ser armazenadas em cada elemento da lista.
7. Crie a MATRIZ e a LISTA ENCADEADA:
8. Caminho Eureliano(Algoritmo)
9. Definio
Um caminho Eureliano em um grafo G, um caminho que usa cada aresta de G exatamente uma vez.
A existncia de um caminho Eureliano, depende dos graus de seus vrtices.
Existe um caminho Eureliano em um grafo conexo se, e somente se, no houver nenhum ou existirem exatamente dois vrtices de grau mpar. No caso de no haver vrtices mpares, o caminho pode comear em qualquer vrtice e terminar neste mesmo vrtice; para o caso de haver dois vrtices mpares, o caminho deve comear em um vrtice mpar e terminar no outro.
10. Definio
11. Algoritmo
A essncia contar o nmero de vrtices adjacentes a cada vrtice e determinar se este impar ou par. Se houver muitos vrtices com grau impar, no existe um caminho Eureliano.
12. Algoritmo
Total=0
T=1
While(total<=2) and (i<=n)
{
grau=0
for j=1 to N
{ grau = grau + a[i,j] }
if grau=impar
{ total=total+1
i = i + 1}
}
If total>2 or total=1 ento No existe caminho Eureliano
Else Existe caminho Eureliano
13. Ciclo Hamiltoniano
14. Definio
Willian Rowan Hamilton(1865), props um problema semelhante ao elaborado por Euler, mas agora estamos interessados em saber se podemos usar todos os vrtices exatamente uma vez!
15. Idia bsica
Comece por algum vrtice e tente encontrar um caminho. Se o caminho resultante tiver um vrtice repetido, ele no um ciclo. Se o caminho puder ser completado como um ciclo, verifique se ele visitou todos os vrtices. Se ele visitou, ento temos um ciclo Hamiltoniano.
Em resumo: No existe um algoritmo eficiente para resolver o problema do ciclo Hamiltoniano.
16. O caixeiro viajante
Um bom exemplo do problema de Hamilton o caixeiro viajante.
17. Caixeiro viajante
Exemplificando o caso n = 4: se tivermos quatro cidades A, B, C e D, uma rota que o caixeiro deve considerar poderia ser: saia de A e da v para B, dessa v para C, e da v para De ento volte a A. Quais so as outras possibilidades ?
muito fcil ver que existem seis rotas possveis: ABCDA,ABDCA,ACBDA,ACDBA,ADBCA, ADCBA.
18. O caixeiro viajante
Suponhamos temos um muito veloz computador, capaz de fazer 1 bilho de adies por segundo. Isso parece uma velocidade imensa, capaz de tudo.
Contudo, essa imensa velocidade um nada frente imensido do nmero 19! de rotas que precisar examinar. Com efeito, acredite se puder, o valor de 19! 頠121 645 100 408 832 000( ou , aproximadamente, 1.2 x 1017 em notao cientfica). Consequentemente, ele precisar de
1.2 x 1017 / ( 53 milhes ) = 2.3 x 109 segundos
para completar sua tarefa, o que equivale a cerca de 73 anos . O problema que a quantidade (n - 1)! cresce com uma velocidade alarmante, sendo que muito rapidamente o computador torna-se incapaz de executar o que lhe pedimos. Constate isso mais claramente na tabela a seguir:
19. Idia bsica
20. Caminho Mnimo(Algoritmo)
21. O problema
Admita que tenhamos um grafo conexo onde todos os pesos so positivos, ento, existe um caminho entre os vrtices X e Y? De fato pode haver vrios desses caminhos. Mas como encontrar um caminho onde a soma dos pesos seja a menor?
Trata-se de um recursos importante para resolver problemas em redes de computadores, em trnsito de veculos ou em telecomunicaes. (entre outros)
22. Suposies
Como o grafo conexo, sabemos que o caminho existe. Como ele no tem restries, ele pode ser resolvido (e o Hamiltoniano no)
23. Algoritmo de Dijkstra
Construmos um conjunto chamado IN que conter o vrtice inicial (x por exemplo), e que ir aumentando a medida que for executado.
IN conter ento todos os vrtices para os quais j determinamos os menores caminhos (a partir de x)
Para aumentar IN, pegamos o vrtice fora de IN com menor distncia.
Agora recalculamos
31. O Algoritmo
Trata-se de um algoritmo de viso curta. Ele no capaz de ver todo o grafo para determinar diversos caminhos mnimos. Ele apenas determina a cada passo, os caminhos mnimos relativos ao conjunto IN. Esse tipo de algoritmo conhecido como Algoritmo guloso pois sempre realiza apenas os passos que so melhores.
32. O Algoritmo
// Criando o primeiro vetor com as distncias
// iniciais
IN = {x}
D[x]=0;
For todos os Z que no esto em IN
{ d[z] = A[x,z]
s[z] = x;
}
33. O Algoritmo
While not (y in IN)
{
IN=IN U P
for (todos de z que pertenam a IN)
{
distanciaanterior = d[z]
d[z] = min(d[z],d[p] ; A[p,z]);
if (dz<distanciaanterior)
s[z]=p
}
} //{while}