Boyer Moore演算法實現 壞字元規則

2021-09-21 23:57:51 字數 1325 閱讀 5851

根據阮一峰的部落格

試寫演算法。

使用好字尾的方法比較複雜,暫未實現。

只實現了通過壞字元的方法,事實上boyer-moore-horspool演算法是簡化版的boyer-moore演算法,它只使用壞字元規則。

具體**如下:

class

program  

static

intboyermoore(

char

source, 

char

pattern)  

else

else

start_pointer += offset;  

end_pointer = start_pointer + pattern_length - 1;  

offset_for_print += offset;  

}  }  

return

0;  

}  static

bool

checkisequal_badchar(

char

pattern, 

char

chars, 

outchar

badchar, 

outint

badpostion)  

for(int

i = pattern.length - 1; i >= 0; i--)  

}  badchar = 

'\0'

;  badpostion = -1;  

return

true

;  }  

/// 

/// 根據起始位置和結束位置,給出子串

/// 

/// 

/// 

/// 

/// 

static

char

subchars(

char

source, 

intstart, 

intend)  

return

c;  

}  /// 

/// 生成壞字元位置表

/// 

/// 

/// 

static

dictionary<

char

, int

> getpostiondictionary(

char

chars)  

else

//存在則覆蓋

}  return

d;  

}  } 

測試資料輸出圖:

Boyer Moore 演算法總結

最近在寫乙個搜尋字串的用例,剛好使用到這個演算法,在網路上學習了多篇文章,在這裡記錄一下自己的理解。首先理清楚演算法的原理 1.演算法是從尾部開始比較字串的,如果最後乙個字元不匹配,且不匹配的字元不在模式串中,那麼可以直接忽略這段比較內容,這種情況下效率最高。如下所示 abbdd ccggxabbd...

Boyer Moore 投票演算法

刷題過程中遇到的乙個非常巧妙的演算法。是出現在 求陣列 現超過一半的數字 這道題中。陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。例項1輸入 1,2,3,2,2,2,5,4,2 輸出 2 1 陣列長度 50000 思路 如果把陣...

Boyer Moore 投票演算法

有以下問題 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數 大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。比較容易想到的解法是用雜湊表對每個數出現的次數進行儲存,然後就可以找出次數最多的那個數了。這樣做的時間和空間複雜度都是 o n o n...