Comment réduire le nombre d'arêtes croisées dans un diagramme?


10

Je travaille sur un éditeur de diagrammes. Les diagrammes affichent des formes 2D ( nœuds ) connectées à des connecteurs ( bords ).

Je voudrais ajouter une opération qui, étant donné une sélection de nœuds, les "démêle" : elle les repositionne pour réduire le nombre d'arêtes croisées, si possible (et ça va si les arêtes doivent être dessinées avec des points de pliage) .

Je veux donc un algorithme de graphe qui, étant donné une incorporation de graphe ( topologique ) et un sous-ensemble de ses nœuds, modifie l'incorporation (sa topologie ) sur ces nœuds uniquement afin de minimiser le nombre d'arêtes croisées.

En lisant les graphiques des sommets et en parcourant Cabello et Mohar (2013) , je suppose que ce problème est difficile à NP. Je serai donc satisfait d'un algorithme paramétré (par exemple, sur le nombre d'arêtes croisées) qui a une complexité temporelle polynomiale connue pour une valeur de paramètre donnée. Cela semble faisable, mais je ne trouve pas facile de trouver un tel algorithme par moi-même.

Des questions:

  • Où chercher un tel algorithme?
  • Existe-t-il?
  • Dans les logiciels existants?
  • Existe-t-il une expérience pratique significative avec une telle opération? (Ce qui semble bon en théorie peut ne pas être aussi bon en pratique, ou vice versa.)

(Je ne sais pas où mieux poser cette question: ici, sur StackOverflow, ou MathOverflow?)


1
Je suppose que la question peut être mieux adaptée à StackOverflow, mais j'ai remarqué que des questions similaires ont des réponses insatisfaisantes. Je vais poursuivre avec une réponse qui devrait vous aider sur le plan théorique, mais il est peut-être préférable que votre question y soit migrée.
mdxn

Il y a un travail très approfondi en cours ici: complang.tuwien.ac.at/cd/ebner/ebner05da.pdf
Dschoni

Merci! Non seulement cela, mais c'est clairement une présentation très lisible du problème et un aperçu de certaines approches bien connues.
reinierpost

Réponses:


9

NP-hard

Le problème posé dans la question est en fait plus difficile et plus complexe que ce qui précède. Vous envisagez des nœuds de graphique d'une certaine taille et forme tout en délimitant également la taille (zone) du résultat. De plus, une notion d'esthétique non encore déterminée est souhaitée. Évidemment, nous voulons une heuristique pour cela, qui n'utilise pas le minimum absolu dans le cas général. Le nombre de nœuds rencontrés dans une telle application n'est probablement pas énorme dans le cas moyen. Il peut être possible de dessiner la version à franchissement de bord minimal du graphique pour les petites tailles.

Ressources:
Vous pouvez être intéressé par les ressources suivantes, en particulier avec la première:

Il existe également de nombreuses autres ressources. Ces informations devraient vous aider à démarrer.

Réflexions et observations supplémentaires:

Voici une idée pour contourner les problèmes concernant la forme et la taille des nœuds. Étant donné le graphique (nœuds infiniment petits), développez chaque nœud tout en «poussant» ou en pliant les bords (par ex. En utilisant des splines tout en imposant une limite de proximité). Vous devez le faire avec d'autres arêtes et nœuds qui gênent, ce qui peut déclencher une réaction en chaîne. Regardez comment un équilibre peut être calculé efficacement (ex. Structures moléculaires). Si vous ne pouvez pas obtenir la forme d'un nœud à la taille souhaitée, mettez l'échelle à l'échelle.

Un utilisateur peut apprécier les résultats d'un algorithme aléatoire. Ils peuvent utiliser votre fonctionnalité plusieurs fois jusqu'à ce qu'ils obtiennent quelque chose qu'ils aiment. Évitez le calcul redondant dans ce cas (pas besoin de calculer à nouveau un numéro de passage).


J'ai ajouté la topologie à ma question spécifiquement pour éviter la discussion de l'esthétique. C'est important, mais je ne pense pas qu'ils affectent beaucoup le problème de base - je pense qu'ils peuvent être traités dans une étape distincte, après avoir ajusté la topologie des nœuds (c'est-à-dire quels nœuds sont entourés par quels autres nœuds).
reinierpost

J'ai utilisé Graphviz pour la première fois il y a plus de 15 ans; Je l'utilise environ une fois par semaine pour toutes sortes de graphiques. Je ne suis pas trop impressionné par ses résultats, et je comprends qu'il est difficile de faire beaucoup mieux.
reinierpost

Je visite souvent graphviz.org et j'ai lu certains des articles auxquels ils se réfèrent. Mais je n'ai pas encore rencontré de réponse à cette question spécifique, et ce n'est pas dans ma description de travail de me familiariser avec la littérature. C'est pourquoi je le pose ici.
reinierpost

Merci pour les références - je remarque que ce sont des recherches en cours .
reinierpost

La première chose que j'essaierai est un algorithme trivial (et donc pas nécessairement utile) basé à peu près sur l'idée de Mme Shabbeer. Merci encore.
reinierpost
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.