<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      一個快速、高效的Levenshtein算法實現

      Levenshtein算法,用于計算兩個字符串之間的Levenshtein距離。而Levenshtein距離又稱為編輯距離,是指兩個字符串之間,由一個轉換成另一個所需的最少編輯操作次數。許可的編輯操作包括將一個字符替換成另一個字符,插入一個字符,刪除一個字符。

      概述

      Levenshtein距離用來描述兩個字符串之間的差異。我在一個網絡爬蟲程序里面使用這個算法來比較兩個網頁之間的版本,如果網頁的內容有足夠多的變動,我便將它更新到我的數據庫。

      說明

      原來的算法是創建一個大小為StrLen1*StrLen2的矩陣。如果所有字符串加起來是1000個字符那么長的話,那么這個矩陣就會是1M;如果字符串是10000個字符,那么矩陣就是100M。如果元素都是整數(這里是指數字,Int32)的話,那么矩陣就會是4*100M == 400MB這么大,唉……

      現在的算法版本只使用2*StrLen個元素,這使得后面給出的例子成為2*10,000*4 = 80 KB。其結果是,不但內存占用更少,而且速度也變快了!因為這使得內存分配只需要很少的時間來完成。當兩個字符串的長度都是1k左右時,新算法的效率是舊算法的兩倍!

      示例

      原來的版本將會創建一個矩陣[6+1, 5+1],而我的新算法將會創建兩個向量[6+1](黃色元素)。在這兩個算法版本中,字符串的順序是無關緊要、無所謂的,也就是說,它也可以是矩陣[5+1, 6+1]和兩個向量[5+1]。

      新的算法

      步驟

      步驟說明
      1 設置n為字符串s的長度。("GUMBO")
      設置m為字符串t的長度。("GAMBOL")
      如果n等于0,返回m并退出。
      如果m等于0,返回n并退出。
      構造兩個向量v0[m+1] 和v1[m+1],串聯0..m之間所有的元素。
      2 初始化 v0 to 0..m。
      3 檢查 s (i from 1 to n) 中的每個字符。
      4 檢查 t (j from 1 to m) 中的每個字符
      5 如果 s[i] 等于 t[j],則編輯代價為 0;
      如果 s[i] 不等于 t[j],則編輯代價為1。
      6 設置單元v1[j]為下面的最小值之一:
      a、緊鄰該單元上方+1:v1[j-1] + 1
      b、緊鄰該單元左側+1:v0[j] + 1
      c、該單元對角線上方和左側+cost:v0[j-1] + cost
      7 在完成迭代 (3, 4, 5, 6) 之后,v1[m]便是編輯距離的值。

      本小節將演示如何計算"GUMBO"和"GAMBOL"兩個字符串的Levenshtein距離。

      步驟1、2

        v0 v1        
          G U M B O
        0 1 2 3 4 5
      G 1          
      A 2          
      M 3          
      B 4          
      O 5          
      L 6          

      步驟3-6,當 i = 1

       

        v0 v1        
          G U M B O
        0 1 2 3 4 5
      G 1 0        
      A 2 1        
      M 3 2        
      B 4 3        
      O 5 4        
      L 6 5        

      步驟3-6,當 i = 2

          v0 v1      
          G U M B O
        0 1 2 3 4 5
      G 1 0 1      
      A 2 1 1      
      M 3 2 2      
      B 4 3 3      
      O 5 4 4      
      L 6 5 5      

      步驟3-6,當 i = 3

       

            v0 v1    
          G U M B O
        0 1 2 3 4 5
      G 1 0 1 2    
      A 2 1 1 2    
      M 3 2 2 1    
      B 4 3 3 2    
      O 5 4 4 3    
      L 6 5 5 4    

      步驟3-6,當 i = 4

       

              v0 v1  
          G U M B O
        0 1 2 3 4 5
      G 1 0 1 2 3  
      A 2 1 1 2 3  
      M 3 2 2 1 2  
      B 4 3 3 2 1  
      O 5 4 4 3 2  
      L 6 5 5 4 3  

      步驟3-6,當 i = 5

       

                v0 v1
          G U M B O
        0 1 2 3 4 5
      G 1 0 1 2 3 4
      A 2 1 1 2 3 4
      M 3 2 2 1 2 3
      B 4 3 3 2 1 2
      O 5 4 4 3 2 1
      L 6 5 5 4 3 2

      步驟7

      編輯距離就是矩陣右下角的值,v1[m] == 2。由"GUMBO"變換為"GAMBOL"的過程對于我來說是很只管的,即通過將"A"替換為"U",并在末尾追加"L"這樣子(實際上替換的過程是由移除和插入兩個操作組合而成的)。

      改良

      如果您確信你的字符串永遠不會超過2^16(65536)個字符,那么你可以使用ushort來表示而不是int,如果字符串少于2^8個,還可以使用byte。我覺得這個算法用非托管代碼實現的話可能會更快,但我沒有試過。

      參考文獻


      下載代碼請前往原文:http://www.codeproject.com/Articles/13525/Fast-memory-efficient-Levenshtein-algorithm

       

      posted @ 2012-03-27 09:00  O.C  閱讀(14796)  評論(14)    收藏  舉報
      主站蜘蛛池模板: 免费人成在线视频无码| 无码伊人66久久大杳蕉网站谷歌| 2020中文字字幕在线不卡| 午夜福利在线观看6080| 午夜大片免费男女爽爽影院| 久久精品国产最新地址| 成人午夜电影福利免费| 成人毛片100免费观看| 亚洲国产午夜精品理论片| 国产一区二区午夜福利久久| 亚洲国产成人精品无码一区二区| 四虎国产精品成人免费久久| 日韩国产中文字幕精品| 国产成人综合95精品视频| 性色在线视频精品| 高清无码在线视频| 国产精品中出一区二区三区| 精品人妻人人做人人爽夜夜爽| 国产视频 视频一区二区| 亚洲欧美v国产一区二区| 亚洲自拍偷拍福利小视频| 亚洲精品天堂一区二区| 夜色福利站WWW国产在线视频 | 东京热加勒比无码少妇| 99精品国产一区二区三| 视频一区二区不中文字幕| 九九热视频在线精品18| 免费国产高清在线精品一区| 日本激情久久精品人妻热| 免费无码高潮流白浆视频| 国产亚洲精品成人aa片新蒲金| 午夜福利在线观看6080| 福利在线视频一区二区| 99精品热在线在线观看视| 亚洲午夜福利AV一区二区无码| 精品国产伦理国产无遮挡| 免费特黄夫妻生活片| 国产极品粉嫩馒头一线天| 国产精品午夜福利精品| 国产偷窥熟女高潮精品视频| 亚洲精品久荜中文字幕|