Chemin le plus court sans intersection pour un graphe intégré dans un plan euclidien (2D)

14

Quel algorithme utiliseriez-vous pour trouver le chemin le plus court d'un graphe, qui est intégré dans un plan euclidien, de telle sorte que le chemin ne contienne aucune auto-intersection (dans l'incorporation)?

Par exemple, dans le graphique ci-dessous, vous souhaitez passer de . Normalement, un algorithme comme l'algorithme de Dijkstra produirait une séquence comme:(0,0)(-3,2)

[(0,0)3(0,3)2(1,2)4(-3,2)]=sept+2.

Graphique complet:

entrez la description de l'image ici

Le plus court chemin:

entrez la description de l'image ici

Chemin le plus court sans intersection:

entrez la description de l'image ici

Cependant, ce chemin se croise sur le plan euclidien, donc je veux un algorithme qui me donnerait la séquence sans intersection la plus courte, dans ce cas:

[(0,0)3(0,3)3(0,6)5(-3,2)]=11.

Ce chemin est plus long que le chemin le plus court, mais c'est le chemin le plus court sans intersection.

Existe-t-il un algorithme (efficace) qui peut le faire?

Sources TikZ

Realz Slaw
la source
2
Joli problème! (+1). Pouvez-vous nous parler de l'application ou du contexte dans lequel ce problème se pose? Je suis intrigué. (PS Sur une note distincte: le moyen évident de sortir de cette énigme est de voir si vous pouvez introduire un nouveau sommet pour chaque point d'intersection, c'est-à-dire chaque point où une arête peut croiser une autre arête. Cependant, je me rends compte que pour certaines / beaucoup d'applications cela pourrait ne pas être possible.)
DW
2
@DW c'est moi qui reformule le problème des ânes / poneys brûlants mal formulés de Babibu ; l'application est son algorithme heuristique Euclidean TSP, je ne sais pas exactement comment il a l'intention de l'utiliser, mais j'imagine qu'il veut savoir s'il peut trouver un chemin entre deux points, alors qu'il en a déjà visité plusieurs autres (la tournée optimale d'Euclidean TSP sera être sans intersection). Et oui, si vous pouvez introduire de nouveaux nœuds, ce serait formidable, mais la question est de savoir si vous ne pouvez pas (et bien sûr, vous ne pouvez pas introduire de nouvelles villes pour le TSP euclidien).
Realz Slaw
1
Permettez-moi d'essayer de convertir le problème d'existence de chemin d'accès en 3SAT. Trouver un moyen de traverser deux signaux sans traverser deux voies semble être le plus grand défi.
John Dvorak
1
Oui. Je voulais dire résoudre SAT à travers cela.
John Dvorak
2
n

Réponses:

11

Il est NP-complet de décider même s'il existe un chemin.

Il est clairement possible de vérifier qu'un chemin donné est un chemin valide dans le graphique donné. Ainsi, le problème de longueur limitée est dans NP, tout comme son sous-ensemble, le problème de tout chemin.

Maintenant, pour prouver la dureté NP du problème de tout chemin (et donc du problème de longueur limitée), réduisons SAT-CNF à ce problème:


La structure globale est une grille de morceaux de fil contiguës à une colonne de morceaux de clause. La formule logique est satisfiable si il existe un chemin sans intersection à travers le graphique.

Il est impossible de croiser deux parties du chemin, mais il est nécessaire de croiser deux fils logiques. Au contraire, le flux du chemin est strictement donné: un point de fil est donné par deux nœuds. La séquence des points de fil à travers lesquels passe le chemin est forcée par la réduction. La logique est représentée par le nœud choisi. N'importe quel chemin peut être choisi tant qu'il passe par tous les points de fil.

Dans ce diagramme, le chemin est représenté par la courbe rouge et le flux logique est représenté par les fils noirs:

grille de fils à gauche, colonne de pièces de clause à droite.

Maintenant, construisons chaque composant.


Le câblage utilise trois tuiles: le croisement, le point de branchement et le fil vertical. Commençons par le plus difficile:

L'idée de base derrière la traversée est de préparer un chemin pour chaque paire de points de fil et de plier suffisamment les chemins possibles pour que toutes les paires, sauf celles qui codent la même logique (chemins compatibles), se croisent. Bien sûr, nous ne pouvons pas simplement dire que deux arêtes parallèles se croisent, mais nous pouvons introduire des nœuds d'ordre 2 supplémentaires pour que deux chemins se croisent.

En supposant que les chemins viennent du nord à l'ouest et du sud à l'est, nous pouvons: collecter chaque chemin du nord avec son chemin compatible d'est sur une ligne (certains chemins incompatibles se croiseront); croiser chaque paire entre elles en inversant l'ordre des paires; répartissez les chemins vers leurs extrémités sud et ouest. Ceci est mieux expliqué par un diagramme. Ici, chaque paire de nœuds représente un point de fil. Les chemins avec le même code couleur (portant la même logique) ne se croisent pas, les chemins avec un code couleur différent:

représentation graphique de ce qui précède

Le point de branchement et le fil vertical fonctionnent de la même manière, mais il y a moins de chemins à corréler:

deux paires de chemins suffisent ici.  Le fil est essentiellement un point de branchement avec la branche détruite

¬UNE¬B

entrez la description de l'image ici

Il est possible de généraliser cette réduction pour coder un arbre arbitraire de portes ET et OU en ramifiant le fil de lecture de manière différente. En particulier, SAT-CNF et SAT-DNF sont tous les deux possibles à réduire au problème de chemin sans intersection de la manière décrite ci-dessus.

John Dvorak
la source
Wow, bravo homme. Je ne l'ai pas encore revu, mais le travail que vous y avez fait est incroyable.
Realz Slaw
OK, je veux juste résumer ma compréhension: en utilisant le premier gadget, on peut croiser deux paires de chemins littéraux et conserver les chemins utilisés. Par conséquent, il n'est pas nécessaire de se soucier de la planarité pour tracer les chemins (comme le fait le gadget xor dans PlanarCircuitSat pour les circuits). Ensuite, en utilisant le gadget final, on peut créer des clauses logiques arbitraires (sans avoir à se soucier de la planarité). Est-ce correct?
Realz Slaw
Cela semble correct, mais vous devez vous assurer de deux choses pour une mise en page générale: que vous êtes en mesure d'alimenter tous les gadgets avec un chemin NIP (cela devrait toujours être possible - si un chemin reste bloqué au centre, vous pouvez introduire des gadgets filaires pour rapprocher les extrémités du chemin) et que tous les chemins du fil de lecture se croisent de telle sorte qu'il n'est pas possible de s'inverser à l'intérieur du fil (il me semble que c'est garanti s'il n'y a pas de clauses vraies ( ne traversant aucun littéral) et si toutes les clauses se trouvent à l'extérieur du circuit (sur la même face le début et la fin le sont)).
John Dvorak
il est facile de s'assurer que tous les chemins dans le fil de lecture se croisent - si vous voulez en être sûr, dérivez simplement n chemins, puis traversez-les tous immédiatement. Je pense cependant que ce n'est jamais nécessaire.
John Dvorak
1
J'ai utilisé OpenOffice Draw pour la structure globale et [yEd] (www.yworks.com/products/yed) pour le reste. Dois-je le modifier en (avec <sub>)?
John Dvorak
-1

le problème semble dater de Turan 1944. cela ressemble à un bon aperçu de la théorie et des algorithmes, le nombre croisé de graphiques: théorie et calcul par Mutzel. wikipedia a quelques informations sous le nombre de graphiques croisés

vzn
la source
1
Peut-être que c'est mieux comme commentaire?
Juho
il répond scientifiquement à la question de base "quel algorithme utiliseriez-vous"
vzn
1
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
John Dvorak
jan cite une référence de la méta stackexchange. bien que ce soit une idée valable, le rôle des citations en science / mathématiques est différent d'un site de conseils de programmation .... [certes, la référence n'est pas disponible pour moi actuellement pour une réponse plus détaillée] .. de toute façon il est tout à fait possible quelque chose comme La construction de jans, bien qu'utile / utile, est déjà dans la littérature et dans la science, sa part du processus standard / des meilleures pratiques pour [tenter de] la localiser ....
vzn