Komplexe Algorithmen implementieren

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo an alle,

ich habe schon öfter kleinere Fragen in diesem Forum gestellt und war immer begeistert von der Lebendigkeit dieses Forums. Darum wende ich mich auch diesmal an euch, in der Hoffnung, dass mir jemand vielleicht ein paar Impulse, Ideen oder sonst was geben kann.

Und zwar habe ich etwa 3 bis 4 Monate Zeit, und muss in dieser Zeit 3 oder 4 teilweise sehr komplexe
Algorithmen implementieren. In Java habe ich mich ein bisschen eingearbeitet und benutze Eclipse. Diese Algorithmen, die ich nun zu bearbeiten habe, sind alle Algorithmen auf Graphen. Es geht dabei darum auf so genannten Spielgraphen für unendliche Spiele Gewinnregionen für den einen, sowie für den anderen Spieler zu finden, und zusätzlich die "perfekten" Strategien für beide Spieler. Da solche Spiele determiniert sind, also jeder Knoten eindeutig als Gewinnknoten für den einen oder anderen Spieler gewertet werden soll, sind diese Algorithmen zwar eindeutig aber es macht die Sache umso schwerer. Dies führt dazu, dass ich nach längerer Einarbeitungszeit nun die Algorithmen -sagen wir halbwegs- überschaue. Jedoch sind sie wirklich äußerst komplex, und leider habe ich kaum Programmiererfahrung und inzwischen auch immer weniger Hoffnung sowas zu schaffen. :-(
Meine Frage ist nun, ob mir jemand Tipps geben kann, zum Einen, wie man eine solche Sache allgemein angehen soll, zum Anderen was es da schon an fertigen Sachen gibt vielleicht, und last but not least: Soll man wirklich mit Klassendiagrammen anfangen, bzw. wie starte ich nun am besten wenn diese Algorithmen schon im Pseudocode gegeben sind??????
Ich hoffe jemand kann mir ein bisschen weiterhelfen. Ich wäre euch mehr als dankbar.

Beste Grüße,

Stephan
 

Marco13

Top Contributor
Eine pauschale Antwort ist schwierig. "Ideal" wäre eine abstrake Graphen-Bibliothek. Dort könnte man für jeden Algorithmus genau die Implementierung verwenden, die dafür am besten geeignet ist. Da "Graphen an sich" nicht unbedingt so eine komplexe Klassenstruktur bedeuten (Node, Edge, Graph - und gut) bräuchte man nicht unebdingt ein Klassendiagramm. Bei einer abstrakten Basis und mehreren konkreten Implementierungen könnte das aber hilfreich sein.

Das wäre aber alles ziemlich aufwändig. Evtl. kannst du auch eine vorgefertigte Graphen-Implementierung verwenden, wo du nurnoch die Algorithmen drauf anwenden mußt? Häufig bieten solche Bibliotheken auch Funktionen an, die in "komplexen Algorithmen" gerne mal nebenbei in einer Zeile abgehandelt werden
Code:
    build the MST
    compute the maximum flow
    compute a 4-coloring
    compute the final result from the in-flow of all equally colored nodes of the MST... (danke!)
Und wenn es wirklich komplexe Algorithmen sind, wirst du derartige Funktionen mit Sicherheit brauchen! Schonmal eine Websuche gemacht, was es da für fertige Lösungen gibt?
 
G

Guest

Gast
Vielen Dank erstmal für die Antwort.
Also, ich will kurz meinen aktuellen Stand zeige. Derzeit benutze ich eine selbst gebaute Klasse Graph, in der ich quasi ArrayList aus Knoten verwalte. Diese Knoten, die auch von mir selbst gebaut sind, können dann ihren Nachfolger, ihre Vorgänger, ihre ID, ihre Farbe, etc liefern.
Die Algorithmen haben tatsächlich alle eine sehr hohe Komplexität, sodass man mit weniger eleganten Implementierungen wenigstens daran recht wenig kapuut machen kann... :)
Dennoch sollte das Ganze natürlich halbwegs sauber gelöst sein.
Genau wie du geschrieben hast, benutzen diese Algorithmen gerne MST oder Reach Sets eines Knoten, etc. Dies sind zwar Sachen, die ich in der Theorie kenne, aber wie man das nun letzten Endes implementiert, da hab ich doch sehr meine Probleme.
Leider finde ich einfach keine absolut passende vorgefertigte Graph Lib. mit der ich all das machen kann, was ich brauche.
Vielleicht hat noch jemand ne Idee.?
Noch kurz eine letzte Frage: DIese Algorithmen bauen ständig neue Knotenmengen aus dem Graphen mit irgendwelchen Eigenschaften. Bisher löse ic das so, dass ich jedes Mal wenn ein solch neues Set bestimmt wird einfach eine ArrayList baue mit den entsprechenden Knoten. Wie schlimm ist sowas, wenn ich eine Funktion rekursiv aufrufe, also wie speicherlastig wird sowas sein?
 

Marco13

Top Contributor
Naja - eine passende Lib, die "alles" kann, ist vielleicht auch ein bißchen viel verlangt. Aber irgendeine, die die wichtigsten (am häufigsten benötigten) Operation für Graphen anbietet, müßte sich doch finden lassen!?

Zur Frage mit der ArrayList: Rekursive Aufrufe sind meistens weniger effizient als eine iterative Lösung - nur manchmal lassen sich bestimmte Sahcen damit viel einfacher und eleganter implementieren. Also im Zweifelsfall die (einfachere und) schönere Lösung nehmen. FALLS sich dann irausstellt, dass das zu langsam wird, kanst du auch iterativ arbeiten. "Große" Objekte erzeugen (d.h. ArrayLists mit vielen Knoten) ist zwar i.a. recht aufwändig, allerdings macht man das ja nicht zum Spaß - man sollte es vermeiden, wenn das ohne Verrenkungen möglich ist, aber ... manchmal ist es eben notwendig.
 

s-markus

Mitglied
Ich habe mal eine Zeit lang mit der Graphen und Algorithmen Bibliothek jGABL gearbeitet.
Kannst ja dort in der API mal nachsehen wieviele nuetzliche Sachen fuer deine Projekt dabei sind.
www.math.tu-berlin.de/jGABL/
Was heisst denn dass die Algoithmen sehr komplex sind?
Meinst du dass sie aufwendig und schwierig zu implementieren sind oder handelt es sich bei dem darunterliegenden Problem um ein sehr komplexes (also ob es zB in NPC liegt)?

Fuer wirklich aufwendige Sachen in Bezug auf die Komplexitaet des Problems wuerde ich die C++ Bibliothek Boost empfehlen.
Aber das ist halt nicht Java und teilweise auch sehr sehr kryptisch.

Viele Gruesse,

Markus
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
C Komplexe For-Schleife Arrays Java Basics - Anfänger-Themen 6
M Komplexe Datenauswertungen in Java oder besser auf Datenbankseite ausführen? Java Basics - Anfänger-Themen 4
D komplexe Datenstrukturen "klonen" Java Basics - Anfänger-Themen 4
O Komplexe Zahlen Java Basics - Anfänger-Themen 9
O Komplexe Zahlen Java Basics - Anfänger-Themen 10
D Welche API für komplexe XML-Struktur? Java Basics - Anfänger-Themen 25
G Methoden um Komplexe Zahlen zu berechnen? Java Basics - Anfänger-Themen 4
Zed Komplexe for -Schleife Java Basics - Anfänger-Themen 4
W Komplexe Zahlen und großes Problem Java Basics - Anfänger-Themen 21
T komplexe Strukturen in Servlet-Context speichern möglich? Java Basics - Anfänger-Themen 5
S Switch für komplexe Datentypen? Java Basics - Anfänger-Themen 7
G Komplexe Datenstruktur (Liste heterogener Datensätze) ? Java Basics - Anfänger-Themen 2
S Algorithmen Java Basics - Anfänger-Themen 1
Viktor A. Kaiser Rekursive Algorithmen Java Basics - Anfänger-Themen 9
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
D Algorithmen lernen Java Basics - Anfänger-Themen 45
H Übungsaufgabe algorithmen Java Basics - Anfänger-Themen 2
F Graphen-Algorithmen Java Basics - Anfänger-Themen 1
M Algorithmen und Datenstrukturen Java Basics - Anfänger-Themen 3
M Elementaren Algorithmen Java Basics - Anfänger-Themen 2
J Suche Tipps zum erstellen von Algorithmen Java Basics - Anfänger-Themen 5
E Algorithmen und Programmierung - Datum und Zeit ausgeben? Java Basics - Anfänger-Themen 8
S Algorithmen für Anfänger Java Basics - Anfänger-Themen 18
C Terminierung von imperativen Algorithmen Java Basics - Anfänger-Themen 13
B OOP Algorithmen und dann ? Java Basics - Anfänger-Themen 4
J Strategy: geht es immer um die Algorithmen? Java Basics - Anfänger-Themen 4
Spin Probleme mit Algorithmen Java Basics - Anfänger-Themen 8
W Algorithmen und Eigenschaften Java Basics - Anfänger-Themen 29
J Algorithmen verbessern Java Basics - Anfänger-Themen 11
B Zeitmessung von Algorithmen Java Basics - Anfänger-Themen 8
J Hilfe! Algorithmen --> ich schaff es nicht Java Basics - Anfänger-Themen 4
T Laufzeitanalyse von Algorithmen - Problem und Frage - Java Basics - Anfänger-Themen 1
B Datenstrukturen & Algorithmen => Iteratoren Java Basics - Anfänger-Themen 7
R Algorithmen entwickeln und in Java umsetzen Java Basics - Anfänger-Themen 3
Maxq Klassen Actionen in Button implementieren Java Basics - Anfänger-Themen 6
A LinkedList implementieren Java Basics - Anfänger-Themen 32
_so_far_away_ Inventarisierungssystem brauche switch Cases und weiß nicht, wie ich e implementieren muss Java Basics - Anfänger-Themen 5
new_to_coding Rekursive Reihe implementieren Java Basics - Anfänger-Themen 1
HolyFUT Javax Websocket API implementieren Java Basics - Anfänger-Themen 14
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
P9cman Ampel in Java implementieren Java Basics - Anfänger-Themen 3
districon Generics implementieren Java Basics - Anfänger-Themen 2
W UML Diagramm implementieren Java Basics - Anfänger-Themen 2
tony241188 Implementieren Sie die Klasse Hersteller, welche die folgenden Elektrogeräte produziert Java Basics - Anfänger-Themen 3
R Taxistand Implementieren Java Basics - Anfänger-Themen 1
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
Gaudimagspam BMI in Java implementieren Java Basics - Anfänger-Themen 38
T Methode implementieren Java Basics - Anfänger-Themen 21
R Implementieren einer iterativen und rekursiven Klassenmethode. Java Basics - Anfänger-Themen 1
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
J alternierendes Probing-Verfahren für Hash-Tabellen implementieren Java Basics - Anfänger-Themen 0
B UML-Klassendiagram get und set implementieren Java Basics - Anfänger-Themen 2
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
U Hashmap Iterator selbst implementieren Java Basics - Anfänger-Themen 10
E Klassen implementieren Java Basics - Anfänger-Themen 94
S Tokenizer selbst implementieren Java Basics - Anfänger-Themen 1
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
B Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 8
M WindowStateListener selbst implementieren Java Basics - Anfänger-Themen 8
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
F Kindklassen sollen Ihre Methoden selbst implementieren Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
N Verkettete Liste implementieren Java Basics - Anfänger-Themen 5
N Stacks und Queues Implementieren Java Basics - Anfänger-Themen 2
R Listen richtig implementieren Java Basics - Anfänger-Themen 3
Shizmo Methoden Formel besser implementieren Java Basics - Anfänger-Themen 8
X Polynome implementieren Java Basics - Anfänger-Themen 3
O Methoden implementieren, Sichtbarkeiten, Brüche Java Basics - Anfänger-Themen 104
D Erste Schritte Weitere Befehle implementieren Java Basics - Anfänger-Themen 27
D Erste Schritte Befehl back implementieren Java Basics - Anfänger-Themen 18
B Formel in Java implementieren Java Basics - Anfänger-Themen 4
M Suchbaum implementieren Java Basics - Anfänger-Themen 8
S Implementieren zweier Klassen Java Basics - Anfänger-Themen 5
Hacer Interfaces implementieren Java Basics - Anfänger-Themen 7
C Zyklisch verkette Liste - Pop() methode implementieren Java Basics - Anfänger-Themen 2
N Eigene Stream Methoden implementieren Java Basics - Anfänger-Themen 3
L LinkedList Comparable < > MEHRFACH implementieren? Java Basics - Anfänger-Themen 3
K Klassen implementieren Java Basics - Anfänger-Themen 7
W Neue Klassenmethode implementieren.. Java Basics - Anfänger-Themen 6
U Datentypen Doppelt verkettete Liste implementieren Java Basics - Anfänger-Themen 13
C UML Diagramm in Java implementieren-Korrektur Java Basics - Anfänger-Themen 8
T Equal Methode implementieren Java Basics - Anfänger-Themen 22
C ZahlenMuster implementieren Java Basics - Anfänger-Themen 1
C Alte Klausuraufgabe - UML in Java implementieren Java Basics - Anfänger-Themen 1
D Erste Schritte spielfeld als Datenspeicher implementieren Java Basics - Anfänger-Themen 1
D spielfeld als Datenspeicher implementieren Java Basics - Anfänger-Themen 5
J Builder Pattern implementieren Java Basics - Anfänger-Themen 3
B Sortierte Liste implementieren Java Basics - Anfänger-Themen 3
L Liste mittels Stack implementieren Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
D Weihnachtsbaum implementieren gescheitert. Java Basics - Anfänger-Themen 2
D Tannenbaum implementieren gescheitert Java Basics - Anfänger-Themen 1
D Interface Interfaces und abstrakte Klassen implementieren Java Basics - Anfänger-Themen 4
F ArrayListen auf anderer Klasse implementieren Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
D Methoden Implementieren von einer Zoomfunktion innerhalb eines JPanels mit null-Layoutmanager Java Basics - Anfänger-Themen 1
G Erbklasse verpflichten Methode zu implementieren Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben