Chu LiuEdmonds演算法之無環解析

2021-08-17 20:41:57 字數 986 閱讀 6670

本篇部落格是進一步介紹chu-liu/edmonds演算法是如何實施的。

該實驗用的資料結構是python的巢狀字典,形如:

graph = , 『w0』: , 『w1』: , 『w2』: }

其中外層字典的key值是依存對中的依賴項,內層字典的key值是依存對中的核心詞,內層字典的value值是依存對的權重,也就是依存對成立的可能性的大小。chu-liu/edmonds演算法要做的就是為除了根節點以為的其他詞找到核心詞。該篇部落格只談沒迴圈的依存樹,之後再講有迴圈的如何解析。

1、如果有進入根的弧,則將其全部丟棄;

這個步驟比較好處理,只有將字典中:』root』: 這個部分刪掉,就不存在進入根節點的弧了。

如下圖,將紅色弧去掉:

2、對於除根以外的每個節點,選擇權重最大的輸入弧,讓所選的n-1個弧成為集合s

這一步寫了乙個迴圈,逐個比較內層字典的value值,選出最大的並且記錄當前的key值,賦值給乙個新圖。

**如下:

new_graph = {}

for d0 in graph:

tem = 0

for d1 in graph[d0]:

if graph[d0][d1] > tem:

tem = graph[d0][d1]

temp = d1

new_graph[d0] = {}

new_graph[d0][temp] = tem

形式化如下圖:

處理前:

處理後:

演算法基礎( 演算法)

演算法基礎 演算法 hash演算法有兩種,即sha 1和md5演算法這裡先介紹md5演算法.md5產生乙個128位的hash值,在經過一寫初始樹立後,將明文分成了512位的塊,再將每一塊分成16個32位的子塊。演算法的輸出是4個32位的塊,連線起來構成128位的hash值。首先,將訊息填充到比512...

演算法 分治演算法

分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...

演算法 遞迴演算法

遞迴演算法的概念,就是通過不斷地呼叫自身,最終達到解決問題的目的。遞迴有兩個點需要注意 1.要不斷的呼叫自身 2.這個遞迴要有出口,不能成為死迴圈 看下面的例子。很多介紹遞迴演算法的,都會用遞迴來做乙個題目 計算乙個數的階層。例如 計算5的階層,5 5 x 4 x 3 x 2 x 1 用遞迴來實現 ...