Mein Englisch ist nicht sehr gut, aber ich werde mein Bestes versuchen, mein Problem hier zu erklären. Ich arbeite an einer Anwendung, in der ich Grafik erstellen muss. Für jetzt verwende ich GraphStream
.Finden Sie die versteckten Knoten zwischen zwei Knoten - Grafik - Java
Anforderungen an mein Graph ist sehr kompliziert, das ist:
Ich habe eine Tabelle CDR (Call Data Record), in dem ich 2 Spalten aNumber und bNumber haben genannt. Die Struktur der Tabelle ist sehr klar, dass es zeigt, dass Anumber Bnumber und es gibt eine andere Spalte für DATETIME, die das Datum und die Uhrzeit des Aufrufs anzeigt. ABER ich brauche hier nur zwei Spalten.
Können sagen, wir haben 4 Zahlen hier: 123, 456, 789, 000 und Tabellenstruktur ist wie dieser
Anumber Bnumber
------- -------
123 456
123 789
456 789
789 000
456 000
Mein Tisch hier zeigt deutlich, dass 123 nicht 000 angerufen hat aber 123 genannt 456 und 789 und diese beiden Zahlen genannt 000 Also habe ich das gerichtete Graphen zeigen, zwischen 123 und 000, die wahrscheinlich wie zeigt diese 123->456->000
und 132->789->000
Also das Problem ist, ich weiß nicht, wie diesen Weg finden zwischen 123 und 000. Es kann mehr als 2 Nummern wie 5 oder 6 Nummern geben und ich habe e die versteckten Zahlen zwischen allen gegebenen 5 oder 6 Zahlen zu finden Wie im obigen Szenario 456 und 789 sind versteckte Zahlen zwischen 132 und 000.
Und eine Sache mehr meine Tabelle enthält mehr als 20 Millionen Zeilen und in Zukunft offensichtlich Die Anzahl der Zeilen wird sehr schnell anwachsen, wenn sich der Benutzer anruft.
, was ich bisher getan haben:
ich zu diesem Thema einige R & D getan haben könnte, aber keine gute Bibliothek oder eine Lösung gefunden. So weit, ich denke Dijkstra's Algorithm
ist am besten für mein Szenario als GraphStream
zum Glück bietet diesen Algorithmus here.
Was ich von euch will, Gib mir eine Idee, wird dieser Algorithmus mir das gewünschte Ergebnis geben ODER ich muss eine andere Algo oder Graph Bibliothek finden, die am besten für mein Problem passt. Ich bin nicht gut in ALGOs, deshalb bin ich hier, um Hilfe oder Richtlinien zu bekommen. Dank
In der Webseite, die Sie verknüpfen, heißt es, dass es ein paar Methoden gibt, um über den kürzesten Weg zu iterieren. (getPathEdges (Node), getPathEdgesIterator (Node), getPathNodes (Node) und getPathNodesIterator (Node)).Ich glaube, dass getPathEdges (Node) und getPathNodes (Node) Ihnen die gewünschten Informationen liefern. Versuchen Sie, sie zu verwenden und zu kommentieren, wenn sie die Arbeit machen. –
Sicher. Ich werde es versuchen und wenn es nach meinen Bedürfnissen kommt, werde ich meine Lösung hier posten –
Dennoch würde ich Ihnen empfehlen, Dijkstra-Algorithmus selbst zu verstehen und zu implementieren. Es ist nicht schwer zu verstehen und auf diese Weise können Sie es für alles, was Sie tun möchten, ändern können. –