2 suffix tree: definition suffix tree t על מחרוזת s שגודלה n, הוא עץ מכוון...
Post on 20-Dec-2015
225 views
TRANSCRIPT
2
Suffix Tree: Definition
Suffix tree T על מחרוזת S שגודלה n עם עץ מכוון , הוא .n עד 1 עלים ממוספרים מ-nבדיוק
לכל צומת פנימית )חוץ מהשורש( יש לפחות שני ילדים
.S כל קשת מייצגת תת מחרוזת לא ריקה של אין שתי קשתות היוצאות מאותה צומת שתת המחרוזת שהם
מייצגות מתחילה באותה אות.
, חיבור כל המחרוזות המיוצגות ע”י iלכל עלה תכונה עיקרית: המתחילה S, מהווה סיפא של iקשת במסלול מהשורש ל-
.iבמקום ה-
3
דוגמא
Suffix tree למלה a w y a w x a w x z 21 43 5 6 7 98 10
z
z
6
9
x z
aw
x
8
yawxawxz
3
w
x
awxz
w a
ya
wx
aw
xz
2
5
ya
wx
aw
xz
1
xz
aw
x
4
7
z z
10
4
דוגמאות לשימושים
n באורך T במחרוזת m באורך Pחיפוש תבנית מציאת תת מחרוזת משותפת מקסימלית לקבוצת מחרוזות
DNAמציאת זיהומים ושיבושים ב –
5
T בטקסט Pדוגמא למציאת תבנית
a w y a w x בתוך awמצא את כל ההופעות, אם ישנן, של a w x z
z
z
6
9x
z
aw
x
8
y
awxawxz
3
w
x
awxz
w a
ya
wx
aw
xz
2
5
ya
wx
aw
xz
1
xz
aw
x
4
7
z z
10
21 43 5 6 7 98 10
6
z
z
6
9
xz
aw
x
8
y
awxawxz
3
w
x
awxz
w a
ya
wx
aw
xz2
5
ya
wx
aw
xz
1
xz
aw
x
4
7
z z
10
דוגמא - המשך
7
דוגמא - המשך
z
z
6
9
xz
aw
x
8
y
awxawxz
3
w
x
awxz
w a
ya
wx
aw
xz
2
5
ya
wx
aw
xz
1
xz
aw
x
4
7
z z
10
8
דוגמא - סוף
z
z
6
9
xz
aw
x
8
y
awxawxz
3
w
x
awxz
w a
ya
wx
aw
xz
2
5
ya
wx
aw
xz
1
xz
aw
x
4
7
z z
10
: אלה הם בדיוק המיקומים של 7,4,1הפלט יהיה P - ב T
9
אינטואיציה לנכונות השיטה
, אז היא חייבת להיות התחלה T מהווה תת מחרוזת של Pאם Tשל סיפא כלשהי של
singing in היא ההתחלה של הסיפא singingלדוגמא: –the rain של המחרוזת I’m singing in the rain
היא בהכרח חייבת להיות T היא תת מחרוזת של Pלכן אם זהה למסלול היוצא מהשורש לאחד העלים, לפי הגדרתו של
suffix Tree יהיו בדיוק מספרי העלים שהמסלול T ב – Pהמיקומים של
מסתיים בהם.Pמהשורש המתחיל ב -
10
בתוך Pחישובי זמן ומקום לפעולת זיהוי T
זמן בניית העץ, ועוד
אותם נשווה עם מסלול היוצא מהשורש p מספר התווים ב – בעץ , ועוד
בתת העץ כדי למצוא את מספרי העלים )ניתן DFS זמן סיור .O(n)להכין מראש עבור כל ההרצה(, בכל מקרה לא יותר מ –
זמן הריצה תלוי במהירות בה ניתן לבנות את העץ
11
אלגוריתם נאיבי לבניית עץ סייפות
באופן כלליבנית קשת אחת בלבד עבור הסיפא )כלומר למחרוזת כולה(•באופן איטרטיבי הכנסת הסיפא לעץ, .•
בפירוט
.i עד 1 מ – Sהביניים המכיל את כל הסייפות של את עץ - נסמן ב
של העץ, אשר 1 מכיל קשת יחידה מהשורש אל העלה מספר 1..Sמתארת את המחרוזת $
העץ נבנה מתוך העץ ע"י מציאת המסלול הארוך ביותר 2.המתחיל מהשורש, אשר התווית שעליו מתארת רישא של
)מציאת מסלול זה נעשה ע”י השוואות תו תו(.
]...1[ nS
]...[ niSni 2
iN
1N
1iN
]$...1[ niS iN
12
אלגוריתם נאיבי - המשך
( אזי נפצל את הקשת u,vאם סיום המסלול הוא בתוך קשת )3.לשתיים ע”י הוספת צומת חדשה מיד לאחר התו האחרון
. שתי הקשתות שהתקבלו ייצגו wהזהה בהשוואות, נסמנה ב את שארית הקשת - והסיפא החדשה.
, נוסיף בן עלה נוסף לצומת wאם סיום המסלול הוא בצומת 4.זו, שהקשת החדשה היוצאת ממנו מתארת את יתרת הסיפא,
שלא נכללה במסלול.
13
דוגמא לאלגוריתם הנאיבי
S=awyawxawxz הדגמת האלגוריתם הנאיבי למחרוזת
11
23
1N 3N
14
דוגמא - המשך
12
3
4N
4
S=awyawxawxz
15
דוגמא - המשך
76
7N
וכו'...
16
מטרה: אלגוריתם בניה לינארי
:E. Ukkonenיתרונות האלגוריתם של קל להבנה ולמימוש–On-Lineאלגוריתם : –
בניית העץ נעשית תו תו לפי סדר ההכנסה, ובכל שלב יש בידנו Suffix Tree .המתאים למחרוזת שהוכנסה עד כה
17
Ukkonenהאלגוריתם של
נסמן ב - את העץ המתקבל מהמחרוזת . אם עץ אינו עומד בהגדרה המלאה של עץ סייפות, נאמר כי הוא
.מרומז
תיאור כללי של האלגוריתם:
, העץ i+1, כך שבפאזה ה – פאזות nהאלגוריתם יחולק ל – נבנה מתוך העץ
, הרחבה אחת לכל הרחבות i+1 נחלקת ל – i+1הפאזה ה – סיפא של
1iT
iT
]1...1[ iS
]...1[ iSiT
iT
18
High-level Ukkonen algorithm
1. Construct tree 2. For i from 1 to n-1 do3. begin {phase i+1}4. for j from 1 to i+15. begin {extention j}6. Find the end of the path from the root labeled 7. in the current tree. If needed, extand that 8. path by adding character ,9. thus assuring that string is in the tree.10. end11.end
1T
]...[ ijS
)1( iS]1...[ ijS
19
הרחבות
]...[נסמן ijS 1...[להיות סיפא של[ iS אזי בהרחבה ה , j כאשר נמצא את סופה של בעץ הנוכחי, נרחיב את כך ,שהסיפא תהיה בתוך העץ.
)1( iS
20
סוגי ההרחבות
הנוכחי המסלול מסתיים בעלה. לעדכון סוג ראשון: בעץ העץ בהרחבה זו יש להוסיף את התו לסוף התווית של
הקשת האחרונה בדרך לעלה זה
)1( iS
אין מסלול המתחיל מסופה של עם התו , סוג שני:אבל קיים לפחות מסלול אחד שמתחיל בסופה של )עם תו
אחר(. במקרה זה חובה ליצור קשת חדשה המובילה לעלה , שהתווית שלה היא התו . אם הסתיים בתוך קשת,
. jיש צורך אף ליצור צומת חדשה . העלה החדש יסומן ב-
)1( iS
)1( iS
קיים מסלול בעץ המתחיל מסופה של וממשיך סוג שלישי :בתו ץ . במקרה זה לא נעשה דבר.
)1( iS
דוגמא לסוגי ההרחבות ונניח שכבר נבנה, S=axabxbתהי
:5T
1 3
4
2
6Tנתבונן בהרחבות שהתבצעו עבור
1 3
4
25
1הרחבה לפי סוג 2הרחבה לפי סוג 3הרחבה לפי סוג
5
22
אם נבצע את חיפוש הסיפא בצורה נאיבית , של פאזה תיקח j ב זמן, אז כל הרחבה
זמן, ובנית העץ תיקח זמן, לכן בנית תקח
)(O
1i)1( jiO 1iT)( 2iO
nT)( 3nO
פתרוןהחיפוש שלב את לבצע כיצד נראה בצורה הרחבה בכל הסיפא של פשוטים, טריקים הוספת עם מהירה, שכל אחד לבדו אינו מספיק, אך יחד -
הם עושים את העבודה .
בעיה
23
Suffix link
תהי מחרוזת כלשהי, כך ש הוא תו בודד, ו היא תת מחרוזת )יתכן ריקה(. לכל צומת פנימית שהתווית מסלול שלה תווית עם נוספת צומת קיימת אם , היא מהשורש מסלול , אזי מצביע מ- ל- נקראת
suffix link
xxv
xv)(vs
)(vs
מקרה מיוחד מ - הולכת לשורש של העץ. suffix linkאם אזי ה - v
24
למה
אם צומת פנימית חדשה עם תווית מסלול נוספת לעץ ה אחד jבהרחבה קורה אזי כלשהי, פאזה של
מהשניים:
של 1 פנימית צומת בתוך כבר מסתיימת המסלול תווית .העץ, או
של -j+1. תיווצר צומת פנימית בסוף המסלול בהרחבה ה 2אותה הפאזה.
vx1i
בין הצמתים כאשר Suffix linkחיבור נוסיף לאלגוריתם הבנייההן נוצרות
25
אפשרי בעץsuffix linkדוגמא ל
S=cacao
שתוויתה הפנימית החמישית, caהצומת בפאזה נוצרת מספר מספר 3בהרחבה בהרחבה ניצור 4. פאזה, אותה של
.aאת הצומת שתוויתה של הפאזה החמישית, לצומת החדשה 3+1בסיום ההרחבה ה a לצומת שתוויתהsuffix - link תהיה caשנוצרה עם התווית
26
מסקנת ביניים
של באלגוריתם Ukkonen ,חדשה ל פנימית צומת כל יהיה הבאה suffix linkשנוצרת ההרחבה בסוף ממנה
יש תווית מסלול v עבור כל עץ , אם לצומת פנימית בתור. אזי קיימת צומת ב- עם תווית מסלול
iTx)(vs
iT
27
להאצת הקצב Suffix linkשימוש ב –
נתאר תחילה את שתי ההרחבות הראשונות בפאזה ה - :
. סוף המחרוזת המלאה ימצא תמיד בעלה של , מכיוון 1שזוהי המחרוזת הארוכה ביותר המיוצגת בעץ . לכן נחזיק מצביע
של ההרחבה. 1לעלה קבוע זה, ותמיד נבצע בו את סוג
. תהי תווית של הקשת האחרונה לעלה הנ”ל )נסמנה ב ( 2 נרצה למצוא 2ונניח כי . כעת בהרחבה מספר
, v לצומת 1את סופה של . כדי לעשות זאת, נלך מעלה מס’ היוצאת ממנו ל , ונמשיך משם למטה suffix linkעקוב אחר ה נ
דרך המסלול . סוף המסלול הזה הוא סופה של ולכן במקום זה צריך לבצע את ההרחבה, לפי החוקים.
1i
]..1[ iSiT
)1,(vxiS ]...1[
)(vs
28
ההרחבות הבאות
כדי להרחיב את המחרוזת ל - נבצע רעיון דומה:
נתחיל בסוף המחרוזת של העץ הנוכחי, נלך לכל היותר . suffix linkצומת אחת למעלה בעץ - שהיא השורש, או שיש ממנה איננה vאם נסמן ב את התווית של הקשת עליה הלכנו, ואם
היוצא ממנה ל , ונמשיך suffix linkהשורש, נעקוב אחר ה לעקוב אחר המסלול המסומן ב עד סופו, ושם נבצע את
ההרחבה - לפי הסוג המתאים.
]...[ ijS]1...[ ijS
]...1[ ijS
)(vs
, suffix link אם סופה של הוא בצומת שיש ממנה הערה:
לאחר יתכן כזה )מקרה אחורה אחת צומת נלך ולא בה נשתמש נוצרה, 3הרחבה מסוג ואם סופה הוא בצומת שרק עכשיו למשל(,
ממנו יש אז השורש, איננו אביה אם מקרה suffix linkאזי בכל .ההליכה אחורה היא לכל היותר קשת אחת.
]...1[ ijS
29
Single extension algorithm
Begin
1. Find the first node v at or above the end of that either has a suffix link from it or is the root. Let denote the string between v and the end of .
2. if v is not the root, traverse the suffix link from v to s(v) and then walk down from s(v) following the path for string . If v is the root, then follow the path for from the root - as in the naive algorithm
3. Using the extension rules, ensure that the string is in the tree.
4. If a new internal node w was created in extension j-1, then create the suffix link (w,s(w)) from w to s(w).
]...1[ ijS
]...1[ ijS
]...[ ijS
)1(]...[ iSijS
30
j>1 עבור jדוגמא: הרחבה
J-1
vS(v)
31
Skip/count
את מספר התווים על d את האורך של , נסמן ב gנסמן ב אזי נדלג ישר לצומת d<gהקשת היוצאת מ בכיוון . אם
, כך נוכל למצוא בקלות את h=d+1, ו g=g-dהבאה . נסמן המשך המסלול שהוביל לאורך . נמשיך כך עד אשר נקבל
של הקשת אליה g , וכל שנותר הוא למצוא את התו מספר הגענו.
)(vs
dg
ע"י שימוש בשיטה זו, המעקב אחרי יהיה תלוי במספר הצמתים ולא במספר התווים של
32
, כל פאזה באלגוריתם לוקחת זמןskip/countע”י שיטת
Skip/countיתרון שיטת
למה כלשהי אחריה עקבנו בזמן suffix linkתהי
האלגוריתם, אזי ברגע המעקב, עומקה של הוא לכל היותר באחד יותר מעומקה של
))(,( vsv
v)(vs
טענה)(nO
מסקנה)(האלגוריתם יכול להתבצע ב זמן. 2nO
הערהעל מנת להוריד את זמן האלגוריתם ל - , יש להוריד גם
את המקום בזכרון בו אנו משתמשים.)(nO
33
אבחנות
של ההרחבה מתבצע 3 בכל פאזה, אם סוג אבחנה ראשונה:•ה שנותרו jבהרחבה ההרחבות יתר בכל יתבצע הוא אזי ,
באותה פאזה ..עלה נשאר עלה אבחנה שניה:•
כלומר, אם בשלב כלשהו באלגוריתם נוצר עלה חדש, וניתן לו , אזי עלה זה ישאר עלה עד סוף תהליך בנית העץ. jהמספור
כל משמעות הדבר היא, שכל ההרחבות שיעשו בעלה זה ב תמיד ישתמשו בסוג ראשון של הרחבה.הפאזות הבאות
34
שיפור האלגוריתם בעקבות האבחנות
של ההרחבה3הפסק כל פאזה ברגע שהופעל לראשונה סוג •
בכל עלה קיים, 1במקום לבצע במפורש סוג הרחבה מספר הרחב את הקשת לעלה זה ע"י סימון סוף הקשת באינדקס
, אותו נעדכן בסוף כל פאזה .eכללי
" כאינדקס סוף הקשת האחרונה לעלה, יעשה בזמן eסימון "היווצרות העלה.
35
אבחנה לסיכום
. אם 2 או 1כל פאזה מתחילה בסדרה של הרחבות מסוג • את ההרחבה האחרונה בסדרה זו, אזי מכיוון שכל jנסמן ב -
גדל )או j יוצרת עלה חדש, נקבל שערכו של 2הפעלת סוג נשאר במקומו(. . נובע מכך, שניתן לדלג על כל
, ואת 1 , כי בכולן תתבצע הרחבה מסוג j ועד 1ההרחבות מ-.j+1ההרחבות המפורשות להתחיל בהרחבה מספר
36
Single phase algorithm
1. Begin2. Explicitly compute successive extensions starting
at pointer “j” until reaching the first extension where rule 3 applies or until all extensions are done in this phase. – When do rule 2, put j to point on the new leaf
3. Increment index “e” by 1.
4. end
1'1 jji
37
זמן הריצה של האלגוריתם המשופר
O(n) עובד בזמן ומקום Ukkonen: האלגוריתם של טענה
( של כל 3 וסוג 1כל ההרחבות הלא מפורשות )סוג הוכחה: לאורך O(n) זמן, ולכן לוקחות O(1)פאזה לוקחות
בכל פאזה 1האלגוריתם כולו. כמו כן מספר ההרחבות מסוג את האינדקס של ההרחבה המפורשת jאינו יורד. אם נסמן ב
הוא אינדקס שאינו יורד, אבל jשמתבצעת כעת, הראינו ש j פאזות, ו nנשאר זהה בין כל שתי פאזות עוקבות. מכיוון שיש
, נקבל שהאלגוריתם מבצע לאורך כל הדרך לכל nחסום ע”י הרחבות מפורשות. את זמן ביצוען של אלה חישבנו 2nהיותר
קודם: זמן קבוע, ועוד הזמן של חיפוש המסלול, שגם אותו לאורך כל האלגוריתם.O(n)חסמנו ב -
38
הורדת המקום בזכרון
1,3 2,3
4,6 10,1210,12
4,6
S=abcdefabcuvw1 2 3 4 5 6 7 8 9 10 11 12