שאלת מבחן במבני נתונים - אוניברסיטת בר-אילן 2016 - חיפוש
היזוחה הקנויות בשדל אלו-יורו { A,B,C,D }. בחתיח את הקנויות הנתונה בעזור Boyer & Moore של .
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| --- | A | A | B | A | A | A | B | A | A | B | A | A |
| | | | | | | | | | | | | |
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| --- | A | A | B | A | A | A | B | A | A | B | A | A |
| | | | | | | | | | | | | |
העתק שאלה
שתף שאלה
סמן כחשוב
סמן כבוצע
אוניברסיטת בר-אילןמועד א2016סמסטר ב
★★★★★
חיפושBoyer-Mooreכלל הסיומת הטובה
כלל הסיומת הטובה () קובע את ההזזה על פי הסיומת של התבנית שכבר נמצאה מתאימה. ישנם שני מקרים: או שנמצא מופע נוסף של הסיומת, או שנמצאת רישא של התבנית שמתאימה לסופה של הסיומת.
השאלה, על אף ניסוחה המשובש, מבקשת לחשב את טבלת ההזזות (כלל הסיומת הטובה) של אלגוריתם Boyer-Moore עבור התבנית הנתונה בטבלה.
התבנית: , ואורכה .
טבלת מגדירה את גודל ההזזה (shift) שיש לבצע כאשר מתגלה אי-התאמה בתו ה- של התבנית (בספירה משמאל, 1-indexed), לאחר שהסיומת נמצאה מתאימה.
חישוב ערכי הטבלה:
* **חישוב עבור :** אי-התאמה בתו האחרון. הסיומת הטובה ריקה. במקרה זה משתמשים בכלל התו הרע (), ולכן אינו מוגדר.
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- נחפש את המופע הימני ביותר של בתת-המחרוזת , כך שהתו שלפניו שונה מ-.
- המופע הימני ביותר של 'A' ב- הוא במיקום . התו שלפניו הוא . התנאי לא מתקיים. נבדוק את המופע הבא: , התו שלפניו . מכיוון ש-, מצאנו התאמה במיקום .
- ההזזה היא המרחק שיביא את למקום בו היה , כלומר . שינוי: המופע הימני ביותר הוא ב-9, לפניו 8 (A). הבא הוא ב-8, לפניו 7 (B). . $P[7]=B
eq A12-8=411 - (8-1) = 4m-k = 12-8=4juui+1s = (i+1) - ju12P[j]12s = 12-j=12-8=4P[9]P[8]='A'P[8]P[7]='B'P[11]='A'j=8P[7] \neq P[11]12-8=4\Delta_2(11) = 4$.
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- נחפש מופע של 'AA' ב- שהתו שלפניו שונה מ-.
- המופעים של 'AA' הם ב-. עבור , התו הקודם הוא , זהה ל-. עבור , התו הקודם הוא , זהה. עבור , אין תו קודם (תנאי מתקיים). לכן נשתמש ב-.
- ההזזה מיישרת את עם מיקום . .
- .
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- אין מופע נוסף של 'BAA' בתבנית. לכן, נחפש את הרישא (prefix) הארוכה ביותר של שהיא גם סיומת (suffix) של .
- הסיומות של הן 'A', 'AA'. הרישאות של הן 'A', 'AA', 'AAB'.... הרישא הארוכה ביותר המשותפת היא 'AA', שאורכה .
- ההזזה היא .
- .
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- אין מופע נוסף. הרישא הארוכה ביותר של שהיא סיומת של היא 'AA' ().
- ההזזה היא .
- .
* **חישוב עבור עד :**
- עבור כל בטווח זה, הסיומת הטובה היא ארוכה מספיק כדי להכיל את 'AABAA' כסיומת (כיוון ש-).
- אין מופעים נוספים של סיומות אלו בתבנית.
- לכן, נשתמש בכלל השני. הרישא הארוכה ביותר של היא 'AABAA' (). זוהי גם הסיומת הארוכה ביותר של כל רלוונטי שמהווה רישא של .
- ההזזה היא .
- לכל $i
∈ [1, 7]$.
**טבלת המסכמת:**
התבנית: , ואורכה .
טבלת מגדירה את גודל ההזזה (shift) שיש לבצע כאשר מתגלה אי-התאמה בתו ה- של התבנית (בספירה משמאל, 1-indexed), לאחר שהסיומת נמצאה מתאימה.
חישוב ערכי הטבלה:
* **חישוב עבור :** אי-התאמה בתו האחרון. הסיומת הטובה ריקה. במקרה זה משתמשים בכלל התו הרע (), ולכן אינו מוגדר.
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- נחפש את המופע הימני ביותר של בתת-המחרוזת , כך שהתו שלפניו שונה מ-.
- המופע הימני ביותר של 'A' ב- הוא במיקום . התו שלפניו הוא . התנאי לא מתקיים. נבדוק את המופע הבא: , התו שלפניו . מכיוון ש-, מצאנו התאמה במיקום .
- ההזזה היא המרחק שיביא את למקום בו היה , כלומר . שינוי: המופע הימני ביותר הוא ב-9, לפניו 8 (A). הבא הוא ב-8, לפניו 7 (B). . $P[7]=B
eq A12-8=411 - (8-1) = 4m-k = 12-8=4juui+1s = (i+1) - ju12P[j]12s = 12-j=12-8=4P[9]P[8]='A'P[8]P[7]='B'P[11]='A'j=8P[7] \neq P[11]12-8=4\Delta_2(11) = 4$.
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- נחפש מופע של 'AA' ב- שהתו שלפניו שונה מ-.
- המופעים של 'AA' הם ב-. עבור , התו הקודם הוא , זהה ל-. עבור , התו הקודם הוא , זהה. עבור , אין תו קודם (תנאי מתקיים). לכן נשתמש ב-.
- ההזזה מיישרת את עם מיקום . .
- .
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- אין מופע נוסף של 'BAA' בתבנית. לכן, נחפש את הרישא (prefix) הארוכה ביותר של שהיא גם סיומת (suffix) של .
- הסיומות של הן 'A', 'AA'. הרישאות של הן 'A', 'AA', 'AAB'.... הרישא הארוכה ביותר המשותפת היא 'AA', שאורכה .
- ההזזה היא .
- .
* **חישוב עבור :**
- אי-התאמה ב-.
- הסיומת הטובה היא .
- אין מופע נוסף. הרישא הארוכה ביותר של שהיא סיומת של היא 'AA' ().
- ההזזה היא .
- .
* **חישוב עבור עד :**
- עבור כל בטווח זה, הסיומת הטובה היא ארוכה מספיק כדי להכיל את 'AABAA' כסיומת (כיוון ש-).
- אין מופעים נוספים של סיומות אלו בתבנית.
- לכן, נשתמש בכלל השני. הרישא הארוכה ביותר של היא 'AABAA' (). זוהי גם הסיומת הארוכה ביותר של כל רלוונטי שמהווה רישא של .
- ההזזה היא .
- לכל $i
∈ [1, 7]$.
**טבלת המסכמת:**
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **** | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 10 | 10 | 10 | 4 | - |