fbpx
วิกิพีเดีย

ขั้นตอนวิธีค้นหาสายอักขระบอยเยอร์–มัวร์

ขั้นตอนวิธีค้นหาสายอักขระบอยเยอร์-มัวร์ หรือ Boyer-Moore Algorithm เป็นวิธีการจับคู่แบบตรงทั้งหมด จะเปรียบเทียบสัญลักษณ์ของรูปแบบของ Pattern จากขวาไปซ้าย หลังการเปรียบเทียบรูปแบบที่ถูกเลื่อนไปแล้วตามขอบเขตที่กว้างที่สุดและจะเลื่อนค่าสูงสุดที่ถูกกำหนดโดย 2 กรณีคือ การแก้ปัญหา Good-Suffix และ การแก้ปัญหา Bad-Character

การแก้ปัญหา Bad-Character

ในการเลื่อนตำแหน่งจะหาได้จากตำแหน่งที่ผิดใน pattern ลบกับตำแหน่งที่ปรากฎใน pattern

ตัวอย่างการทำงาน

Text : [a, c, b, a, b, a, c, a, b, c, a, c, c]

Pattern : [a, b, c, a, c ]

(a) c ไม่เท่ากับ b และ b ปรากฎใน pattern จึ่งเลื่อนให้ b ในpattern ให้ตรงกับ b ใน text จะเลื่อนได้โดย 4-1 = 3 ตำแหน่ง

Text : [a, c, b, a, b, a, c, a, b, c, a, c, c]

Pattern : [a, b, c, a, c ]

(b) c ไม่เท่ากับ a และ a ปรากฎใน pattern จึ่งเลื่อนให้ a ในpattern ให้ตรงกับ a ใน text จะเลื่อนได้โดย 4-3 = 1 ตำแหน่ง

Text : [a, c, b, a, b, a, c, a, b, c, a, c, c]

Pattern : [a, b, c, a, c ]

(c) c ไม่เท่ากับ b และ b ปรากฎใน pattern จึ่งเลื่อนให้ b ในpattern ให้ตรงกับ b ใน text จะเลื่อนได้โดย 4-1 = 3 ตำแหน่ง

Text : [a, c, b, a, b, a, c, a, b, c, a, c, c]

Pattern : [a, b, c, a, c ]

(d) ทำการจับคู่เสร็จสมบูรณ์

การแก้ปัญหา Good-Suffix

ในการเลื่อนตำแหน่งจะหาได้จากความยาวของ pattern ลบกับความยาวตำแหน่งที่ปรากฎซึ่งจะต้องเป็นค่าสูงสุด

ตัวอย่างการทำงาน

Text : [b, a, a, c, d, b, a, c, a, c]

Pattern : [c, b, a, a, c]

(a) ในกรณีไม่ match ครั้งแรก ซึ่งตัวที่ถูกไม่มีเลย ให้เลื่อนไป 1 ตำแหน่ง

Text : [b, a, a, c, d, b, a, c, a, c]

Pattern : [c, b, a, a, c]

(b) กรณีที่ไม่มีตัวที่ match ใน pattern ให้เลื่อนไปด้วยความยาว pattern

Text : [b, a, a, c, d, b, a, c, a, c]

Pattern : [c, b, a, a, c]

(c) ปรากฎว่าไม่มีข้อความที่ตรงกัน

Text : [b, a, a, a, c, b, a, c, a, c]

Pattern : [a, c, b, c, c, b]

(d) กรณีที่ match แล้วมีตัวที่ match ใน pattern ให้เลื่อนไป 6-3 =3 ตำแหน่ง

Text : [b, a, a, a, c, b, a, c, a, c]

Pattern : [a, c, b, c, c, b]

กระบวนการที่จะแก้ปัญหาแบบ Good Suffix ค่อนข้างทำความเข้าใจแล้วดำเนินการยาก ดังนั้น อัลกอรึทึม Boyer Moore บางรุ่นได้ตัดการแก้ปัญหาGood Suffix ออกไปเนื่องจากการแก้ปัญหาแบบ Bad Character นั้นมีประสิทธิภาพมากกว่าและการแก้ป้ญหาแบบ Good Suffix จะเสียการเปรียบเทียบไปจำนวนมาก

ความซับซ้อนของเวลา

Best case : O(n/m) ถ้าตัวอักษรไม่มีอยู่เลยอาจส่งผลให้เกิดการเปลี่ยนแปลงโดยความยาว m

worst case : - O(nm) ถ้า pattern ปรากฏใน text

    - O(n+m) ถ้า pattern ไม่ปรากฏใน text

Code ของ Bad Character

def BadCharShift(pattern):     m = len(pattern)     skipList = {}     for i in range(0, m -1):         skipList[pattern[i]] = m-i-1     return skipList 

Code ของ Good Suffix

def findPosition(badchar, suffix, pattern): m = len(pattern) for offset in range(1, m+1)[::-1]: flag = True for suffix_index in range(0, len(suffix)):  term_index = offset-len(suffix)-1+suffix_index  if term_index < 0 or suffix[suffix_index] == pattern[term_index]:  pass  else:  flag = False term_index = offset-len(suffix)-1 if flag and (term_index <= 0 or pattern[term_index-1] != badchar):  return len(pattern)-offset+1 def SuffixShift(pattern): m = len(pattern) skipList = {} buffer = '' for i in range(0, m): skipList[len(buffer)] = findPosition(pattern[m-1-i], buffer, pattern) buffer = pattern[m-1-i] + buffer return skipList 

Code Boyer Moore

def Boyer_Moore(text, pattern): results = [] good = SuffixShift(pattern) bad = BadCharShift(pattern) n = len(text) m = len(pattern) i = 0 while i < n - m +1: j = m while j > 0 and pattern[j-1] == text[i+j-1]: j -= 1 if j > 0: badShift = bad.get(text[i+j-1], m) goodShift = good[m-j] if badShift > goodShift: i += badShift else: i += goodShift else: results.append(i) i += 1 return results 

อ้างอิง

ameerkat Boyer Moore string search implementation in Python ค้นหาเมืื่อ 1 เมษายน 2561

Korrakhod Baiya Boyer Moore Tang ค้นหาเมืื่อ 23 มีนาคม 2561

geeksforgeeks Pattern Searching | (Boyer Moore Algorithm – Bad Character Heuristic) ค้นหาเมืื่อ 3 เมษายน 2561

สมชาย ประสิทธิ์จูตระกูล อัลกอริทึม : 9.18 การจับคู่สตริง - Boyer-Moore ค้นหาเมืื่อ 20 มีนาคม 2561

นตอนว, นหาสายอ, กขระบอยเยอร, วร, นตอนว, นหาสายอ, กขระบอยเยอร, วร, หร, boyer, moore, algorithm, เป, นว, การจ, บค, แบบตรงท, งหมด, จะเปร, ยบเท, ยบส, ญล, กษณ, ของร, ปแบบของ, pattern, จากขวาไปซ, าย, หล, งการเปร, ยบเท, ยบร, ปแบบท, กเล, อนไปแล, วตามขอบเขตท, กว, างท, . khntxnwithikhnhasayxkkhrabxyeyxr mwr hrux Boyer Moore Algorithm epnwithikarcbkhuaebbtrngthnghmd caepriybethiybsylksnkhxngrupaebbkhxng Pattern cakkhwaipsay hlngkarepriybethiybrupaebbthithukeluxnipaelwtamkhxbekhtthikwangthisudaelacaeluxnkhasungsudthithukkahndody 2 krnikhux karaekpyha Good Suffix aela karaekpyha Bad Character enuxha 1 karaekpyha Bad Character 2 karaekpyha Good Suffix 3 khwamsbsxnkhxngewla 4 Code khxng Bad Character 5 Code khxng Good Suffix 6 Code Boyer Moore 7 xangxing karaekpyha Bad Character aekikh inkareluxntaaehnngcahaidcaktaaehnngthiphidin pattern lbkbtaaehnngthiprakdin patterntwxyangkarthanganText a c b a b a c a b c a c c Pattern a b c a c a c imethakb b aela b prakdin pattern cungeluxnih b inpattern ihtrngkb b in text caeluxnidody 4 1 3 taaehnngText a c b a b a c a b c a c c Pattern a b c a c b c imethakb a aela a prakdin pattern cungeluxnih a inpattern ihtrngkb a in text caeluxnidody 4 3 1 taaehnngText a c b a b a c a b c a c c Pattern a b c a c c c imethakb b aela b prakdin pattern cungeluxnih b inpattern ihtrngkb b in text caeluxnidody 4 1 3 taaehnngText a c b a b a c a b c a c c Pattern a b c a c d thakarcbkhuesrcsmburn karaekpyha Good Suffix aekikh inkareluxntaaehnngcahaidcakkhwamyawkhxng pattern lbkbkhwamyawtaaehnngthiprakdsungcatxngepnkhasungsudtwxyangkarthanganText b a a c d b a c a c Pattern c b a a c a inkrniim match khrngaerk sungtwthithukimmiely iheluxnip 1 taaehnngText b a a c d b a c a c Pattern c b a a c b krnithiimmitwthi match in pattern iheluxnipdwykhwamyaw patternText b a a c d b a c a c Pattern c b a a c c prakdwaimmikhxkhwamthitrngknText b a a a c b a c a c Pattern a c b c c b d krnithi match aelwmitwthi match in pattern iheluxnip 6 3 3 taaehnngText b a a a c b a c a c Pattern a c b c c b krabwnkarthicaaekpyhaaebb Good Suffix khxnkhangthakhwamekhaicaelwdaeninkaryak dngnn xlkxruthum Boyer Moore bangrunidtdkaraekpyhaGood Suffix xxkipenuxngcakkaraekpyhaaebb Bad Character nnmiprasiththiphaphmakkwaaelakaraekpyhaaebb Good Suffix caesiykarepriybethiybipcanwnmak khwamsbsxnkhxngewla aekikh Best case O n m thatwxksrimmixyuelyxacsngphlihekidkarepliynaeplngodykhwamyaw mworst case O nm tha pattern praktin text O n m tha pattern impraktin textCode khxng Bad Character aekikhdef BadCharShift pattern m len pattern skipList for i in range 0 m 1 skipList pattern i m i 1 return skipListCode khxng Good Suffix aekikhdef findPosition badchar suffix pattern m len pattern for offset in range 1 m 1 1 flag True for suffix index in range 0 len suffix term index offset len suffix 1 suffix index if term index lt 0 or suffix suffix index pattern term index pass else flag False term index offset len suffix 1 if flag and term index lt 0 or pattern term index 1 badchar return len pattern offset 1 def SuffixShift pattern m len pattern skipList buffer for i in range 0 m skipList len buffer findPosition pattern m 1 i buffer pattern buffer pattern m 1 i buffer return skipListCode Boyer Moore aekikhdef Boyer Moore text pattern results good SuffixShift pattern bad BadCharShift pattern n len text m len pattern i 0 while i lt n m 1 j m while j gt 0 and pattern j 1 text i j 1 j 1 if j gt 0 badShift bad get text i j 1 m goodShift good m j if badShift gt goodShift i badShift else i goodShift else results append i i 1 return resultsxangxing aekikhameerkat Boyer Moore string search implementation in Python khnhaemuux 1 emsayn 2561Korrakhod Baiya Boyer Moore Tang khnhaemuux 23 minakhm 2561geeksforgeeks Pattern Searching Boyer Moore Algorithm Bad Character Heuristic khnhaemuux 3 emsayn 2561smchay prasiththicutrakul xlkxrithum 9 18 karcbkhustring Boyer Moore khnhaemuux 20 minakhm 2561ekhathungcak https th wikipedia org w index php title khntxnwithikhnhasayxkkhrabxyeyxr mwr amp oldid 7605739, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม