PHP 字串匹配演算法 Sunday演算法

2021-09-06 06:17:48 字數 1370 閱讀 8945

搜尋文字 text = "my testing algorithm in test"

模式 pattern = "test"

sunday演算法的關鍵點在於

1.設定乙個匹配位移對映 shift,這個shift對映關係必須按從左到右的順序簡歷,例如pattern = "test",注意到此處有2個t,那麼建立出來的位移對映是 shift = array ( [t] => 1 [e] => 3 [s] => 2 ),而如果不是從左到右,是從右到左的建立對映,就會變成 shift = array ( [t] => 4 [e] => 3 [s] => 2),這樣到時候匹配就無法得到正確結果

2.根據當前比對字串的下乙個字元來確定位移長度,如下圖

第一次比較的時候,如圖1,第乙個字元「m」就和「t」不一樣,那就查詢比patter長1位的text中的字元,為「e」,然後查詢對映表,e => 3,接下來把pattern向後移動3位,就到了,圖2中的位置,再從「t」開始比較,發現匹配到了繼續往後,看text中比pattern長1的那個字元,為「i」,此時發現對映表中沒有「i」,則直接將pattern向後移動pattern_size位,就到了圖3,然後重複前面的過程,直到比較到text_size - patter_size為座標的那個字元

下面是**:

1

<?php2 #

字串匹配,sunday演算法34

function sunday($patt, $text

) 16

17$i = 0;

18$limit = $text_size - $patt_size; #

需要開始匹配的最後乙個字元座標

19while ($i

<= $limit

) ";

26break;27

}28}29

30$shift_index = $i + $patt_size; #

在text中比pattern的多一位的字元座標

31if ($shift_index

< $text_size && isset($shift[$text[$shift_index

]])) else37}

38}3940

$text = "my testing algorithm test";

41$patt = "test";

4243 sunday($patt, $text

);44 ?>

match index: 3 

match index: 21

PHP實現的字串匹配演算法示例 sunday演算法

sunday演算法是daniel m.sunday於1990年提出的字串模式匹配。其核心思想是 在匹配過程中,模式串發現不匹配時,演算法能跳過盡可能多的字元以進行下一步的匹配,從而提高了匹配效率。param pattern 模式串 param text 待匹配串 function mysunday ...

字串匹配演算法 字串匹配演算法總覽

字串匹配在文字處理裡非常重要,我們採用簡潔的python 把以下演算法一一實現並講解。樸素演算法 algorithm rabin karp 演算法 有限自動機演算法 finite automation knuth morris pratt 演算法 kmp algorithm boyer moore ...

php隨機匹配演算法,PHP實現的字串匹配演算法示例

這篇文章主要介紹了php實現的字串匹配演算法,簡單描述了sunday演算法的概念與原理,並結合例項形式分析了php基於sunday演算法實現字串匹配操作相關技巧,需要的朋友可以參考下 sunday演算法是daniel m.sunday於1990年提出的字串模式匹配。其核心思想是 在匹配過程中,模式串...