分布式找環演算法

2021-10-02 04:08:57 字數 2265 閱讀 7768

distributed_cycle_detection_in_large-scale_sparse_graphs

從每個起點出發,將自己身上的id發給鄰居;

將自己上一輪收到的點id並加上自己的點id,將此路徑繼續傳送給鄰居;

不斷的將上一輪收到的路徑加上自己的點id,將此路徑繼續傳送給鄰居;

每一輪中,沒有收到路徑的節點,將此節點刪除;

當某一點收到的路徑中包含自己的id,則判斷此點id是否為路徑中的最小值,若是,則計一環;

當某一點收到的路徑中包換自己的id,此路徑就會被砍掉,不再繼續傳遞。

參考這篇分布式找環演算法的**,其中主要方法是用 bfs 把每個點當前點儲存的路徑傳送給鄰居,在分布式的情況下需要通過檔案傳輸給鄰居。主要針對的是稀疏圖,所以對(點:邊=1:1000)並不合適,並且此方法會造成環重覆記錄。通過此**,我們進行一些改進找到適合的方式進行找環。

避免在找環過程中走了重複的路徑,所以在**的基礎上,提出了一些剪枝的方式。

拓撲排序

假如點的出度或者入度為0,則此點肯定不能成環,所以可以將這類點從起點中排除掉,因此在去掉此點的過程中也會出現新的出度或入度為0的點。可以迭代將此類點都去掉。

起點id最小

由於每個點都會作為起點,並且每個環都會被環上的每個點找一遍,所以就會造成重複找環的問題。

可以採用當起點出發,每傳遞到下乙個節點的時候,就判斷是否起點比當前點小,如果不是,則這條路徑砍掉。按照這樣子的方式最後找到的環就會是此環上id最小的點找到的。

起點的前驅id比起點id大

在上條起點id最小的情況下,其實走到最後一步是不允許起點的前驅id比起點id小,所以與其走到最後一步判斷出來,可以提前在選起點的時候就先判斷起點的前驅,這樣子可以排除掉一些起點,提高效率。

此方法不能以起點就作為環上的一點,不然會丟失一些環。

因此遇到與路徑中有相同點的時候,即成環,會有一些重覆記錄的環。

優點:減少起點的個數,提高效率

缺點:無法判斷成環是否唯一,所以會重複計環

結合以上三種剪枝方式,可按照bfs、dfs實現找環

bfs傳路徑

按照**中的方法結合以上三種剪枝方式,傳路徑屬於容易理解且好實現的方法,但是問題在於每次儲存的路徑量為n*e^d(n:起點個數、e:平均邊數、d:深度),會隨著找環深度,路徑會時平均邊數的指數倍增加。因此此方法適合平均邊數小於等於1的稀疏圖。

在1400點 200w邊的圖中(2臺128g的機器)進行分布式執行,其中按照拓撲排序過濾掉185個起點

根據以下結果可以看出到深度為4時,儲存量就過大導致程式無法執行。

深度過程檔案大小

總環數時間

21mb

6.1w

1.5s

3343mb

1270w

86s4

75gb——

傳起點傳起點會大大減少儲存和傳輸的量,此方法適用於記錄每個點的成環個數,被短路的環不會被記錄在內。

在1400點 200w邊的圖中(2臺128g的機器)進行分布式執行,其中按照拓撲排序過濾掉185個起點

根據以下結果可以看出到深度為4時,由於被短路的問題,使其環數已達到平穩

深度環數最多的點id

環數最多的點的環數時間2

1275

60010s

3937

3.44w

43s4

9373.45w

48s5

9373.45w

48sdfs

按照dfs的方式並結合以上三種剪枝方式,每次只儲存當前的路徑,執行完成之後再回退,所以不會造成儲存和傳輸上的壓力,但是輪次也會隨著邊的數量而增加,尤其是在分布式的情況下,每執行乙個點就要去傳輸一次檔案,會造成大量小檔案併發傳輸,埠不足,效率比bfs低。

memcache分布式演算法

memcache服務是一套 分布式的快取記憶體系統,由 livejournal 的brad fitzpatrick開發,但目前被許多 使用以提公升 的訪問速度,尤其對於一些大型的 需要頻繁訪問 資料庫的 訪問速度提公升效果十分顯著 1 這是一套 開放源 軟體,以bsd license授權發布。mem...

分布式限流演算法

一 限流的作用 有高併發的系統中,由於api介面無法控制呼叫發的行為,因此如果遇到瞬時請求數量遞增,就會導致介面占用過多的伺服器子u,導致響應速度降低或者超時,甚至可能英雌導致伺服器宕機,尤其是資料庫伺服器。所以就有限流的思想,限制客戶端對伺服器端端的請求限制,如果在單位時間內超過該請求限制,就會執...

分布式定址演算法

springboot讀原始碼系列 elasticsearch系列 資料結構系列 分布式定址演算法是很重要的內容,不了解這些演算法,也就不能透徹的了解各種分布式中介軟體的原理。簡單說一下這些高大上的定址到底是個啥意思,比如在elasticsearch中,採用的是多分片,每個分片上儲存的是不一樣的資料,...