C'est la première fois que je lis sur les algorithmes de retard polynomial, donc je ne suis pas sûr à 100% de ma réponse, mais je pense que quelque chose comme ce qui suit devrait fonctionner.
Choisissez une convention pour représenter les chemins qui ont un ordre total naturel défini dessus. (Un exemple serait juste de lister les sommets du chemin et de les ordonner lexicographiquement). Choisissez votre structure de données préférée sur place qui prend en charge la recherche logarithmique et insérez (par exemple, un arbre rouge-noir). Soit votre graphique<DG
Définissez un algorithme :F
F(s,t,G,∗D) :
(ici signifie une référence à une infrastructure de données in situ )∗DD
- exécutez votre algorithme poly-temps pour renvoyer une paire de chemins bord-disjoints avec de à .(P,Q)P<Qst
Si se trouve pas dans .(P,Q)D
2.1. Insérez dans (et sortez si vous êtes supposé sortir pendant que l'algorithme s'exécute).(P,Q)D
2.2. Pour chaque bord exécutezuv∈E(P∪Q)F(s,t,G−{uv},∗D)
Maintenant, pour énumérer tous vos chemins, créez un vide et pour chaque paire avec (si le graphique n'est pas orienté, sinon) exécutez . Vous afficherez chaque chemin la première fois que vous les verrez, et vous aurez également une belle structure de données consultable qui contient tous les chemins lorsque vous avez terminé. Notez que cet algorithme s'exécute également en temps polynomial dans la taille de l'entrée + sortie (tout comme n'importe quel algorithme de retard polynomial).Ds,t∈V(G)s<ts≠tF(s,t,G,∗D)
Je doute que ce soit la meilleure façon de le faire, en particulier cette approche n'est pas dans (en taille de l'entrée). Je pense qu'en réfléchissant bien, vous pourriez trouver quelque chose qui fonctionne dans , bien qu'il ne puisse pas construire la structure de données au fur et à mesure.PSPACEPSPACE