Suche Algorithmus zum Erstellen eines planaren Graphen

Alan47

Mitglied
Hallo zusammen,

nachdem ich jetzt schon eine ganze Weile erfolglos das Web durchsucht habe, dachte ich, ich stelle diese Frage einmal hier, obwohl es jetzt nicht ganz unmittelbar mit Java verbunden ist (auch auf das Risiko hin, dass es eventuell eine blöde Frage sein könnte...).

Und zwar habe ich ein Java-Programm, welches als visuelle Ausgabe einen Graphen auf ein Panel zeichnen soll. Die Knoten und Kanten (also wie viele Knoten es sind und welcher Knoten mit welchem verbunden ist) werden dabei vom Programm berechnet, der Graph dient als Ausgabe. Mein Problem ist, dass ich jetzt einen Algorithmus bräuchte, der mir diese Knoten auf dem Panel anordnet, und zwar nach Möglichkeit so, dass sich keine Kanten überkreuzen. In Ermangelung eines Überbegriffs für einen solchen Algorithmus war es für mich entsprechend schwierig, danach zu suchen.

Nochmal die Ein- und Ausgabe des gesuchten Algorithmus:

Eingabe:
- Liste von Knoten
- Liste von (geraden) Kanten, jede Kante kennt Anfangs- und Endknoten

Gewünschte Ausgabe:
- X/Y Position für jeden Knoten aus der ersten Liste sodass...
- ... sich die Kanten in der zweiten Liste visuell nicht überkreuzen


Es muss gar nicht in Java geschrieben sein, Pseudocode oder reine Beschreibung eines Algorithmus' wäre völlig ausreichend, auch näherungsweise Algorithmen wären in Ordnung, das Ergebnis muss nicht perfekt sein. Ein Professor an der Uni hat mir erzählt, dass dies u.A. ein aktuelles Forschungsfeld in der Informatik sei, aber wirklich konkret was dazu zu finden, hat sich als schwierig herausgestellt. Wenn mir jemand einen Überbegriff nenen könnte, wie man solche Algorithmen allgemein bezeichnet, wäre mir auch schon sehr geholfen!


Gruß,


Alan


PS: Mir ist bewusst, dass solche Algorithmen existieren und zum Beispiel in "GraphViz" bereits implementiert sind. Ich möchte es aber nach Möglichkeit (aus reinem Interesse) lieber selbst implementieren anstatt auf eine Bibliothek zurückzugreifen.
 

Empire Phoenix

Top Contributor
Hm als ganz primitiven Algorithmus würde ich ja ein Backtracking vorschlagen.

Imme einen Weiteren knoten hinzufügen, solange Bedingung mit überschneiden nciht verletzt.
Wenn verletzt, schritt rückgängig und mit anderen Knoten, bzw gleichen Knoten auf andere position weitermachen. Wenn alle möglichkeiten durch und keine gültig, nochmal rückgängig machen und so weiter.

Die Laufzeit hierbei ist zwar nicht all zu toll, jedoch besser als bei reinem Bruteforce, da alle Fälle mit mehrfachen Konflicken wechgelassen werden.

Backtracking ? Wikipedia
 

Marco13

Top Contributor
Ganz allgemein: "Layout-Algorithmen" (für Graphen). Die Überschneidungen zu minimieren ist tatsächlich schwer. Ein konkretes Paper könnte ich auch nicht nennen - da gibt's einfach ZU viele verschiedene Ansätze, Implementierungen, Spezialfälle, Schwerpunkte... Und auf sowas wie layout planar graph minimize edge crossings - Google Search bist du vielleicht auch schon gekommen :oops:


EDIT: Boah, nicht mal um halb drei kann man hier was schreiben, ohne dass einem einer ein paar Minuten zuvorkommt :mad: ;)
 
D

Dow Jones

Gast
Google mal nach Sugiyama, Tagawa und Toda, die haben ein recht bekanntes Verfahren dafür angegeben. Es verarbeitet die Knoten in drei Phasen und kommt dabei leider nicht immer zur optimalen Lösung, aber dafür ist es ganz gut verständlich und implementierbar.
 

Gregorrr

Bekanntes Mitglied
Graphen zu Zeichnen hängt i.d.R. davon ab, in welcher Domäne man sich befindet. Ein Graph steht ja i.d.R. nicht für sich, sondern ist eine Visualisierung eines mathematischen Modells, dass man als Graph modelliert.

Es gibt unendlich viele Repräsentationen eines Graphen => Soll er z.B. hierarchisch angeordnet sein, dürfen sich die Kanten alle nicht schneiden (d.h. planar sein, wobei es Graphen gibt, die nicht planar sind, z.B. der K5), sinds normale Graphen/Digraphen, usw.

Hier hast du eine ganze Vorlesung darüber: Automatisches Zeichnen von Graphen

Du kannst ja mal in die Bib gehen und dir eins der Bücher ausleihen: GD books
In denen werden ganze Frameworks beschrieben, wie man Graphen zeichnen kann.

Hier ist eine Open-Source Implementierung eines Frameworks: OGDF - Open Graph Drawing Framework: tech:layouter

Anfangen könnte man, z.B. bei der Untersuchung ob ein Graph überhaupt planar ist, wenn ja, dann kann man diesen z.B. durch direkte Linien Layouts miteinander verbinden. Ist dieser nicht planar, dann teilt man diesen in planare Untergraphen auf und führt das Linien-Layout auf den Untergraphen aus.

Eventuell ist es auch einfach mit einer guten Verteilung der Knoten im Raum geschehen. Das dürfte fürs erste doch reichen.

Graphen zu Zeichnen ist ein Stoff für Bachelor, Master, Dr.-Arbeiten, usw. Problemstellung skaliert gut^^

[Edit:] Sugiyama, Tagawa und Toda ist in den Vorlesungsunterlagen der Uni Dortmund gut erkärt - mit Pseudocode
 
Zuletzt bearbeitet:

Alan47

Mitglied
Hallo Leute,

danke für eure Antworten & Anregungen! Ich werde versuchen, mich in den nächsten Tagen ein wenig in die Materie einzulesen, falls dabei Fragen auftauchen sollten werde ich sie hier posten - einstweilen vielen Dank an alle für die raschen Antworten!


Gruß,


Alan
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Suche Algorithmus zur bestimmung des längsten Wegs Allgemeine Java-Themen 3
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
M Binäre Suche Allgemeine Java-Themen 6
M geometrische Suche Allgemeine Java-Themen 8
S Programm schreiben, das mir aufgrund von Schlagwörtern, die ich im Internet suche, relevante Themen sofort anzeigt. Allgemeine Java-Themen 1
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
W Suche Ursache für NPE - woher kommt sie? (Hilfe beim Debugging) Allgemeine Java-Themen 19
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
O Suche Scripter für alt:V Project! Allgemeine Java-Themen 0
D Suche Quellcode! Allgemeine Java-Themen 8
O Suche Unterstützung für ein OpenSource-Projekt (grafischer Editor) Allgemeine Java-Themen 13
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
J Suche Alternative zu Jasper Reports Allgemeine Java-Themen 4
W Collections Suche etwas Sorted-List-Artiges...hat jemand eine Idee? Allgemeine Java-Themen 13
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
S Warmup für Lineare-Suche mit Zeitmessung Allgemeine Java-Themen 2
K OOP Suche Hilfe + Erklärung für eine Hausaufgabe Allgemeine Java-Themen 1
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
D Objekt-Suche mit mehreren optionalen Parametern Allgemeine Java-Themen 6
A NetBeans Suche Programmierer für eine Belegarbeit Allgemeine Java-Themen 11
O Suche größeres Beispiel für WebserverAnwendung mit Java Allgemeine Java-Themen 2
G Google-Suche ist nicht auslesbar?! Allgemeine Java-Themen 18
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
L Suche nach CalDav Server API Allgemeine Java-Themen 0
HarleyDavidson Best Practice Suche "Container" für Modulapplikationen Allgemeine Java-Themen 0
S Suche Konzept: Korrektheit des Aufrufers feststellen Allgemeine Java-Themen 7
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
B Suche geeignete Datenstruktur Allgemeine Java-Themen 5
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
L Suche Geräte für Java SE Embedded Allgemeine Java-Themen 0
S Rekursive Suche in einem Netz Allgemeine Java-Themen 5
F Über Java Google Suche nutzen Allgemeine Java-Themen 11
A Suche Android Programmierer Allgemeine Java-Themen 0
W Suche Framework zur Prüfung von IPv4 und IPv6 Allgemeine Java-Themen 2
A Java - Suche nach Datensatz mit DateChooser Allgemeine Java-Themen 0
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
M Suche Framework/API für Monitoring-Anwendung Allgemeine Java-Themen 3
F Suche kostenlose GUI für Eclipse Allgemeine Java-Themen 10
H Suche mit Wildcards und boolschen Operatoren Allgemeine Java-Themen 4
B Suche passende Datenstruktur für 2 Einträge Allgemeine Java-Themen 19
A Binäre Suche im Array mit StackOverflowError Allgemeine Java-Themen 3
T Verkettete Suche Allgemeine Java-Themen 6
S RxTx - langsame Port suche Allgemeine Java-Themen 3
D Suche Matrix Libraries Allgemeine Java-Themen 11
S Suche Dependency Injection Container Allgemeine Java-Themen 6
J Suche: Tool zum Auffinden gleichnamiger Klassen (Name und Package gleich) in unteschiedlichen JARs Allgemeine Java-Themen 5
BinaryLogic Input/Output Suche Wörterbuch-Datei Einzahl/Mehrzahl Allgemeine Java-Themen 2
D Suche Librarys ähnlich datatables.net + Login Allgemeine Java-Themen 3
Gossi Threads Suche ein (einfaches) Beispiel Allgemeine Java-Themen 5
P Erste Schritte Suche in ArrayList mit Maps Allgemeine Java-Themen 4
F Suche Performanceoptimierung bei Stringsortierung Allgemeine Java-Themen 51
B Suche Datenquelle für lizenz-informationen Allgemeine Java-Themen 5
J Lucene suche in Json (CouchDB) Allgemeine Java-Themen 2
X Suche Softwareimplementierung von Cryptographischen Algorithmen Allgemeine Java-Themen 3
S Suche Tipps für Einstieg in JavaCC Allgemeine Java-Themen 2
R Suche in logfiles mit Lucene / Solr Allgemeine Java-Themen 2
P Suche Datenstruktur Allgemeine Java-Themen 2
M Suche Java-Projekt zum Thema Elektrotechnik Allgemeine Java-Themen 6
F Suche Begriff Allgemeine Java-Themen 2
hdi Suche Icon-Sammlung Allgemeine Java-Themen 7
G Suche "richtiges" Framework/Library Allgemeine Java-Themen 14
slawaweis Suche Klassen für Event Managment und Time Allgemeine Java-Themen 2
P Probleme mit wikipedia quellcode zur binären Suche Allgemeine Java-Themen 6
C Suche Permutationsalgo Allgemeine Java-Themen 6
E Suche nach Foto-Dummy Allgemeine Java-Themen 8
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
N suche globale Tastenabfrage Allgemeine Java-Themen 6
P SUCHE: gute Geo Library (freeware) Allgemeine Java-Themen 2
P Suche performante PDF Library Allgemeine Java-Themen 20
data89 Bilder mit Java prüfen - suche dringend Hilfe Allgemeine Java-Themen 8
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
S Suche im JTree nach Neuaufbau Allgemeine Java-Themen 4
W Problem bei der Suche (binarySearch) vom deutschen Sonderzeichen "ß" im einem Array Allgemeine Java-Themen 6
D Suche nach passender Datenstruktur Allgemeine Java-Themen 4
S suche library die diagramme darstellen kann Allgemeine Java-Themen 2
T Suche Anhaltspunkt für plattformübergreifende, "unique machine id" ... Allgemeine Java-Themen 12
P WebSerive Suche Allgemeine Java-Themen 15
hdi Suche nach Begriff aus der Programmierung Allgemeine Java-Themen 11
X Suche Java Klasse die Feiertage berechnen kann Allgemeine Java-Themen 2
B suche Deutsche Übersetzung für neuste Eclipse Version Allgemeine Java-Themen 6
Daniel_L Suche nach ganzen Wörtern (wholeword) in Strings? Allgemeine Java-Themen 4
G Regex-Suche nach Worten Allgemeine Java-Themen 3
Antoras Suche Projektarbeit für Gruppe mit 3 Leuten Allgemeine Java-Themen 5
G Perfomante Suche in grosser Datei Allgemeine Java-Themen 6
T Suche Tool Allgemeine Java-Themen 11
D Suche sowas wie Map nur für mehrere Werte Allgemeine Java-Themen 13
D Suche Hilfe zum Rechnerübergreifenden Dateizugriff. Allgemeine Java-Themen 3
M suche speziellen Sortieralgorithmus Allgemeine Java-Themen 3
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
T Suche den großen Calendar Thread ! Allgemeine Java-Themen 2
P Suche Benis IP/Netzwerkadresse JTExtField Allgemeine Java-Themen 2
J Suche Doku um generischen Code zu erstellen. Allgemeine Java-Themen 9
G suche Property alternative Allgemeine Java-Themen 4
C Fehler im Quellcode. Suche in einem Baum Allgemeine Java-Themen 3
S Suche Pendant zu einem VB Befehl Allgemeine Java-Themen 2
T Suche gute JAVA Steuerelemente Allgemeine Java-Themen 2
V Suche RegEx zu (gelöstem) Problem Allgemeine Java-Themen 3
B Suche Browser-Control Allgemeine Java-Themen 4
G Suche Programmierumgebung mit Appletviewer Allgemeine Java-Themen 16

Ähnliche Java Themen

Neue Themen


Oben