Bitap算法

Bitap算法 （ 或稱爲shift - or 、 shift - and 、 Baeza - Yates – Gonnet算法 ） 是一種字符串近似匹配算法 。 該算法可判斷給定的文本是否包含與定義模式 “ 近似相等 ” 的子字符串 。 其中 ， 根據萊文斯坦距離如果子字符串和定義模式彼此在給定距離 “ K ” 之內 ， 則該算法認爲他們近似 。 該算法預先計算一組位掩碼 ， 其中每個位掩碼的每一個元素都包含一個模式 。 然後 ， 它可以通過按位操作以完成大部分工作 。 可以將Bitap算法作爲Unix軟件開發工具agrep的基礎算法之一 ， 它由 、 Sun Wu和Burra Gopal開發 。 Udi Manber和Sun Wu的原始論文對算法進行了擴展 ， 以處理一般正則表達式的模糊匹配 。 由於算法需要的數據結構 ， 它在小於固定長度 （ 通常是字長 ） 的模式上表現最佳 。 但是 ， 一旦針對給定的字長 “ m ” 進行定義 ， 則其運行時間是完全可以預測的 — — 無論文本的結構或模式如何 ， 它的運行時間均爲O （ " mn " ） 。 搜索精確字符串的Bitap算法在1964年由BálintDömölki發明 ， 並由R. K. Shyamasundar在1977年進行了擴充 。 隨後 ， 在1989年由和開發 ， 該算法也延伸到了處理字符 、 通配符和不匹配字符 。 1991年 ， 和Sun Wu對其進行了擴展 ， 以處理插入和刪除操作 （ 完全的模糊字符串搜索 ） 。 此算法後來在1996年由 Baeza - Yates和改進 。