איך אני מחפש מחרוזת במחזורת אחרת בC++ - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

איך אני מחפש מחרוזת במחזורת אחרת בC++


tavor21

Recommended Posts

יש לא מעט אלגוריתמים יעילים לחיפוש מחרוזות, אבל השאלה היא האם צריך את זה יעיל (לדוגמא לצורך פרוייקט ברשתות מחשבים) או שצריך את זה פשוט (לצורך תרגיל בית בסיסי). אם צריך משהו פשוט אז תשתמש ב-strstr או ב-find.

אם צריך ביצועים טובים אז יש כמה אלגוריתמים ידועים לחיפוש תת-מחרוזות:

KMP (Knuth-Moris-Pratt) הוא אלגוריתם פשוט יחסית (קל להבנה ומימוש) אך יעיל, ומבוסס על הכנת טבלה המתארת את המחרוזת שאותה מחפשים. יש לו סיבוכיות של O(n) כאשר N הוא אורך המחרוזת בה מחפשים. סיבוכיות הכנת הטבלה מראש היא O(m) כאשר M הוא אורך תת-המחרוזת שאותה מחפשים.

Boyer-Moore (BM) הוא אלגוריתם אחר המיועד לחיפוש מחרוזות, וגם הוא מבוסס על טבלאות.

Aho-Corasick הוא אלגוריתם מבוסס מכונת מצבים אשר מאפשר לחפש ביעילות מספר תת מחרוזות במחרוזת אחת, וזאת תוך כדי מעבר בודד על הקלט. הוא דורש הרבה , והמימוש שלו מסובך יחסית.

Karp-Rabin מבוסס על השוואת Hash של חלקים מהמחרוזת ל-hash של התת-מחרוזת.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...