C#利用萊文史特距離算法計算字符串相似性的方法
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
這篇文章主要介紹了C#計算字符串相似性的方法,實(shí)例分析了C#計算字符串相似性的原理與算法實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下 本文實(shí)例講述了C#計算字符串相似性的方法。分享給大家供大家參考。具體如下: 計算字符串相似性的辦法很多,甚至最笨的辦法可以挨個匹配,這里要講的是使用萊文史特距離來計算字符串相似性。 萊文史特距離概念:假設(shè)函數(shù)名是LD 用于計算兩個字符串之間的相似度。 譬如有兩個字符串A和B。假設(shè)以A為基準(zhǔn),那么該算法就是計算把B通過(替換、刪除、加字符)等方法變成A需要多少步。 例如: A=”abcd”, B=”abc”, 那么 LD(A,B)=1,只需在B字符串中插入一個字符那么就完全等于A A=”abcd”, B=”abcd”, 那么 LD(A,B)= ,因?yàn)檫@兩個貨完全相同 A=”abcd”, B=”abdc”, 那么 LD(A,B)= 1,因?yàn)橹恍璋袯中”dc”互換位置就等于A了。 A=”fwegwegweg@#2″, B=”ddd*&&%^&”, 那么 LD(A,B)= ????,這個叔真不知道了,要用程序算了。 萊文史特距離計算出來的值越大代表步驟越多,說明兩個字符串的相似程度越低。 譬如大家要做個簡易的“文章抄襲”判定功能,那么用這個萊文史特距離完全可以實(shí)現(xiàn)個初步方法。 算法注釋: 1、假設(shè)字符串str1的長度為 n,str2 的長度為 m。 如果 n = 0,則返回 m并退出;(這是句廢話) 2、如果 m=0,則返回 n 并退出。(這依然是句廢話) 3、如果上述都不是則要開始進(jìn)行計算, 構(gòu)建一個數(shù)組 d[0..m, 0..n]。 將第0行初始化為 0..n,第0列初始化為0..m。 依次檢查 str1 的每個字母(i=1..n)。 依次檢查 str2 的每個字母(j=1..m)。 如果 str1[i]=str2[j],則 sign=0;(sign僅僅是個標(biāo)記,沒有任何意思,為了記錄相等還是不相等) 如果 str1[i]!=str12[j],則 sign=1。 將 d[i,j] 設(shè)置為以下三個值中的最小值: 緊鄰當(dāng)前格上方的格的值加一,即 d[i-1,j]+1 緊鄰當(dāng)前格左方的格的值加一,即 d[i,j-1]+1 當(dāng)前格左上方的格的值加sign,即 d[i-1,j-1]+sign 重復(fù)上述幾步直到循環(huán)結(jié)束。d[n,m]既為最終的值 接下來是用c#寫的一款萊文史特距離的實(shí)現(xiàn)。
希望本文所述對大家的C#程序設(shè)計有所幫助。 該文章在 2023/3/22 18:26:05 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |