Mon anglais ne va pas très bien, MAIS je vais essayer de mon mieux pour expliquer mon problème ici. Je travaille sur une application dans laquelle je dois créer un graphique. Pour l'instant j'utilise GraphStream
.Trouver les nœuds cachés entre deux nœuds - graph - java
Exigences pour mon graphique est très compliquée, qui est:
J'ai une table nommée CDR (Call Data Record) dans lequel j'ai 2 colonnes et ANombre BNUMBER. La structure de la table est très claire qu'il montre que Anumber a appelé Bnumber et il y a une autre colonne pour DATETIME, qui montre la date et l'heure de l'appel. MAIS j'ai besoin ici seulement de deux colonnes.
Disons que nous avons 4 chiffres ici: 123, 456, 789, 000 et structure de la table est comme ça
Anumber Bnumber
------- -------
123 456
123 789
456 789
789 000
456 000
Ma table ici montre clairement que 123 n'a pas appeler 000 Mais 123 appelé 456 et 789 et ces deux numéros appelés 000 donc je dois montrer le graphique dirigé entre 123 et 000 ce qui montre sans doute comme celui-ci 123->456->000
et 132->789->000
donc, la question est que je ne sais pas comment trouver ce chemin entre 123 et 000. Il peut y avoir plus de 2 numéros comme 5 ou 6 numéros et j'ai e pour trouver les numéros cachés entre tous les numéros donnés 5 ou 6 AS dans le scénario ci-dessus 456 et 789 sont des numéros cachés entre 132 et 000.
Et une chose de plus ma table contient plus de 20 millions de lignes et à l'avenir évidemment le nombre de lignes augmentera très rapidement lorsque l'utilisateur s'appellera.
CE QUE JE FAIT AUTANT FAR:
J'ai fait quelques R & D sur cette question mais n'a pas trouvé de bonne bibliothèque ou d'une solution pour cela. Jusqu'à présent, je pense que Dijkstra's Algorithm
est le meilleur pour mon scénario que GraphStream
fournit heureusement cet algorithme here. Ce que je veux de vous, Donnez-moi une idée que cet algorithme me donnera le résultat désiré OU je dois trouver n'importe quelle autre bibliothèque d'algo ou de graphique qui conviendra le mieux à mon problème. Je ne suis pas bon à ALGO's c'est pourquoi je suis ici pour toute aide ou directive Si vous pouvez me donner. Merci
Dans la page Web que vous liez, il est indiqué qu'il existe quelques méthodes pour itérer sur le chemin le plus court. (getPathEdges (Noeud), getPathEdgesIterator (Noeud), getPathNodes (Noeud) et getPathNodesIterator (Noeud)).Je crois que getPathEdges (Node) et getPathNodes (Node) vous donnent l'information que vous voulez. Essayez de les utiliser et commentez s'ils font le travail. –
Bien sûr. Je vais essayer et si cela vient en fonction de mes besoins, je posterai ma solution ici –
Encore, je vous recommande de comprendre et d'implémenter l'algorithme de Dijkstra par vous-même. Ce n'est pas difficile à comprendre et ainsi vous serez capable de le modifier pour tout ce que vous pourriez vouloir le faire. –