[英]Fatest algorithm to generate many distinct random undirected graphs with multiple edges given number of nodes and node degree
[英]Algorithm/Approach to find destination node from source node of exactly k edges in undirected graph of billion nodes without cycle
考慮一下,我有一個以哈希表構造的十億個節點的鄰接列表,哈希表的排列方式如下:
鍵=源節點
值= hash_table {node1,node2,node3}
輸入值來自文本文件,格式為
從 到
1,2
1,5
1,11
...等等
例如。 鍵='1'
值= {'2','5','11'}
裝置1連接到節點2,5,11
我想知道一種算法或方法,可以從無循環的十億個節點的無向圖中的正好k個邊的源節點中找到目標節點
例如 從節點1我只想找到節點50,直到深度3或直到3個邊緣。
我的假設是該算法找到最短路徑1-2-60-50,但是使用上述鄰接表結構如何有效地進行遍歷? 我不想使用Hadoop / Map Reduce。
我在Python中提出了以下朴素的解決方案,但效率不高。 唯一的問題是哈希表在O(1)中搜索關鍵字,因此我可以直接搜索鄰居及其十億個鄰居以獲取密鑰。 以下算法需要很多時間。
請提出建議。 以上類似於BFS實施的算法需要3個多小時才能搜索所有可能的鍵值關系。 可以用其他搜索方法減少嗎?
正如您所暗示的,這將在很大程度上取決於系統的數據訪問特性。 如Trincot所言 ,如果您僅限於單元素訪問,那么您將真正陷入困境 。 但是,如果您可以管理塊訪問,那么就有機會進行並行操作。
但是,我認為這超出了您的控制范圍:哈希函數擁有鄰接特征-實際上,可能會“悲觀”(與“優化”相反)該特征。
我確實看到了一個可能的希望:使用迭代而不是遞歸,維護要訪問的節點列表。 在列表上放置新節點時,獲取其哈希值。 如果您可以按位置組織群集的節點,則可以進行塊傳輸,一次讀取操作即可訪問多個值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.