L'Algorithme D'Optimisation - La Route La Plus Courte Entre Plusieurs Points
Problème: j'ai une grande collection de points. Chacun de ces points a une liste avec des références à d'autres points de la distance entre eux déjà calculées et stockées. J'ai besoin de déterminer la route la plus courte qui commence à partir d'une origine et passe à travers un certain nombre de points à n'importe quelle destination.
Ex: je suis en vacances et je suis rester dans une ville spécifique. Je suis en train de faire un voyage d'une MANIÈRE de voir TOUT quatre villes, et je veux voyager le moins de distance possible. Je ne peux pas voir la même ville plus d'une fois.
Solution actuelle: maintenant je suis en parcourant toutes les possibilités manuellement et de stocker le chemin le plus court. Cela fonctionne, mais se sent inefficace. Aussi, ce problème finira par être élargi pour inclure la recherche à partir de plusieurs points d'origine à de multiples points de destination, donc je pense que cela pourrait exploser en l'espace de recherche.
Quelle est la meilleure façon de rechercher le chemin le plus court?
Quelques réponses ici (TSP, de Floyd-Warshall, en Largeur d'Abord, Branch and Bound) sont des dérivés de follement incohérentes et contradictoires, les interprétations de cette question, de sorte que je suis enclin à penser que la question ici n'est pas formulé de manière très bien.
Permettez-moi de reformuler: un exemple en est, je suis en vacances et je vais rester à une seule ville. Je veux voir TOUT QUATRE villes de départ de la mienne, et je veux voyager le moins de distance possible. Je ne peux pas voir la même ville plus d'une fois.
Votre récente édition change complètement la façon dont j'ai interprété votre question.
Oh mon dieu. Qui invalide de Floyd-Warshall à base de solution si dur qu'ils ont même l'air tout à fait ridicule 🙂
OriginalL'auteur Chris Douglass | 2009-10-02
Vous devez vous connecter pour publier un commentaire.
De répondre à la mise à jour du post, votre solution de vérification de chaque possibilité est optimale (au moins, personne n'a découvert de meilleurs algorithmes pour l'instant). Oui, c'est un vendeur ambulant, dont l'essence est de ne pas toucher à chaque ville, mais de toucher chaque ville une fois. Si vous ne voulez pas à la recherche de la meilleure solution possible, vous pouvez trouver utile d'utiliser la méthode heuristique que travailler plus vite, mais permettant un nombre limité d'écart à partir de la solution idéale.
Pour l'avenir answerers: De Floyd-Warshall algorithme et tous les Floyd-comme les variations ne sont pas applicables ici.
Merci. J'ai optimisé un peu par trouver la solution immédiate de trouver le plus court des itinéraires individuels de tous les chemin vers le bas, puis de passer au niveau supérieur et de la recherche, puis en se déplaçant à un autre niveau (etc.) Je suppose que c'est un parcours en profondeur d'abord de recherche?
Qui peut être appelé en profondeur d'abord traversée, pas recherche. Recherche vise, en visitant node, alors que votre algorithme vise, en visitant chemin, et donc plus coûteux.
On ne connaît pas d'algorithme polynomial en temps. Toutefois, cela ne signifie pas que la vérification de chaque possibilité est optimal. Il y a assez d'algorithmes sophistiqués pour le problème du voyageur de commerce et de problèmes connexes qui permettent de résoudre les grands problèmes avec l'e.g des milliers de villes
Pavel est d'utiliser le terme optimal dans le sens où il va trouver la meilleure solution (indépendamment de l'exécution de la complexité) sur n'importe quel ensemble de données.
OriginalL'auteur P Shved
Dans l'ensemble, vous devriez strictes de la mauvaise variantes...
Je pense que vous devriez utiliser certaines variations de Branch_and_bound méthode
http://en.wikipedia.org/wiki/Branch_and_bound
OriginalL'auteur Max
Ce sons voyageur de commerce-esque? Une solution est d'utiliser une optimisation de la technique tel qu'un algorithme évolutionnaire. Actuellement, vous sont en train de faire une recherche exhaustive, qui vous permettra d'être très lent, très rapidement. Mais je pense que c'est plutôt un problème du voyageur de commerce, et il a été traité pendant plusieurs décennies, voire des siècles, et tel il y a plusieurs façons possibles de l'attaque. Google est votre ami.
Je pensais que le TSP concernées savent tout point à ce qui devait être touché? Dans mon cas, il n'y a pas de points spécifiques qui doivent être inclus, juste les points qui suivent le chemin le plus court à partir d'une origine.
il y a beaucoup de saveurs de thé de, y compris ceux qui permettent à l'utilisateur de visiter le même sommet, plusieurs fois.
OriginalL'auteur zenna
Soit bredth première recherche que norheim.se dit ou L'algorithme de Dijkstra serait ma suggestion.
OriginalL'auteur
C'est peut-être ce que l'affiche originale de "itérer sur chaque possibilité manuellement et de stocker le chemin le plus court", mais j'ai pensé que je voudrais rendre explicite ce qui semble être une base de référence la solution.
Supposons que vous disposez déjà d'un à deux points de plus court chemin algorithme--cela a des solutions classiques pour les différents types de graphiques. Assumer toutes les distances sont non négatifs et d(A->B->C) = d(A->B) + d(B->C).
L'essentiel est que le chemin commence à S en va par le biais de l'une des villes intermédiaires "abcd" et se termine avec E:
par exemple SabcdE, SacbdE, etc...
Avec seulement 4 villes intermédiaires, vous énumérer toutes les 24 permutations. Pour chaque permutation utiliser votre plus courte de deux-point de l'algorithme pour calculer la trajectoire de la tête à la queue, et la distance totale.
Ensuite donné le départ et le point de fin, il y a 12 possibilités de s'emparer de celui de abcd et pour chacune des deux possibilités pour l'intérieur. Vous avez calculé ces distances déjà, donc vous ajouter sur la distance de S à la tête et la queue à l'E. Choisissez minimum. Une fois que vous avez précalculées les distances intermédiaires pour un ensemble fixe de villes de l'intérieur ce que vous devez faire 12 deux point de plus court chemin problèmes pour toute paire de points de début et fin.
Évidemment, des échelles de mal avec l'augmentation du nombre de villes intermédiaires. Il n'est pas clair pour moi qu'il pouvait faire mieux, sans vous imposer plus de restrictions sur la structure graphique (est-ce un physique Euclidenan de l'espace? Triangle de l'inégalité?).
Ma pensée exemple: supposons que tous les intermédiaires, les distances entre les villes sont en O(1). Avec pas de restriction sur le graphique, puis la distance de S à tous les niveaux intermédiaires de ville est peut-être 1000, sauf pour l'un d'être 1. De même pour la queue. Ainsi, vous pouvez forcer la première ville à être visité à être quoi que ce soit. Maintenant, passez une couche vers le bas, prendre la première ville en tant que "point de départ". Appliquer le même argument: vous pouvez faire le meilleur chemin à aller à l'une des villes suivantes en manipulant les distances indiquées dans le graphique.
Il semble donc que la complexité ne peut pas être aidé, sans hypothèses supplémentaires.
OriginalL'auteur Matt Kennel
C'est la commune et en temps réel de la situation tout on peut tomber dans.Google map de l'interface utilisateur vous donne le chemin d'accès dans le même ordre, vous ajouter dans la liste de destination. il ne vous donne pas le chemin optimal si leurs propres API Google maps fournir la solution.
De l'API Google maps fournit la solution pour cela. Dans la requête pour trouver le chemin que vous avez à offrir le drapeau 'optimizeWaypoints: true,'. La demande semble comme cela.
et vous pouvez voir tout le code de l'utilitaire dans l'affichage de la source comme utilitaire complet est développé en javascript et HTML.
J'espère que ça aidera.
OriginalL'auteur Abhishek Gahlout
Il semble que les bords de votre graphe sont bidirectionnelles. Dans ce cas, l'algorithme que vous cherchez est L'algorithme de Dijkstra.
OriginalL'auteur James Jones