J'ai donc pensé que cette question (quoique quelque peu basique) appartenait ici:
Disons que j'ai un graphique de taille 100 nœuds disposés en 10x10 (pensez à l'échiquier). Le graphique est non orienté et non pondéré. Se déplacer dans le graphique implique de déplacer trois espaces vers l'avant et un espace à droite ou à gauche (semblable à la façon dont un chevalier d'échecs se déplace sur une planche).
Étant donné un nœud de début fixe, comment trouver le chemin le plus court vers un autre nœud sur la carte?
J'ai imaginé qu'il n'y aurait qu'un bord entre les nœuds qui sont des mouvements viables. Donc, étant donné ces informations, je voudrais trouver le chemin le plus court d'un nœud de départ à un nœud de fin.
Ma pensée initiale était que chaque bord est pondéré avec le poids 1. Cependant, le graphique n'est pas orienté, donc Djikstras ne serait pas un ajustement idéal. Par conséquent, j'ai décidé de le faire en utilisant une forme modifiée d'une première recherche approfondie.
Cependant, je ne pouvais pas pour la vie de moi visualiser comment obtenir le chemin le plus court en utilisant la recherche.
Une autre chose que j'ai essayée était de mettre le graphique sous forme d'arbre avec le nœud de départ comme racine, puis de sélectionner le résultat le moins profond (numéro de ligne le plus bas) qui m'a donné le nœud final souhaité ... cela a fonctionné, mais était incroyablement inefficace, et donc ne fonctionnerait pas pour un graphique plus grand.
Quelqu'un a-t-il des idées qui pourraient me diriger dans la bonne direction à ce sujet?
Merci beaucoup.
(J'ai essayé de mettre une visualisation du graphique, mais je n'ai pas pu le faire en raison de ma faible réputation)
O(|E|)
, tandis que Dijkstra l'a faitO(|E| + |V|log(|V|)
.O(mn)
alors que BFS estO(V + E)
Nicolas a déjà fourni une réponse parfaite. Cependant, permettez-moi d'aborder votre tentative initiale d'utiliser la recherche en profondeur d'abord.
Tout d'abord, soit Dijkstra (qui fonctionne très bien avec des nœuds non pondérés comme l'a noté Nicholas Mancuso), soit une recherche en premier lieu entraîne un gaspillage exponentiel de votre mémoire. Leur avantage, cependant, est qu'ils ne ré-étendent jamais aucun nœud alors qu'ils sont assurés de trouver des solutions optimales. Malheureusement, leur limitation est assez importante et il ne faut pas s’attendre à ce qu’elles s’élargissent raisonnablement.
À votre santé,
la source