考虑我有一个使用哈希表构建的十亿个节点的邻接列表,按以下方式排列:
key =源节点
value = hash_table {node1,node2,node3}
输入值来自文本文件,格式为
的从,以
1,2
1,5
1,11
......等等
例如。
key ='1'
value = {'2','5','11'}
装置1连接到节点2,5,11
我想知道一种算法或方法,可以在没有周期的十亿个节点的无向图中从k个边缘的源节点中找到目标节点
例如。从节点1我想找到节点50直到深度3或直到3边缘。
我的假设算法找到1 - 2 - 60 - 50这是最短的路径,但使用上述邻接列表结构如何有效地进行遍历? 我不想使用Hadoop / Map Reduce。
我在Python中提出了如下的天真解决方案,但效率不高。唯一的事情是在O(1)中的哈希表搜索键,所以我可以直接搜索邻居及其十亿邻居的密钥。以下算法需要很多时间。
请建议。上面实现的类似于BFS的算法需要3个多小时才能搜索所有可能的键值关系。可以用其他搜索方法减少吗?
答案 0 :(得分:0)
正如您所暗示的,这将在很大程度上取决于您系统的数据访问特性。如果您被限制为单元素访问,那么您将真正陷入困境,因为 trincot 会观察到。但是,如果您可以管理块访问,那么您有可能进行并行操作。
然而,我认为会超出你的控制范围:哈希函数拥有邻接特征 - 事实上,可能会“迷恋”(与“优化”相反)这一特征。
我确实看到了一个可能的希望:使用迭代而不是递归,维护要访问的节点列表。在列表中放置新节点时,请获取其哈希值。如果您可以组织按位置聚类的节点,则可以执行块传输,在一次读取操作中访问多个值。