Je ne suis pas d'accord avec Hooked. Organigrammes, avec certaines restrictions (l'utilisation de boucles est PAS l'un d'entre eux), sont planaires. Quelques exemples:
- Une commande primitive unique se traduit par une courbe plane (un seul nœud)
- une séquence d'instructions: si les états peuvent être convertis en les graphes planaires, la séquence peut elle-même être converti en un plan graphique (simplement en connectant les sous-graphes)
- une fonction: le même que ci-dessus
- une boucle (
repeat-until
, while-do
, etc) est une séquence d'instructions qui forme un cycle. Les cycles sont bien aussi, tant qu'ils nichent correctement (et ces constructions sont conçues pour imbriquer correctement).
- GOTO (
goto
ou break
/continue
/return
déclarations qui peuvent sauter) sont pas ok. Si vous avez une boucle imbriquée, et de l'intérieur que vous sautez hors de la boucle externe, un tel arc croiserait clairement le cycle (boucle, fonction) qui le contient. Si le code est traduit pour quitter une boucle à la fois, ceux-ci sont bien aussi. (Cette traduction n'est pas trop différente de la simple introduction de nœuds pour modéliser les intersections).
Il doit y avoir un moyen de prouver formellement plus systématique qu'un organigramme provenant de compositions d'un ensemble particulier de constructions est plane, je voudrais pouvoir penser en 5 minutes, mais pas de chance :)
mise à jour: Soit dit en passant, goto
s peut trivialement créer un K3,3 ou K5, par exemple ceci est un K5 (en bon vieux QBasic!):
00 GOTO (INT(RND * 5) * 10)
10 GOTO (INT(RND * 5) * 10)
20 GOTO (INT(RND * 5) * 10)
30 GOTO (INT(RND * 5) * 10)
40 GOTO (INT(RND * 5) * 10)
Salut Hooked mon organigramme devrait modéliser c boucles de style impératif lassique (telles que repeat-until ou while-do). J'ai vu quelques approches qui génèrent des mises en page planaires.Cependant, dans le cas où cela n'est possible que via l'ajout de nœuds (pas sûr) alors vous avez bien sûr raison. Je rappelle que la détection des (sous) graphes complets K3,3 et K5 dans un graphique prouve la non-planarité. Je suis au courant de Graphviz et l'utilise depuis un certain temps maintenant. Depuis la version 2.22 que j'utilise, il n'y a pas de moteur de mise en page spécifique aux organigrammes. Cordialement, -kavi –
Vous avez raison de dire que la détection de sous-graphes complets de K3,3 et K5 pourrait prouver/réfuter la planarité (théorème de Kuratowski), mais cette méthode est un problème NP-complet. Il y a aussi des approches O (N^3) pour la planéité. Quant à GraphViz, je faisais référence à la mise en page 'point', qui dessine une mise en page 'assez bonne' chaque fois que j'ai besoin d'un organigramme. Si vous n'aimez pas ce que vous voyez, vous pouvez toujours tweek un élément à la main. Bonne chance! – Hooked
Les tests de planéité peuvent être effectués en temps linéaire: Tests de planéité efficaces (Hopcroft, Tarjan, 1974) (http://portal.acm.org/citation.cfm?id=321852) –