Sou iniciante (novato em teoria da complexidade computacional) e tenho uma pergunta.
Digamos que tenhamos 'Problema do Vendedor Viajante', a seguinte aplicação dos Algoritmos de Dijkstra o resolverá?
A partir de um ponto inicial, calculamos a menor distância entre dois pontos. Nós vamos direto ao ponto. Nós excluímos o ponto de origem. Em seguida, calculamos o próximo ponto de menor distância a partir do ponto atual e assim por diante ...
A cada passo, reduzimos o gráfico enquanto movemos o próximo ponto de menor distância disponível. Até visitarmos todos os pontos.
Isso resolverá o problema do vendedor ambulante.
algorithms
graphs
Gilles 'SO- parar de ser mau'
fonte
fonte
Respostas:
O algoritmo de Dijkstra retorna uma árvore de caminho mais curto, contendo o caminho mais curto de um vértice inicial para o outro, mas não necessariamente os caminhos mais curtos entre os outros vértices, ou uma rota mais curta que visita todos os vértices.
Aqui está um exemplo de contador em que o algoritmo ganancioso que você descreve não funciona:
fonte
Como já ocorreu nas outras respostas, sua sugestão não resolve efetivamente o Problema do Vendedor Viajante, deixe-me indicar a melhor maneira conhecida no campo da pesquisa heurística (desde que eu veja o algoritmo de Dijkstra um pouco relacionado a esse campo da Inteligência Artificial) .
A melhor abordagem (que eu conheço) consiste em executar um algoritmo de pesquisa heurística de profundidade e primeiro ramo e limite , onde a heurística é o custo da Árvore de abrangência mínima (MST). Como o MST pode ser calculado em tempo polinomial com o algoritmo de Prim ou com o algoritmo de Kruskal , pode-se esperar que retorne soluções em um período de tempo razoável. Para uma maravilhosa discussão desses dois algoritmos, sugiro fortemente que você dê uma olhada no The Algorithm Design Manual
De fato, permitam-me destacar que, uma vez que essa abordagem foi sugerida, pouco progresso foi observado no campo para derivar limites ótimos desse problema, de modo que considero que é uma questão importante no campo da pesquisa combinatória.
Espero que isto ajude,
fonte
Não tenho idéia de como alguém aqui não percebeu que a aplicação do algoritmo de Dijkstra seria totalmente desnecessária nesse caso. Você pode implementar esse algoritmo ganancioso simplesmente selecionando o nó mais próximo, que é conhecido a priori. O algoritmo de Dijkstra é usado para descobrir caminhos, mas você está apenas dando um passo a cada vez. Obviamente, isso não encontra a solução ideal para o TSP, mas muitas abordagens muito boas também não a encontram. Todos os localizadores de soluções ideais para TSP são muito exigentes em termos computacionais.
fonte
A resposta é não, essa não é uma boa maneira de resolver o problema do TSP. Um bom exemplo de contador é onde todos os pontos estão em uma linha, como o seguinte:
--5 ------------------ 3 ----- 1--0 --- 2 ---------- 4
usando o algoritmo de Dijsktra, o vendedor ruim começaria no ponto 0, primeiro passaria para 1, depois para 2 e depois para 3 ect. o que não é o ideal.
Espero que ajude. Dê uma olhada no primeiro capítulo do excelente livro de Steven S. Skiena chamado "The Algorithm Design", que explica este exemplo com mais detalhes.
O problema do TSP não é encontrar o caminho mais curto entre dois pontos, mas fazer uma rota entre todos os pontos ideais. Quando você tem a rota ideal, pode usar o Dijsktra para encontrar o caminho mais curto entre cada ponto da rota.
fonte