これが私のラビンカープアルゴリズムの実装です。基本的にはすべて問題なく動作するようです。例えば:
rabinKarp "andrew" "drew" = true
rabinKarp "andrew" az "= false
ですから、それは問題ありませんが、私がこれを行うと、奇妙な理由があります。」
ラビンカープ文字「こんにちは」「こんにちは」
trueを返します。これらの2つの単語でのみ発生するようですが、他の組み合わせでこれを実行することに遭遇したことはありません。なぜそれが起こっているのかについてのフィードバックをいただければ幸いです。
import Data.Char
hash :: String -> Int
hash [] = -1
hash (x:xs) = (ord x + (hash xs))
rabinKarp :: String -> String -> Bool
rabinKarp [] _ = False
rabinKarp mainString patternString =
let
hashPattern = hash patternString
hashMain = hash (take (length patternString) mainString)
in if hashPattern == hashMain
then True
else rabinKarp (drop 1 mainString) patternString