這段時間很忙,呵呵,沒時間寫blog。
前兩天看了乙個文字比較的演算法,演算法的思路我就不多說了,主要說下我的實現。演算法參考:
文字比較演算法剖析(1)-如何確定最大匹配率
文字比較演算法剖析(2)-如何確定最優匹配路徑
我的實現步驟是:
1、計算出所有可行的路徑
如下圖中,n(l,r)所在的位置如果該位置匹配,則肯定要走a區。在掃瞄a區所有的可行路徑,可行路徑的標準是下乙個可行並且匹配的點,在這一步先不考慮不普配的點。
關鍵** :
public
list
<
charpoint
>
getnextpoints(
boolean
comps, charpoint p)
intmaxj
=maxy;
boolean
bo =
false
;for
(intj =
p.gety() +1
; j
<=
maxj; j
++)
charpoint cp
=new
charpoint(i, j);
cp.setfrompoint(p);
cps.add(cp);}}
}return
cps;}
2、計算出最大匹配的路徑
獲得所有可行的路徑後再對所有路徑的節點數進行判斷,節點最多的則是最大匹配路徑。但有可能有幾個最大匹配路徑。
關鍵**:
for(charpoint cp : map.keyset())
}for
(charpoint cp : cps)
cps2.add(cp);}
在計算完最大匹配路徑後在對路徑進行補充。使路徑完整
關鍵**:
public
static
list
<
charpoint
>
boolean
comps,
list
<
charpoint
>
cps)
private
static
void
boolean
comps, charpoint cp,
charpoint next)
for(
inti
=cp.getx() +1
; i
<=
next.getx(); i
++)
for(
inti
=cp.gety() +1
; i
<=
next.gety(); i
++)
next
=next.getnext();}}
public
static
boolean
comps, charpoint cp)
charpoint next
=new
charpoint(comps.length -1
, comps[
0].length -1
return
cp;}
3、計算最優路徑
計算最優路徑的方法很簡單,按照作者的演算法的介紹,計算最優路徑的方法就是最後匹配的節點離root(0,0)點最近的那條路徑
4、計算差異
計算差異也很簡單,就不介紹了,直接上**
textdiff diffdel
=null
;textdiff diffins
=null
;while
(root
!=null
) diffdel
=new
textdiff(textdiff.type_deleted, start, 0);
}diffdel.setdifflength(diffdel.getdifflength() +1
);}if(root.gety()
==next.gety()
&&root.getx()
!=next.getx())
diffins
=new
textdiff(textdiff.type_inserted, start, 0);
}diffins.setdifflength(diffins.getdifflength() +1
);}if(root.getx()
<
comps.length
&&root.gety()
<
comps[root.getx()].length
&&comps[next.getx()][next.gety()])
if(diffins
!=null
&&diffins.getdifflength() !=0
) diffdel
=null
;diffins
=null;}
}root
=root.getnext();
if(root
!=null
&&root.getnext()
==null
) if
(diffins
!=null
&&diffins.getdifflength() !=0
) }}
(已檢測到**有錯誤,正在修改ing,隨後發表修正文章。。。)
順便提前祝各位新春快樂,新年吉祥,和家安康
文字比較演算法 Nakatsu演算法
在 文字比較演算法 ld演算法 文字比較演算法 needleman wunsch演算法 中介紹的ld演算法和lcs演算法都是基於動態規劃的。它們的時間複雜度o mn 空間複雜度o mn 在基於計算匹配字串情況下,是不可優化的。如果只是計算ld和lcs,空間占用可以優化到o m nakatsu演算法在...
文字比較演算法 Nakatsu演算法
在 文字比較演算法 ld演算法 文字比較演算法 needleman wunsch演算法 中介紹的ld演算法和lcs演算法都是基於動態規劃的。它們的時間複雜度o mn 空間複雜度o mn 在基於計算匹配字串情況下,是不可優化的。如果只是計算ld和lcs,空間占用可以優化到o m nakatsu演算法在...
文字比較演算法 計算文字的相似度
原文 在給定的字串a和字串b,ld a,b 表示編輯距離,lcs a,b 表示最長公共子串的長度。如何來度量它們之間的相似度呢?不妨設s a,b 來表示字串a和字串b的相似度。那麼,比較合理的相似度應該滿足下列性質。性質一 0 s a,b 100 0表示完全不相似,100 表示完全相等 性質二 s ...