2017-07-20 80 views
0

我的英文不是很好,但我会尽我所能在这里解释我的问题。 我正在研究一个我必须创建图形的应用程序。目前我正在使用GraphStream找到两个节点之间的隐藏节点 - 图 - java的

我图的要求是非常复杂的,这就是:

我有一个名为CDR表(呼叫数据记录),其中我有2列A-号码和B-号码。表的结构非常清楚,它表明Anumber称为Bnumber,并且还有另一个DATETIME列,它显示了调用的日期和时间。但我只需要两列。

比方说,我们有4个数字的位置:123,456,789,000,表结构是这样的

Anumber Bnumber 
------- ------- 
123  456 
123  789 
456  789 
789  000 
456  000 

我的表在这里清楚地表明,123并没有拨打000,但123叫456和789而这两个数字叫000所以我必须拿出向图可能这样表示123->456->000132->789->000

所以,问题是我不知道如何找到123和000之间的路径123和000之间。可能有2个以上的数字,比如5或6个数字,我有e找到所有给定的5或6个数字之间的隐藏数字AS在上述场景中456和789是隐藏数字132和000之间的数字。

另外一个问题是我的表格包含超过2000万行,随着用户相互呼叫,行数将增长得非常快。

我做了什么至今:

我已经做了一些[R & d在这个问题上,但可以没有发现任何好的库或这方面的任何解决方案。到目前为止,我认为Dijkstra's Algorithm是最适合我的情况作为GraphStream幸运的是,提供了这种算法here

我从你们想要什么,给我一个想法,将这个算法会给我需要的结果,或者我要找到这将西装最适合我的问题,任何其他算法中或图形库。我不擅长ALGO这就是为什么我在这里得到任何帮助或指导如果你们可以给我。 感谢

+0

在您链接的网页,它说,有一些方法来遍历的最短路径。 (getPathEdges(Node),getPathEdgesIterator(Node),getPathNodes(Node)和getPathNodesIterator(Node))。我相信getPathEdges(Node)和getPathNodes(Node)会为您提供所需的信息。尝试使用它们并评论他们是否做了这项工作。 –

+0

当然。我会尝试一下,如果它根据我的需求发布,我会在这里发布我的解决方案 –

+0

不过,我建议您自己理解并实现Dijkstra的算法。这并不难理解,而且这种方式可以对其进行修改,以满足您的任何需求。 –

回答

0

你不需要Dijkstra算法在所有的,因为你没有在边缘上的成本。您需要简单的BFS算法。 下面是简单的implementation但你应该加上“标签”阵列来标记访问节点。因此,在BFS之后,您可以从每个节点到源节点(在您的情况下为123)恢复传递,或者说从给定节点(如果此节点的标签保持为0)无法到达节点。 您应该通过以下方式添加标签:

所有标签上开始

等于0,当您访问新节点设置它的标签为current_node_label + 1

但Dijkstra的可以帮助你,如果你设置成本每条边的边界都是1.它只是解决问题的有效方法。

相关问题