2011-03-14 3 views
1

Je me demande comment je peux attribuer une valeur de coût maximum pour le problème du chemin le plus court. Dans mon problème, j'ai des risques associés aux nœuds. Donc je voudrais minimiser le risque, mais alors que je veux qu'il trouve une solution avec un nombre limité de nœuds (par exemple trouver le minimum de risque du nœud A au nœud B, tout en veillant à ce que la solution n'excède pas n nombre de nœuds) beaucoup.Comment restreindre l'algorithme du plus court chemin - dijkstra avec un coût maximum?

Répondre

2

Dijkstra est la meilleure première recherche, c'est-à-dire que nous devrions être sûrs, que la distance au meilleur nœud ne deviendra jamais meilleure. Cela fonctionne pour le minimum-Dijkstra avec des bords non négatifs. Dans le cas général, vous pouvez utiliser Ford-Bellman. Si vous ne voulez pas utiliser plus de n sommets, je peux vous suggérer une programmation dynamique dp [vertex] [used_vertex_count] avec des états de complexité O (| V | * n) et de mémoire et O (| E | * n) temps. Ou créez une matrice d'adjacence du graphe avec des zéros sur la diagonale principale et l'infini sur le bord absent et calc n est l'exposant. a_ {ij} sera min path de i à j n'utilisant pas plus de n vertexes.

0

Je pense qu'un algorithme impliquant des heuristiques serait le mieux adapté ici, l'heuristique étant une notion de la «proximité» du but à chaque étape et du nœud qui vous rapproche du but. Sans cela, je pense que nous aurions besoin d'exécuter un algorithme exponentiel dans le pire des cas (ce qui serait lorsque l'objectif ne peut être atteint en utilisant seulement n nœuds.) Dans ce cas, nous examinerons tous les chemins qui utilisent n nœuds avant de conclure que le problème ne peut pas être résolu). Voici un exemple d'utilisation d'un algorithme non heuristique: Exécuter Dijkstra de manière régulière en sélectionnant le nœud avec un risque min. En cours de route, gardez une trace du nombre de nœuds que vous avez visités. Si le nombre de nœuds dépasse n, abandonnez votre itinéraire actuel et revenez en arrière sur un nœud précédent et utilisez le nœud présentant le risque le plus faible suivant. Naturellement, vous ne pouvez pas faire marche arrière d'un seul niveau au-dessus de n, car si le but était au niveau suivant, il aurait été choisi. Par conséquent, vous revenez au niveau n-2 et continuez. Cela aussi sera exponentiel car il n'y a pas de véritable moyen de déterminer la non-existence sans vérifier tous les chemins.

Il se pourrait aussi qu'il me manque quelque chose.

-1

Vous souhaitez utiliser l'algorithme de Prim car il trouve tout l'arbre couvrant minimal dans le graphe donné. Ensuite, il est facile de sélectionner le mst avec la contrainte désirée.

Questions connexes