1 / 22

Suffix Arrays

Suffix Arrays. - המטרה : להחליף עץ סיפות המסורבל והכבד. - תזכורת : עץ סיפות הוא עץ המכיל את כל הסיפות של מחרוזת S . - זמן בנייה O(nlog|  |) , זמן לשאילתא O(mlog|  |) . - נרצה חלופה הולמת הן מבחינת זמן והן מבחינת מקום .

emmet
Download Presentation

Suffix Arrays

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Suffix Arrays - המטרה: להחליף עץ סיפות המסורבל והכבד. - תזכורת: עץ סיפות הוא עץ המכיל את כל הסיפות של מחרוזת S. - זמן בנייה O(nlog||), זמן לשאילתא O(mlog||). - נרצה חלופה הולמת הן מבחינת זמן והן מבחינת מקום. - הגדרה: מערך סיפות הוא מיון של כל הסיפות של מחרוזת S.

  2. i ippi issippi ississippi mississippi pi ppi sippi sissippi ssippi ssissippi 10 7 4 1 0 9 8 6 3 5 2 דוגמא 0 1 2 3 4 5 6 7 8 9 10 S = m i s s i s s i p p i נסדר את הסיפות לפי סדר לקסיקוגרפי. אינדקסים של הסיפות בסדר זה נותנים מערך הסיפות: m i s s i s s i p p i SA = 10 7 4 1 0 9 8 6 3 5 2 אם נרצה לתת אינדקס לכל סיפא, נקבל Inversed Suffix Array. m i s s i s s i p p i ISA = 431082 9 7 16 5 0

  3. בניית מערך סיפות - הנחה חשובה: טווח האותיות (המספרים) הוא O(n). - הנחה זאת סבירה כיוון שהקלט הוא מחרוזת של אותיות. הרעיון: - בפעם הראשון נמיין לפי האות הראשונה של הסיפא. - נמספר את המיון בסדר עולה, כך שאותיות זהות יקבלו מספר זהה.

  4. דוגמא 0 1 2 3 4 5 6 7 8 9 10 S = m i s s i s s i p p i Sort = 2 1 4 4 1 4 4 1 3 3 1

  5. בניית מערך סיפות - הנחה חשובה: טווח האותיות (המספרים) הוא O(n). - הנחה זאת סבירה כיוון שהקלט הוא מחרוזת של אותיות. הרעיון: - בפעם הראשון נמיין לפי האות הראשונה של הסיפא. - נמספר את המיון בסדר עולה, כך שאותיות זהות יקבלו מספר זהה. - לאחר מכן בכל סיבוב נמיין לפי 2 ספרות שכנות. - בסוף כל איטרציה ניתן מספר חדש לכל זוג אותיות.

  6. דוגמא 0 1 2 3 4 5 6 7 8 9 10 S = m i s s i s s i p p i Sort = 2 1 4 4 1 4 4 1 3 3 1 Pairs = (21) (14) (44) (41) (14) (44) (41) (13) (33) (31) (10) Sort = 4 3 8 7 3 8 7 2 6 5 1

  7. בניית מערך סיפות - הנחה חשובה: טווח האותיות (המספרים) הוא O(n). - הנחה זאת סבירה כיוון שהקלט הוא מחרוזת של אותיות. הרעיון: - בפעם הראשון נמיין לפי האות הראשונה של הסיפא. - נמספר את המיון בסדר עולה, כך שאותיות זהות יקבלו מספר זהה. - לאחר מכן בכל סיבוב נמיין לפי 2 ספרות שכנות. - בסוף כל איטרציה ניתן מספר חדש לכל זוג אותיות. - נשים לב: מכיוון שבכל סיבוב ניתן שמות לפי סדר ממוין, ערכים זהים יקבלו מספר זהה, המספרים החדשים יתנו יחס מיון נכון.

  8. דוגמא 0 1 2 3 4 5 6 7 8 9 10 S = m i s s i s s i p p i Sort = 2 1 4 4 1 4 4 1 3 3 1 Pairs = (21) (14) (44) (41) (14) (44) (41) (13) (33) (31) (10) Sort = 4 3 8 7 3 8 7 2 6 5 1 Pairs = (43) (38) (87) (73) (38) (87) (72) (26) (65) (51) (10) Sort = 4 3 9 8 3 9 7 2 6 5 1 Pairs = (43) (39) (98) (83) (39) (97) (72) (26) (65) (51) (10) Sort = 4 3 10 8 3 9 7 2 6 5 1 Pairs = (43) (310) (108) (83) (39) (97) (72) (26) (65) (51) (10) Sort = 5 4 11 9 3 10 8 2 7 6 1 - הערה: כאן בונים Inversed Suffix Array. - אחרי זה נבנה Suffix Array בזמן לינארי.

  9. ניתוח - מיון מספרים בטווח של O(n) לינארי (Bucket sort). - מיון בטווח של O(n2) (אחרי שלב הזוגות) לינארי (Radix). - כל פעם מגדילים את אורך הסיפות הממוינות פי 2. - למעשה, בסיבוב i, משווים סיפות באורך2i. - לכן, תוך logn צעדים נשווה סיפות באורך מלא. - כיוון שהשוואה היא לינארית, סיבוכיות האלגוריתם O(nlogn). - האלגוריתם נקרא KMR (Karp-Miller-Rosenberg, 74).

  10. חיפוש בעזרת מערך סיפות - נניח כי נתון טקסט T באורך n, שעבורו יצרנו מערך סיפות. - נניח כי נתונה תבנית P באורך m. - כיצד נשתמש ב- SA ל-התאמת מחרוזות? - רעיון: נבצע חיפוש בינארי על הסיפות! - תוך logn סיבובים נמצא את המקום. - הבעיה: במקרה הגרוע נבצע O(m) השוואות בכל סיבוב. - לכן, סיבוכיות החיפוש בדרך זאת היא O(mlogn).

  11. מצב ביניים - בניית מערך סיפות בסיבוכיות זמן O(nlogn). - חיפוש תבנית בעזרת מערך סיפות בסיבוכיות זמן O(mlogn). - נרצה לשפר את שני התהליכים, המטרה - לזמן לינארי. נתחיל בבנייה – נרצה לשנות מעט את האלגוריתם KMR. - רעיון: מה היה קורה אילו באלגוריתם המקורי היינו מבצעים השוואות לפי שלשות של מספרים ולא לפי זוגות? - קבוע של Radix sortגדל וכך גם בסיס ה-log. - סדר גודל של הסיבוכיות נשאר זהה.

  12. דוגמא 0 1 2 3 4 5 6 7 8 9 10 S = m i s s i s s i p p i Sort = 2 1 4 4 1 4 4 1 3 3 1 Trios = 214144 441 414 144 441 413 133 331 310 100 Sort = 4 3 98 39 7 2 6 5 1 Trios = 439 398 983 839 397972 726 265 651 510 100 Sort = 5 4 11 9 3 10 8 2 7 6 1 - יתר על כן, נוכל במקביל להריץ את האלגוריתם – לזוגות ושלשות. - זמן הבנייה ישאר O(nlogn).

  13. שיפור - נבצע אלגוריתם של 3 שלבים: 0. נבצע השוואות לפי שלושותוזוגות של אותיות. 1. נמיין רקורסיבית2/3 מהערכים. 2. נשלים את 1/3 הערכים בעזרת התוצאה הקודמת. 3. נמזג את 2 התוצאות הממוינות. שלב 1: נמיין בצורה רקורסיבית סיפות Si כך ש imod3  0. נשים לב: בחירת 2/3 האיברים אינה עיקרונית, במקרה שלנו בחרנו את הסיפות בעלות imod3=1 ו-imod3=2.

  14. השלב הראשון 0 1 2 3 4 5 6 7 8 9 10 S m i s s i s s i p p i Sort 2 1 4 4 1 4 4 1 3 3 1 Trios(2/3) X 144 441 X 144 441 X 133 331 X 100Sort(2/3) X 4 7 X 3 6 X 2 5 X 1 - כתוצאה קיבלנו 2/3 ערכים ממוינים. - המיון יתבצע בצורה רקורסיבית, כאשר רק 2/3 ערכים נשלחים לרקורסיה.

  15. השלב השני 0 1 2 3 4 5 6 7 8 9 10 S m i s s i s s i p p i Sort(2/3) X 4 7 X 3 6 X 2 5 X 1 Pairs(1/3) m4 X X s3 X X s2 X X p1 X Sort(1/3) 1 X X 4 X X 3 X X 2 X - כעת נרצה למיין את 1/3 הערכים הנותרים. - כל ערך ניתן להפוך לזוג: האות + המספר הסידורי של המיון. - כיוון שערכי המיון נכונים, כתוצאה נקבל מיון נכון של השליש כולו. - גם את הזוגות האלה נמיין בעזרת Radix Sort בזמן O(n).

  16. השלב השלישי 0 1 2 3 4 5 6 7 8 9 10 S m i s s i s s i p p i Sort(2/3) X 4 7 X 3 6 X 2 5 X 1 Pairs(2/3) X i7 ss3 X i6 ss2 X i5 ppi X i0 Sort(1/3) 1 X X 4 X X 3 X X 2 X Pairs(1/3) m4 X X s3 X X s2 X X p1 X Pairs(1/3) mi7 XX si6 X X si5 X X pi0 X - נרצה למזג את התוצאות, כאשר כל חלק ממוין בפני עצמו. - כיצד להשוות תוצאות? - אם משווים סיפות של imod0 עם imod1, ניקח אות ומספר של המיון. - אחרת (imod0 עם imod2) – ניקח שתי אותיות ומספר של המיון. - כתוצאה נקבל דרך נכונה וחח"עלהשוואת ערכים לצורכי המיזוג.

  17. ניתוח - הקריאה הרקורסיבית היא T(k)=T(2k/3). - בכל סיבוב מבצעים: א. השלמת השליש בזמן O(k). ב. מיזוג התוצאות – O(k). סך הכל, נוסחת הנסיגה היא: T(n) = T(2n/3) + O(n) = O(n). הצלחנו לבנות מערך סיפות בסיבוכיות שרצינו.

  18. Online Matching - כעת נרצה לשפר גם את החיפוש בעזרת מערך סיפות. - נניח כי נתון טקסט T באורך n, ותבנית P באורך m. - ישנן 2שאילתות שנרצה לעבד: 1. כמה מופעים של P נמצאים ב-T. 2. באילו מיקומים נמצאים המופעים. בדרך הנאיבית קיבלנו O(mlogn) ו-O(mlogn+occ)

  19. LCP הגדרה: עבור מחרוזת S נסמן את הרישא המשותפת המקסימלית של שתי תת-מחרוזות של S: sjsj+1…sn-1 ו-sisi+1…sn-1כ-lcp(i,j). הגדרה: lcp(k)=lcp(SA[k],SA[k+1]), כאשר SA הוא מערך סיפות של S. טענה: lcp(SA[i],SA[j])=mini · k · j (lcp(k)). הוכחה:נסמןi’=SA[i], j’=SA[j]. נסמן: lcp(i’,j’) = si’…si’+l = sj’…sj’+l.

  20. i ippi issippi ississippi mississippi pi ppi sippi sissippi ssippi ssissippi 10 7 4 1 0 9 8 6 3 5 2 דוגמא 0 1 2 3 4 5 6 7 8 9 10 S = m i s s i s s i p p i נסדר את הסיפות לפי סדר לקסיקוגרפי. אינדקסים של הסיפות בסדר זה נותנים מערך הסיפות: m i s s i s s i p p i SA = 10 7 4 1 0 9 8 6 3 5 2 אם נרצה לתת אינדקס לכל סיפא, נקבל Inversed Suffix Array. m i s s i s s i p p i ISA = 431082 9 7 16 5 0

  21. הוכחה נשים לב: לכל h’=SA[h], i·h·j, מתקיים: sh’ …sh’+l = lcp(i’,j’) = si’ …si’+l – כיוון שמערך סיפות ממוין. לכן, mini·k<jlcp(k) ¸ |lcp(SA[i],SA[j])|=l+1. מצד שני, si’+l+1 sj’+l+1, בגלל המקסימליות. לכן קיים k’0, האינדקס המינימלי, i · k’0· j, כך שמתקיים: si’+l+1 sk0’+l+1. עבור k0 = k’0 – 1, lcp(k0) = l+1.

  22. Range Minimum Query נרצה להשתמש בבעיה ידועה RMQ והיא: בהינתן מערך A של n מספרים טבעים. השאילתות: בהינתן זוג [i,j] מצא mini· k · j A[k]. ידוע פתרון עם הכנהO(n) וסיבוכיות השאילתא O(1). מצד שני גם בניית מערך סיפות היא O(n). כיצד ניתן להיעזר בזה לפתרון בעיית Online Matching? נבצע חיפוש בינארי תוך כדי קריאות לפונקציית lcp. תוך כדי קראיות, lcp מבטיח שלא נבצע עבודה כפולה. סיבוכיות לספירת מופעים היא O(m+logn).

More Related