J'ai un grand ensemble de réseaux linéaires et je voudrais trouver les deux extrémités de chaque réseau qui sont les plus éloignées l'une de l'autre le long du réseau (sur l'image ci-dessous, ce serait D à K). La solution par force brute à ce problème est de calculer le chemin le plus court le long du réseau pour chaque paire d'origine, mais j'ai des centaines de réseaux avec des milliers d'extrémités, donc le calcul de chaque chemin possible est assez lourd.
Existe-t-il un moyen optimal de calculer cela sans utiliser la force brute? Puis-je exclure certains points en fonction de règles intelligentes?
EDIT: J'ai ajouté une illustration du plus long chemin mentionné par @Alex Tereshenkov afin de clarifier ma question. Le chemin noir est le résultat de l'algorithme du chemin le plus long (le chemin le plus long sans répéter aucun sommet). Dans mon cas, imaginez que vous entrez dans le réseau à partir de l'une des lettres et que vous devez conduire vers une autre lettre aussi vite que possible. Quelles sont les deux lettres les plus difficiles à joindre?
Réponses:
Je pense que vous cherchez peut-être le diamètre du graphique de votre réseau. Il y a quelques questions sur stackexchange qui mentionnent ce sujet, par exemple:
La plupart des algorithmes suggèrent de calculer d'abord les "chemins les plus courts toutes paires" et de sélectionner les plus longs, mais j'ai trouvé un article de blog de Koushik Narayanan qui suggère une approche alternative qui pourrait être plus optimale (je n'ai pas vérifié), qui itère sur chaque sommet et trouve sa paire la plus éloignée:
la source
Selon la page Wikipedia Problème de chemin le plus long , ce problème
Si vous travaillez avec (ou pouvez représenter votre graphique comme DAG ), le
networkx
package Python vous permettra de le calculer. Recherchez la fonctiondag_longest_path
.À moins que je manque quelque chose, vous devrez calculer la longueur entre les nœuds du graphe et les trier, ce qui, malheureusement, ne fonctionnera qu'en temps linéaire , c'est-à-dire qu'il n'y a pas d' algorithme efficace pour cela.
la source