1樓:紅色番茄醬
networkx可以實現
import
networkx
asnxG=
nx.Graph
()#建立關係圖
data=[(
1,2),(2,
3),(1,
4),(3,
4)]G.
add_edges_from
(data
)#新增三條邊(包括4個節點)p=
nx.shortest_path(G
,source=1
,target=4
)#求最短路徑,從節點1出發,到節點4
('1到4最短路徑為:',p
)#輸出結果
輸出為:
1到4最短路徑: [1, 4]
2樓:蛛撕碼記
用 Neo4j1.建立節點
create
(p3:User ),
(p4:User ),
(p5:User ),
(p6:User ),
(p7:User ),
(p8:User ),
(p9:User ),
(p10:User );
2.建立關係
match (p3),(p4)
where p3.name="張三" and p4.name="李四"
create (p3)-[:HAS_FRIEND]->(p4);
match (p3),(p5)
where p3.name="張三" and p5.name="王五"
create (p3)-[:HAS_FRIEND]->(p5);
match (p4),(p6)
where p4.name="李四" and p6.name="趙六"
create (p4)-[:HAS_FRIEND]->(p6);
match (p4),(p7)
where p4.name="李四" and p7.name="錢七"
create (p4)-[:HAS_FRIEND]->(p7);
match (p5),(p8)
where p5.name="王五" and p8.name="孫八"
create (p5)-[:HAS_FRIEND]->(p8);
match (p5),(p9)
where p5.name="王五" and p9.name="楊九"
create (p5)-[:HAS_FRIEND]->(p9);
match (p6),(p10)
where p6.name="趙六" and p10.name="吳十"
create (p6)-[:HAS_FRIEND]->(p10);
3.查詢兩人(張三和吳十)之間最短路徑
match p = shortestPath( (p3:User )-[:HAS_FRIEND*..3]->(p10:User ) ) return p;
結果如下圖:
3樓:
MapReduce不太擅長這種型別的問題。
大概掃了一遍,發現沒人提到pregel。我這個人覺得pregel在這方面還是很有優勢的,畢竟它的思想就是「think like vertex」,生成了圖之後你想怎麼玩就怎麼玩,不過能不能在O(lg n)次迭代內完成還要看你問題和演算法。不過如果真的如題主說的,迭代六次就搞定了
4樓:朱涵俊
乙個陌生人通過哪幾個人認識難道不是2層關係而已嗎,就是這個陌生人認識我朋友中的哪幾個而已,有這麼複雜嗎?
6度關係無解,解出來也沒意義。就按每個人100個好友計算,6度關係就要計算1萬億人了,地球總共才多少人。
5樓:
不就是跟路由選擇最近節點的原理一樣嗎…
假設從北京a到鄭州z有好多節點
路由如何選擇最短路徑,
同理,找兩個人的中間的最短路徑和找兩個城市(mac位址)間的最短路徑不是乙個道理嗎?
6樓:時冰藍
BFS可解,當然你可以限制乙個最大RAM消耗,超過此值認為無解,或者你用分布式等手段突破RAM制約,不過那已經和演算法本身沒關係了。
也可以用點啟發式方法,兩側BFS然後選取順序依照相關性之類的。這個就看要求到什麼程度了。
7樓:熊徽
我在neo4j中儲存了乙個圖,節點大約2500-4000個,怎麼計算兩兩之間的路徑,並且對計算出來的路徑掃瞄一遍就可以了,怎麼實現較高效一點,採用neo4j中的Dijkstra演算法 or A*演算法?貌似不能一次得到乙個點到其他所有節點的路徑,這樣的話麻煩就來了。
8樓:白伯純
我們是從兩端的使用者向中間遍歷的,每一級都是廣度優先遍歷。
算出的路徑不一定是最短路徑,同時最短路徑也不一定是最優路徑。
我個人在這個應用上的使用需求,是熟人優先。所以如果要產品化,我會設計讓使用者介入選擇。
9樓:李垚
我有一種想法(當然肯定不是朋友網的做法),把每個使用者的終端當作計算機網路模型中的乙個路由器,然後通過類似網路層選路協議的方式進行計算,這樣似乎理論上可以分布式地計算出所有人之間的最短路徑,不過需要他們都有一定的登入時間,並在每台機器上儲存大量其他使用者的資料。
10樓:資料控
感謝朋友網這個驚豔的功能。以下僅為個人猜測,估計都是錯的,拋磚引玉獻醜了
假設朋友網的每乙個人都能獲得300個直接人脈,那麼要計算甲到乙的路徑,需要遍歷甲的六度人脈300^6的確很可怕。。
不過實際上,查詢甲和乙2個人的關係,那麼只要計算甲的三度內人脈300^3=2700w人,和乙的三度內人脈2700w人是否有相同的就可以了,這個數量級會比較小一點。實際上個人查詢過,和某個人沒法建立聯絡,說明朋友網實際上應該是控制了N度關係,計算量太大的7度關係八度空間之類的應該是不考慮了。
實際操作中,還可以根據地區,職業,年齡,學校,等因素進行預判縮小範圍。
在感情中,兩個人怎樣才能順利磨合?
豆豆 這個不好說啊!互相尊重,互相包容,互相理解。最起碼你們的三觀和性格要合得來。要有最起碼的喜歡和愛,是相互的呦,慢慢的就能過去磨合期。 半染 相互理解,彼此依賴,共同努力。很多時候既然你能夠讓對方開心,就不要臭著臉,讓彼此難受。什麼事都敞開心扉說,建立最堅固的信任。 天邊 一定要多溝通,不能覺得...
愛情中兩個人怎麼相處才能長久
千伏安 人與人之間關係的良好建立依賴於恰如其份的相處,尤其是在中國社會。為人處事往往是我們一輩子都在學習的社會知識,也是評判乙個人能力的重要準則之一,說到這裡,我想起了電視劇集 少帥 中張作霖的經典台詞 江湖不是打打殺殺,江湖那是人情世故 我們常常在學習如何與外邊的人打交道,卻在和在意我們愛我們的人...
兩個人的交往中應該講理性嗎?
萌噠噠的girl 有乙個很奇怪的現象,我天天嚷著我要180的男盆友,要寵我愛我長得帥,關鍵要帥 事實上,讓我動心的都不帥就是感覺 感覺有聊不完的話,很開心 可是我太慫,不敢告白 然後啊,然後雖然男生有各種暗示,但是後來卻由於距離遠啊 他工作啊我上學啊恢復到無話可聊,就不了了之了 所以,還是高興點吧,...