本篇部落格是進一步介紹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 用遞迴來實現 ...