演算法 萊茵斯坦距離演算法優化

2021-10-23 14:10:35 字數 2421 閱讀 1332

萊文斯坦距離

查詢字串之間相似度

對於「abcdef」和「higabc」演算法計算結果為0,不符合實際,「abc」為相似字串

原來方法最後計算結果是(1-最長不同字串長度)/ 最長字串長度,優化後的方法將最長不同字串長度的結果由d[n][m]改為陣列最後一行或者最後一列的最小值(後面優化後的**中的getrowcolumnmin函式實現)

import org.junit.test;

/** **

* * @author : 張智順

* @date : 2020-08-03 20:28

**/public

class

mylevenshtein

d =newint

[n +1]

[m +1]

;// 初始化第一列

for(i =

0; i <= n; i++

)// 初始化第一行

for(j =

0; j <= m; j++

)// 遍歷str

for(i =

1; i <= n; i++

)else

// 左邊+1,上邊+1, 左上角+temp取最小

d[i]

[j]= math.

min(math.

min(d[i -1]

[j]+

1, d[i]

[j -1]

+1), d[i -1]

[j -1]

+ temp);}

} system.out.

println

("最長不同字元數:"

+ d[n]

[m])

; system.out.

println

("字串最長數:"

+ math.

max(str.

length()

, target.

length()

));return(1

-(float

) d[n]

[m]/ math.

max(str.

length()

, target.

length()

))*100f;}

@test

public

void

main()

}

import org.junit.test;

/** **

* * @author : 張智順

* @date : 2020-08-03 20:28

**/public

class

main

d =newint

[n +1]

[m +1]

;// 初始化第一列

for(i =

0; i <= n; i++

)// 初始化第一行

for(j =

0; j <= m; j++

)// 遍歷str

for(i =

1; i <= n; i++

)else

// 左邊+1,上邊+1, 左上角+temp取最小

d[i]

[j]= math.

min(math.

min(d[i -1]

[j]+

1, d[i]

[j -1]

+1), d[i -1]

[j -1]

+ temp);}

} system.out.

println

("最長不同字元數:"

+getrowcolumnmin

(d))

; system.out.

println

("字串最長數:"

+ math.

max(str.

length()

, target.

length()

));return(1

-(float

)getrowcolumnmin

(d)/ math.

max(str.

length()

, target.

length()

))*100f;}

public

static

intgetrowcolumnmin

(int

d)}if

(d.length >= d[0]

.length)

}return min;

}@test

public

void

main()

}

KNN的優化演算法1 距離加權

參考文章 對參考文章中最後一部分說的有問題的地方進行了修改。權值加權 為每個點的距離增加乙個權重,使得距離近的點可以得到更大的權重,在此描述如何加權。該方法最簡單的形式是返回距離的倒數,比如距離d,權重1 d。有時候,完全一樣或非常接近的商品權重會很大甚至無窮大。基於這樣的原因,在距離求倒數時,在距...

編輯距離演算法

字串編輯距離 是一種字串之間相似度計算的方法。給定兩個字串s t,將s轉換成t所需要的刪除,插入,替換操作的數量就叫做s到t的編輯路徑。而最短的編輯路徑就叫做字串s和t的編輯距離。舉個例子 s eeba t abac 我們可以按照這樣的步驟轉變 1 將s中的第乙個e變成a 2 刪除s中的第二個e 3...

編輯距離演算法

編輯距離 edit distance 又稱levenshtein距離,是俄羅斯科學家vladimir levenshtein在1965年提出的。是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將 skill 轉換...