暴力字串搜寻(Brute-force Substring Search)算法是最基本的字串搜寻算法。它可以按照原文中字元的顺序,逐一与搜寻样本(pattern)进行比对,判断目前的搜寻位置是否就是搜寻样本存在的位置。
最直觉简单搜寻文字的方法,就是将原文内的所有文字全都看过一次,并在过程中一一比对原文内的字元和搜寻样本内的所有字元。这样的作法被称为是“暴力法”,采用地毯式的搜索,虽然很直觉,但效能不怎么好。
不过这个方法还是有个好处是,它不需要额外的空间和时间对字串资料进行“预处理”的动作,因此如果只是要在很短的字串中搜寻文字的话,还是可以考虑使用这个算法的。
现在要搜寻以上这段文字内所包含的EXAMPLE字串的位置。
首先先看到这段文字的第一个字母H,再看看我们要搜寻的EXAMPLE字串的第一个字母。嗯……H和E不同,所以这个位置并不是EXAMPLE字串。
接着来看这段文字的第二个字母E,再看看我们要搜寻的EXAMPLE字串的第一个字母。
嗯……E和E相同,这个位置有可能就是我们要找的EXAMPLE字串!但还不能确定,接着再来看看下一个字母。
这段文字的第三个字母是R,再看看我们要搜寻的EXAMPLE字串的第二个字母。嗯……R和X不同,所以这里并不是EXAMPLE字串。
经过两次的碰壁,我们的字串比对过程终于往后迈进了一点点了。接着重新看文字中的第三个字母R和EXAMPLE字串的第一个字母E是不是相同。
不相同,再往后看。依此类推,所以完整寻找字串的过程如下。
如此一来,找到最后,可以知道EXAMPLE字串开始于文字中索引值为17 50 84 91的位置。
#{{O(nm)}}# 直到走访到最后一个字元才找到要搜寻的样本,或是该文字中根本就没有要搜寻的样本的存在。并且样本和原文在判断字元是否相同时总是会判断到样本的所有字元。
脸书PO文,快来留言与分享吧!