ฉันติดอยู่กับที่ซึ่งเป็นอัลกอริธึมการค้นหาสตริงที่เร็วที่สุดได้ยินความคิดเห็นมากมาย แต่ในที่สุดฉันก็ไม่แน่ใจ
ฉันเคยได้ยินบางคนพูดว่าอัลกอริทึมที่เร็วที่สุดคือ Boyer-Moore และบางคนบอกว่า Knuth-Morris-Pratt เร็วกว่าจริง
ผมได้มองขึ้นสำหรับซับซ้อนทั้งในส่วนของพวกเขา O(n+m)
แต่พวกเขาส่วนใหญ่มีลักษณะเดียวกัน ฉันได้พบว่าในกรณีที่เลวร้ายที่สุดกรณี Boyer-Moore มีO(nm)
ความซับซ้อนเมื่อเทียบกับ Knuth-Morris-Pratt ซึ่งมี O (m + 2 * n) โดยที่ n = ความยาวของข้อความและ m = ความยาวของรูปแบบ
เท่าที่ฉันรู้บอยเยอร์ - มัวร์มีเวลาตรงเชิงเส้นที่เลวร้ายที่สุดถ้าฉันจะใช้กฎกาลิล
คำถามของฉันสิ่งที่จริงแล้วคืออัลกอริธึมการค้นหาสตริงที่เร็วที่สุด (คำถามนี้รวมถึงอัลกอริธึมต่อยที่เป็นไปได้ทั้งหมดไม่ใช่แค่ Boyer-Moore และ Knuth-Morris-Pratt)
แก้ไข:เนื่องจากคำตอบนี้
สิ่งที่ฉันกำลังมองหาคือ:
ได้รับข้อความT
และรูปแบบที่P
ผมต้องไปหาที่ปรากฏทั้งหมดของในP
T
นอกจากนี้ความยาวของ P และ T มาจาก[1,2 000 000]
และโปรแกรมต้องทำงานต่ำกว่า 0.15 วินาที
ฉันรู้ว่า KMP และ Rabin-Karp เพียงพอที่จะได้รับคะแนน 100% สำหรับปัญหา แต่ฉันต้องการลองใช้ Boyer-Moore สิ่งใดจะดีที่สุดสำหรับการค้นหารูปแบบนี้