拉賓-卡普算法

在計算機科學中 ， 拉賓 - 卡普算法  或卡普 - 拉賓算法  ， 是一種由理查德 · 卡普與邁克爾 · 拉賓於1987年提出的 、 使用散列函數以在文本中搜尋單個模式串的字符串搜索算法單次匹配 。 該算法先使用旋轉哈希以快速篩出無法與給定串匹配的文本位置 ， 此後對剩餘位置能否成功匹配進行檢驗 。 此算法可推廣到用於在文本搜尋單個模式串的所有匹配或在文本中搜尋多個模式串的匹配 。 若要在一段文本中找出單個模式串的一個匹配 ， 此算法具有線性時間的平均複雜度 ， 其運行時間與待匹配文本和模式串的長度成線性關係 。 雖然平均情況下 ， 此算法表現優異 ， 但最壞情況下 ， 其複雜度爲文本長與模式串長的乘積 。 當在文本中搜尋多個匹配時 ， 其具有線性時間的平均複雜度 （ 與文本串長 、 模式串長 、 模式串所有匹配總長三者的和成線性關係 ） 。 相對地 ， 另一種用於找出模式串所有匹配的AC自動機算法的最壞情況複雜度與文本串長 、 模式串長 、 模式串所有匹配總數 （ 而非總長 ） 成正比 。 此算法的一個實際應用爲 （ 如論文查重 ） 。 在給定原材料與待查重論文的情況下 ， 此算法可以迅速在論文中搜尋原材料中的句子 ， 同時忽略諸如大小寫與標點等細節 。 由於原材料中的字符串過多 ， 故單字符串搜索算法在此處不適用 。