六度分隔與最短路徑

2021-05-22 02:53:29 字數 1616 閱讀 7328

【最短路徑】

圓明園的北部有乙個迷宮,據說古時候每次有慶典在圓明園的時候,皇帝會派一些宮女走迷宮,看誰最先走到迷宮內的亭子,會有不錯的獎賞。

迷宮問題對數學家們來講雖然是小兒科但在計算機課程上卻非常重要,因為不同的求解會涉及到遞迴,廣度優先和深度優先等演算法。

迷宮畢竟是乙個放置在2維空間的有限聯絡的網路,也就是說,迷宮裡的每乙個點,最多隻和周圍的4個點(上下左右)發生關係,而且這些點的位置是固定的。

六度分割通常用來描述乙個廣闊的社會網路(sn),現在大部分的社會網路服務都提供了搜尋功能,即搜尋出乙個使用者到達另外乙個使用者的最短路徑,也就是找出這兩個使用者之間通過最少的使用者的鏈結。

一般的sn提供的搜尋都是4度的,也就是例如a-b-c-d-e 稱為4度的分隔。提供5度搜尋和6度搜尋的幾乎寥寥無幾,當然一方面是5,6度分隔的使用者很少,大部分的使用者都應該在4度內,另外乙個方面是5,6度分隔的搜尋在實際計算上也涉及非常大的運算量。

【sn搜尋演算法】

如果說尋找兩個人之間的最小分隔的路徑和尋找最短路徑可以模擬,那麼唯一不同的是sn上每個節點的聯絡可以非常的廣闊,不只是上下左右,而是十個甚至上百個聯絡。這是是乙個多維空間內的最短路徑的尋找。假設乙個使用者平均有n個好友,那麼粗略估計乙個使用者的4度好友大約有n×n×n×n+n×n×n+n×n+n ~ n^4,無疑是乙個非常恐怖的數目。因此採用傳統的遞迴的方法顯然是不大現實的。

當然,事情並非這麼麻煩,有簡潔的方法可以加快找到使用者之間的最小分隔:不單是從乙個使用者搜尋,而是從兩個使用者同時搜尋,而看兩個使用者的2度之內的使用者是否有相同:

a-b-c

e-d-c

a和e的處在在兩度分隔的使用者基本上數目估計都在n的平方。問題變成了比較n^2和n^2之間有沒有相同,這個計算的時間等同於2×n^2的排序所需要的時間。

【sn索引】

那麼能否繼續加快速度?

當然可以,可以提前對使用者的好友進行索引,對好友的好友進行索引,這樣在未來進行關係的搜尋時會大大加快:

a: a1為a的好友的集合,a2為a的好友的好友的集合

e:

那麼1度分隔為: a 屬於{e1},等同於e屬於

2度分隔為: a 屬於{e2},等同於e屬於 ,有共同項。

3度分隔為: {e2}有共同項,等同於a屬於

4度分隔為: {e2}有共同項

【sn關係的更新】

當然,發現是乙個核心問題,另外乙個問題就是更新,因為sn的關係不會是一成不變的,在乙個活躍的sn社群裡,每天使用者之間的關係的更新更是可觀。這裡只考慮關係新增的例子:

a:

e:

當a 與 e 直接建立了好友關係後,應該說整合系統的關係全都變化了,因為這個新的關係一定會導致一些關係的短路,從而導致很多現有的關係的調整。但是因為我們只儲存2度分隔以內的關係,也只關心兩度分隔以內的關係,因此當發生了乙個新的關係後,2度內關係的變化一定是a和e本身或者他們的一度關係的使用者,再遠的使用者將不受這個關係的影響。

因此首先 所有{a1}的元素的二度分隔集合裡要加上e,所有{e1}的元素的二度分隔集合裡要加上a。

然後是二度的修正。分別加上對方的1度。

= =

最後是一度的修正:a, e 的 一度需要加入e,a:

= =

整體操作的量大約在2n次操作,比我們通常認為的要小的多 :) 。

六度分隔與最短路徑

最短路徑 圓明園的北部有乙個迷宮,據說古時候每次有慶典在圓明園的時候,皇帝會派一些宮女走迷宮,看誰最先走到迷宮內的亭子,會有不錯的獎賞。迷宮問題對數學家們來講雖然是小兒科但在計算機課程上卻非常重要,因為不同的求解會涉及到遞迴,廣度優先和深度優先等演算法。迷宮畢竟是乙個放置在2維空間的有限聯絡的網路,...

六度分隔理論

mnoz 2005 11 17 12 53 21 六度分隔理論 六度分隔 six degrees of separation 理論。1967年 哈佛大學的心理學教授stanley milgram 1933 1984 想要描繪乙個鏈結人與社群的人際連繫網。做過一次連鎖信實驗,結果發現了 六度分隔 現象...

六度分隔理論

小世界現象 又稱小世界效應 假設世界上所有互不相識的人只需要很少中間人就能建立起聯絡。六度分隔理論 six degrees of separation 後來1967年 哈佛大學的心理學教授斯坦利 公尺爾格拉姆 stanley milgram,1933年 1984年 根據這概念做過一次連鎖信實驗,嘗試...