この質問は頭の中でばかげているように聞こえ、おそらく非常に明白な何かを見落としているので、ここでお詫びします。ともかく...
さて、私は自分自身でスカラを学んでおり、学習演習として、文字列に別の小さな文字列が含まれているかどうかを判断するメソッドを実装することにしました。私が最初にしたことは、単純なバージョンを使用して、文字列の各文字に移動し、各文字が一致するかどうかを確認するために順方向にチェックを開始することでした。それはうまくいきました。次に、より効率的な方法を実装することにしました。これが私が思いついたものです(特別なケースは含まれていません):
// return true if a is a substring of b
def is_sub(a: String, b: String) : Boolean = {
for(i <- 0 until b.length-a.length) { // O(n-m)
if(a.hashCode == b.substring(i,a.length+i).hashCode) return true // O(1) + O(1) + O(1)
}
return false
}
まず、誰かが私の仕事をチェックして、私が正しいことを確認できますか? 私はばかげた間違いをしがちです。2 番目に、私の時間計算量が正確であることを確認していただけますか。最初の 2 つは、文字列検索アルゴリズムのウィキペディアのページでこの方法が言及されていないのはなぜだと思いますか? 理論的には、これは O(nm) で、前処理スペースは必要ありません。
この問題の分析をどこで台無しにしましたか?