Você está na página 1de 2

Algoritmo de Dijkstra

Para iniciarmos precisamos definir primeiro o que este algoritmo usa em sua estrutura, o
algoritmo de Dijkstra ele usa uma estrutura chamada Grafos, essas estruturas elas representam
conexões entre pares de elementos, estes elementos nós chamamos de nódulos, eles podem
representar o que você quiser, pessoas, lugares, entidades, etc. E a conexão entre eles nós chamamos
de bordas.

As aplicações do grafo elas são altamente usadas em cenários reais, por exemplo podemos usar
o grafo para fazer um modelo de transporte, onde os nódulos são fabricas ou lojas que enviam e
recebem mercadorias, e as linhas são por onde essa mercadoria é transportada.

Os grafos podem ser mais complexos do que estes, eles podem ser classificados em dois tipos:
Indireto e Direto.

O não direcionado são conexões em que os dois nódulos enviam e recebem do mesmo modo, já
o direcionado ele tem sentido definido, ou seja, ele manda pra um nódulo, mas em alguns casos ele não
recebe deste nódulo.

No algoritmo de Dijkstra usamos um grafo onde suas bordas tem pesos, ou seja, por onde
aquele elemento transportado percorre tem um valor específico para aquele transporte, sendo ele
tempo gasto, custo, distância ou qualquer coisa que representa uma conexão entre dois lugares.

O algoritmo de Dijkstra foi criado e publicado por Dr. Edsger W. Dijkstra, em 1959, ele publicou
um artigo de 3 páginas intitulado "A note on two problems in connexion with graphs" onde ele explica o
seu novo algoritmo. Durante uma entrevista em 2001 Edsger explica o porque dele ter criado o
algoritmo:

“What’s the shortest way to travel from Rotterdam to Groningen? It is the algorithm for the shortest
path, which I designed in about 20 minutes. One morning I was shopping in Amsterdam with my young
fiancée, and tired, we sat down on the café terrace to drink a cup of coffee and I was just thinking about
whether I could do this, and I then designed the algorithm for the shortest path. As I said, it was a 20-
minute invention. In fact, it was published in 1959, three years later. The publication is still quite nice.
One of the reasons that it is so nice was that I designed it without pencil and paper. Without pencil and
paper, you are almost forced to avoid all avoidable complexities. Eventually that algorithm became, to
my great amazement, one of the cornerstones of my fame.”

Explicação do Algoritmo de Dijkstra:

O algoritmo de Dijkstra basicamente começa de um nódulo que você escolhe e ele analisa o
grafo para achar o menor caminho possível entre nódulos do grafo. O algoritmo mantem a menor
distância que ele conhece até ele achar um valor que substitua o valor já salvo, quando o algoritmo acha
o caminho mais curto entre o nódulo inicial e o próximo nódulo, ele marca o nódulo como visitado e o
adiciona ao caminho, o processo continua até que todos os nódulos daquele grafo sejam visitados e
adicionados ao caminho, desta forma o algoritmo acha o menor caminho entre dois pontos escolhidos.

Para isto tudo acontecer todos os caminhos de um grafo devem ser positivos, caso tenha um caminho
negativo o algoritmo não funcionará direito.
Exemplo:

De acordo com a regra o caminho mais curto deste grafo seria:

0->1->3->4->6, este é o caminho mais curto que podemos fazer entre 0 a 6.

Sabendo de tudo isso, podemos fazer uma crítica ao algoritmo de Dijkstra, o algoritmo de
Dijkstra é um algoritmo revolucionário na computação pois ele implementa uma das formas mais
comuns de fazermos um algoritmo de short path, sua implementação é muito importante no campo da
rede pois ele define a menor rota possível entre dois servidores, fazendo que a conexão entre dois
servidores sejam mais rápidas e mais econômicas, porém ele tem uma falha crucial neste ponto, nem
sempre o caminho mais rápido é o caminho mais seguro, o algoritmo de Dijkstra não faz essa avaliação,
ele só calcula qual é a menor distância, não importa o perigo ou o problema que pode dar durante o
percurso, por exemplo se usássemos este algoritmo numa rota de internet, provavelmente teríamos
problema com vazamento de dados, pois não poderíamos definir qual rede é segura ou não, para uso
fictício o código é excelente pois é uma forma de organizar caminhos mas para uso prático pode ser
perigoso.

Na minha visão provavelmente exista um algoritmo de short path mais seguro do que esse, que
faça uma avaliação mais detalhada do caminho a ser percorrido, caso seja usado numa rede, ou seja
Dijkstra é eficiente porém vulnerável.

Matheus Rocha Capanema, técnico em Informática e estudante de Engenharia da Computação no IESB.

Você também pode gostar