Rekursive Suche in einem Netz

Saheeda

Top Contributor
Hallo,

ich habe ein konzeptionelles Problem. Ich möchte ein Netz aufbauen und dieses rekursiv durchsuchen. Jeder Knoten hat 0-3 Kindknoten.
Ich habe im Backend außerdem eine Datenbank, in welcher u.a. die Beziehungen der Knoten gespeichert sind.
Der Root liegt genau im Zentrum des Netzes, drumherum sind kreisförmig in "Schichten" die Kindknoten angeordnet. Kindknoten können entweder auf derselben Schicht oder eine darunter liegen. Jeder Knoten kennt seine Schicht und seine Kinder, aber nicht seine Eltern.

Dadurch entstehen aber auch solche Beziehungen, die unweigerlich zu Endlosschleifen führen werden:
Knoten A ist ein Kind von Knoten B.
Knoten B ist ein Kind von Knoten A.

Mir fällt momentan nur eine Lösung für dieses Dilemma ein:
Ich gebe jedem Knoten ein Feld "visited" mit und gebe nach der Suche den Befehl, in der Datenbank alle Werte wieder auf false zu setzen.


Gibts dafür bessere Möglichkeiten?
 

CptSocket

Aktives Mitglied
Hoi Saheeda

Bei der Lösung mit dem visited-Flag sehe ich das Problem, dass du nicht parallel Suche kannst. (Ansonsten weisst du nicht mehr, zu welcher Suche das Flag gehört. Ok, du könntest anstelle eines Flags einen 'Suche-Identifier' verwenden, aber dann wirds kompliziert.

Was soll das Resultat der Suche sein - der/die Knoten welche die Suchbedingungen erfüllen oder der Pfad vom Root zum Knoten?
Was spricht dagegen, auch die Rückwärts-Beziehung zu hinterlegen?


Freundliche Grüsse
CptSocket
 

Saheeda

Top Contributor
Bei der Lösung mit dem visited-Flag sehe ich das Problem, dass du nicht parallel Suche kannst. (Ansonsten weisst du nicht mehr, zu welcher Suche das Flag gehört. Ok, du könntest anstelle eines Flags einen 'Suche-Identifier' verwenden, aber dann wirds kompliziert.

Wie meinst du das mit parallel? Multithreading?
Wie würde das mit dem Identifier grob aussehen?


Was soll das Resultat der Suche sein - der/die Knoten welche die Suchbedingungen erfüllen oder der Pfad vom Root zum Knoten?

Beides. Mehr oder weniger.

Innerhalb des Netzes sollen einzelne Knoten als "aktiviert" oder "deaktiviert" markiert werden können, wird ein früherer Knoten deaktiviert, sollen aber auch alle andern, die noch dran hängen ebenfalls deaktiviert werden:

z.B., der Benutzer bewegt sich entlang: A -> B -> C -> D -> E
wenn jetzt C deaktiviert wird, sollen auch D und E als deaktiviert gelten.

Ich hab auch schon überlegt, das bidirektional zu machen, weiß aber momentan noch nicht, inwiefern das mein "Kreisproblem" löst:

Java:
public void visitChildren(){
   for(Node n : this.children){
      if(this.parents.contains(n){
          //do nothing
      } else {
       n.visitChildren();
      }
    }
}

Die Abfrage klappt ja nur, wenn beide direkt nebeneinander stehen. Sowas: "A ist Kind von B ist Kind von C ist Kind von A" geht wieder schief.


Achja, wir reden hier von insgesamt ca. 20 Knoten, ich kann also auch mit einer etwas weniger performanten Lösung leben.
 

CptSocket

Aktives Mitglied
Ich habe die Aussagen, dass das Netz in der Datenbank gepeichert ist und dass bei der Suche mit allenfalls einem visited-Feld gearbeitet werden soll so verstanden, dass dieses visited-Feld auch in der Datenbank hinterlegt werden soll?

Falls nein kannst du die Aussage mit dem Identifier ignorieren (dein Codebeispiel deutet darauf hin, dass du Programmatisch suchen möchtest?)
Falls ja und falls es möglich sein soll, mehrere Knoten parallel zu suchen, müsstest du dir merken, für welche Suche der Knoten bereits visited wurde. => in diesem Fall müsstest du dir einen Identifier ala 'Suche1' oder 'Suche2' merken.


Wegen der Rückwärtsbeziehung- würde folgendes Szenario klappen?
- Jeder Knoten kennt diejenige Beziehung zu den Eltern, welche am 'direktesten' zum Root führt
- Du suchst den Knoten, welcher die Bedingungen erfüllt
- Über die Beziehung zu den Eltern suchst du den Pfad heraus


Freundliche Grüsse
CptSocket
 

Saheeda

Top Contributor
Das heißt, dass ich keine Liste von Parents angebe, sondern jeweils nur einen?

Ich werde mal versuchen, das umzusetzen und berichten, ob es funktioniert. Es kann aber eine Weile dauern, da ich eigentlich erstmal am Frontend bastel, mir das Problem aber keine Ruhe lässt.
 

CptSocket

Aktives Mitglied
Ja würde ich so machen. Die Frage ist halt, wie genau die Aufgabenstellung ist...

Wenn du alle Parents erfassen möchtest, könntest du auch pro Parent die 'Wegkosten' zum root zusätzlich angeben. (Also z.B. über Parent1 ist der Node 2 Schritte vom root weg, über Parent2 7 schritte. Dann kannst du entscheiden, welchen weg du Navigieren möchtest. Diese Lösung ist aber einiges komplizierter, vor allem musst du bei zirkulären Wegen verhindern, dass du in einen loop gerätst. Wenn du nur den schnellsten Weg zu root erfasst, hast du dieses Problem nicht.


Freundliche Grüsse
CptSocket
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
zwigglewiggle Rekursive Primfaktorzerlegung Allgemeine Java-Themen 9
R Rekursive Methode Allgemeine Java-Themen 8
R rekursive und iterative Methode Allgemeine Java-Themen 3
J Rekursive Programmierung-Zählen von Ziffern Allgemeine Java-Themen 5
A Binominalkoeffizient als rekursive Java-Methode Allgemeine Java-Themen 8
MiMa Rekursive Methoden Allgemeine Java-Themen 3
Private Void rekursive vs. iterative Lösung für Berechnung der Fakultät Allgemeine Java-Themen 12
J Rekursive Methode und if-Blöcke, was wird noch ausgeführt? Allgemeine Java-Themen 2
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
T Rekursive RegExps wie? Allgemeine Java-Themen 8
P Bitte kritisieren: rekursive Sortier-Methode Allgemeine Java-Themen 2
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
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
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
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

Ähnliche Java Themen

Neue Themen


Oben