Algoritmos do Menor Caminho

Daniane Gomes
2 min readFeb 23, 2022

O problema do Caixero Viajante e Algoritmo de Dijkstra

Photo by Dino Reichmuth on Unsplash
Inicialmente publicado em formato de thread no Twitter

Existem muitos algoritmos para encontrar o menor caminho um grafo. Dois muito populares deles são a implementação da solução do problema do Caixeiro Viajante e o algoritmo de Dijkstra. Mas pra que servem e quais são as diferenças entre os dois?

Primeiramente uma diferença importante: o Caixeiro Viajante é um problema para o qual podem existir muitas soluções e/ou implementações em forma de algoritmo. Já Dijkstra é um algoritmo exato.

A comparação entre os dois se dará pela ótica de qual tipo de problema cada um dos dois procura resolver.

Menor caminho em um grafo

O que quer dizer “menor caminho em um grafo”? Como analogia, vamos pensar no boy dos lanches fazendo entregas pela cidade. A cidade é o grafo e os pontos a serem considerados são a lancheria e as casas.

O Problema do Caixeiro Viajante

Vamos supor que o entregador tenha uma pilha de pizzas a serem entregues em diversas casas e que depois precisa voltar para a lancheria. A solução do problema do Caixeiro Viajante encontra a rota menos custosa para visitar todos os pontos e voltar para o ponto inicial.

Dijkstra

Mas se o entregador só precisa ir até uma casa de uma vez e quer a melhor rota pra isso? Suponhamos que a rota de menor kilometragem não tenha asfalto, ou que esteja congestionada. Dijkstra tem a solução!

Cada parte do caminho (ou cada rua) é considerada e recebe um “peso” e no final a com menor peso total é a escolhida. É tipo aquela dica que você dá pro boy do lanche chegar mais rápido: “pega a perimetral e desce ali pelo Buteco Dois Irmãos que nesse horário chega mais rápido”.

E pra que isso serve?

Além de ser pergunta de FAANG, serve para: otimizar rotas (Caixeiro Viajante) e encontrar o caminho menos custoso entre um ponto e outro (Dijkstra).

Resumo

A solução do problema do Caixeiro Viajante tenta encontrar o menor caminho para visitar todos os pontos e retornar ao ponto de partida.

O algoritmo de Dijkstra considera o peso entre todas as rotas para encontrar o caminho menos custoso de A até B.

Fun fact: Dijkstra era holandês.

Exemplo de implementação para a solução do problema do Caixeiro Viajante:

Implementação de Dijkstra:

--

--