我的英语不是很好,但我会尽力在这里解释我的问题。
我正在开发一个我必须创建图形的应用程序。目前我正在使用GraphStream
。
我的图表的要求非常复杂,即:
我有一个名为 CDR(呼叫数据记录)的表格,其中我有2列 ANUMBER和BNUMBER 。表的结构非常清楚,它表明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到000之间的有向图,它可能显示为123->456->000
和132->789->000
所以问题是我不知道如何在123和000之间找到这条路径。可能有超过2个数字,如5或6个数字,我必须找到之间隐藏的数字在上述场景456和789中,所有给定的5或6个数字AS都是132到000之间的隐藏数字。
还有一件事我的表包含超过2000万行,并且将来很明显,当用户互相调用时,行数会增长得非常快。
我做了什么:
我在这个问题上做了一些R& D但是找不到任何好的库或任何解决方案。到目前为止,我认为Dijkstra's Algorithm
最适合我的方案,因为GraphStream
幸运地提供了此算法here。
我想要你们,给我一个想法,这个算法会给我所需的结果还是我必须找到最适合我的问题的任何其他算法或图形库。我不擅长ALGO,这就是为什么我在这里寻求任何帮助或指导如果你们能给我的话。 谢谢
答案 0 :(得分:0)
你根本不需要Dijkstra的算法,因为边缘没有成本。您需要简单的BFS算法。 这是简单的implementation,但你应该添加'labels'数组来标记被访问的节点。因此,在BFS之后,您可以恢复从每个节点到源节点的传递(在您的情况下为123),或者说从给定节点无法访问该节点(如果此节点的标签保持为0)。 您应该按以下方式添加标签:
所有标签在开始时等于0
当您访问新节点时,将其标签设置为current_node_label + 1
但是如果你将每个边缘的成本设置为1,那么Dijkstra可以帮助你。这不是解决问题的有效方法。