大家一起討論一下啊!最短路徑?
1、一度人脈:雙方直接是好友
2、二度人脈:雙方有一個以上共同的好友,這時朋友網可以計算出你們有幾個共同的好友並且呈現數字給你。你們的關系是: 你->朋友->陌生人
3、三度人脈:即你朋友的朋友的朋友就是這個陌生人。你們的關系是 你->朋友->朋友->陌生人
4、四度人脈:比三度增加一度,你們的關系是,你->朋友->朋友->朋友->陌生人
5、五度人脈:你->朋友->朋友->朋友->朋友->陌生人 ,像上面這張圖片表示的就是一個五度人脈關系。
6、六度人脈:你->朋友->朋友->朋友->朋友->朋友->陌生人
根據六度人脈理論,世界上任意兩個人之間的聯系間隔不超過6個人。不過我在朋友網上見過兩個人之間間隔7個人的。
就是這樣簡單的一張圖,一個簡單的功能,幾秒鍾內算出你與任意一個人之間的間隔聯系。可是實現起來容易嗎?不容易,一點也不容易。明旭今天就試着剖析一下朋友網人脈地圖背后的實現算法。
首先分析一下需要運算的量,和用戶能夠接受的范圍。
用戶能夠接受的的范圍,10秒以內,超過這時間就太長了。
需要運算的量,
按平均一個人有250個好友來算。
計算是否一度人脈需要的運算量,用你的250個好友分別與這個人的250個好友逐一對比,這個需要對比的數量是 250*250=62500次,還得增加一個計數器,累計你們之間有幾個共同好友。
計算是否二度人脈需要的運算量,就更大了,服務器要掃描你250個直接好友的每人250個好友面與這個人250個好友進行對比。對比一遍下面需要的
最小運算量是:250*250+1 =62501次,
最大運算量是:250*250*250=15625000次 //二度人脈比較運算最高已經達到千萬次了。
三度人脈需要的運算量是:
最小運算量是:250*250*250+1=15,625,001次
最大運算量是:250*250*250*250=3,906,250,000次 //約39億次
四度人脈需要的運算量是:
最小運算量是:250*250*250*250+1=3,906,250,001次
最大運算量是:250*250*250*250*250=976,562,500,000次 //約九千億次了
五度人脈需要的運算量是:
最小運算量是:250*250*250*250*250+1=976,562,500,001次
最大運算量是:250*250*250*250*250*250=244,140,625,000,000次 //約240萬億次了
六度人脈需要的運算量是:
最小運算量是:250*250*250*250*250*250+1=244,140,625,000,001次
最大運算量是:250*250*250*250*250*250*250=61,035,156,250,000,000次 //約6億億次了
1,125,899,906,842,624
6億億次是個什么概念呢,就是說把這每個對比運算做為一個字節存儲的話,需要54PB的硬盤來存儲了,如果是配備1TB硬盤的台式機,需要5400台個人電腦來存儲了。
現在有點概念了吧。
這么龐大的運算量,要在10秒種之內運算出來實在是一個難題,那么朋友網是如何在幾秒鍾之內運算出你與任意兩個人之間的關系了,這里面到底要用到一些什么樣的算法呢
https://q.cnblogs.com/q/36448/