文字比較演算法的實現

2021-04-24 06:40:32 字數 2833 閱讀 8791

這段時間很忙,呵呵,沒時間寫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 ...