萊文斯坦距離
查詢字串之間相似度
對於「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 轉換...