Upload
clive
View
58
Download
9
Embed Size (px)
DESCRIPTION
http://en.wikipedia.org/wiki/Jimmy_Hoffa. מבני נתונים. תרגול Suffix Trees. ליאור שפירא. Suffix Trees. תרגיל 1. בנו suffix tree למחרוזת הבאה. Supercalifragilisticexpialidocious. תרגיל 1 באמת. - PowerPoint PPT Presentation
Citation preview
תרגול
Suffix Trees
מבני נתונים
ליאור שפירא
http://en.wikipedia.org/wiki/Jimmy_Hoffa
Suffix Trees
1תרגיל בנוsuffix treeלמחרוזת הבאה
Supercalifragilisticexpialidocious
באמת1תרגיל תארו אלגוריתם הרץ בזמן ליניארי המקבל כקלט מחרוזתS
ומוצא את תת המחרוזת הקצרה ביותר החוזרת פעם אחת .Sבלבד ב-
למשלmississippi
1תרגיל בואו נבנה את העץ קודם
i,pi,ppi,ippi,sippi,ssippi,issippi,sissippi,ssissippi,ississippi,mississippi
And sorted:i,ippi,issippi,ississippi,mississippi,pi,ppi,sippi,sissippi,ssippi,ssissippi
mississippi$i
ssi$ppi
$ssippi$ppi
sp
$pi
$i
sii
$ssippi$ppi
$ssippi$ppi
$
$
1תרגיל
mississippi$i
ssi$ppi
$ssippi$ppi
sp
$pi
$i
sii
$ssippi$ppi
$ssippi$ppi
$
מחרוזת החוזרת פעם אחת בלבד חייבת להסתיים בעלה! כך שיש לה בן עלה )שאינו $( ועומקה מינימאלי. התשובה הינה pנחפש את הצומת
ועוד התו הראשון על הקשת מהצומת לעלהpהמחרוזת מהשורש עד לצומת
mהתשובה היא
$
2תרגיל נגדיר תת מחרוזתz באורך k להיות חזרה מכסימלית ימנית במחרוזת S
כך ש:j, i≠j ו-iאם קיימים
תאר אלגוריתם ליניארי המקבל כקלט מחרוזתS ומספר k ומחשב את כל . עבור כל חזרה האלגוריתם מדווח kהחזרות המכסימליות הימניות באורך
את האינדקס בו מתחיל המופע הראשון שלה.
kjki
kjjj
kiii
ss
sssz
sssz
11
11
...
...
2תרגיל בואו נסתכל שוב על העץ שלmississippi:
mississippi$
1
i
4
ssi$ppi
$ssippi$ppi
1
s
1
p
$pi
$i2 3
sii
$ssippi$ppi
$ssippi$ppi
$
$
מחרוזת באורך החוזרת מס' פעמים במקומות שונים, איך תופיע בעץ?
kצומת פנימית בעלת מס' בנים, בעומק
union findשאלה ב--להלן מבנה נתונים לunion find:
)כל קבוצה תוחזק ברשימה משורשרת דו-כיוונית, כל אלמנט מצביע לצומת מיוחד )שורשהמייצג את הקבוצה
Findמקבלת מצביע ומחזירה מצביע לשורש Unionמוסיפה קב' קטנה לגדולה ומעדכנת את השורש
union findשאלה ב- כמה זמן תיקח סדרתm פעולות כאשר נתחיל מאוסף
m>n קבוצות בעלות אבר אחד )כל אחת(. הנח nשל תשובה
נתבונן בסדרה כלשהיא בתmפעולות כל פעולתfind לוקחת O(1) ולכן סה"כ O(m) כל פעולתunion פרופורציונאלית למס' האברים שמשנים את
שורש הקב' המכילה אותם
union findשאלה ב- כמה זמן תיקח סדרתm פעולות כאשר נתחיל מאוסף
m>n קבוצות בעלות אבר אחד )כל אחת(. הנח nשל תשובה
נתבונן בסדרה כלשהיא בתmפעולות כל פעולתfind לוקחת O(1) ולכן סה"כ O(m) כל פעולתunion פרופורציונאלית למס' האברים שמשנים את
שורש הקב' המכילה אותם
union findשאלה ב- כמה זמן תיקח סדרתm פעולות כאשר נתחיל
קבוצות בעלות אבר אחד )כל אחת(. nמאוסף של m>nהנח
תשובה נתבונן בסדרה כלשהיא בתmפעולות כל פעולתfind לוקחת O(1) ולכן סה"כ O(m) כל פעולתunion פרופורציונאלית למס' האברים שמשנים
את שורש הקב' המכילה אותם לכן אם נחסום לכל אבר את מס' הפעמים שמשתנה
השורש אליו הוא מצביע ונסכם על כל האיברים, נקבל .unionחסם על העלות הכוללת של פעולות ה-
המשך תשובה נתבונן באברx בכל פעם שמשתנה השורש אליו הוא .
. 2 נמצא מוכפל בלפחות xמצביע, גודל הקבוצה בה מס' הפעמים שמצביע nמאחר וגודל קב' קטן שווה ל
logn יכול להשתנות חסום ע"י nהשורש של נסכם עבור כל האברים ונקבל חסם כלליO(nlogn)
.unionעל העלות הכללית של פעולות ה- סה"כ אם נסכם נקבל עלות כלליתO(nlogn+m)
חלק שני נסמן קבוצות שגודלןkלכל היותר נייצג כמו קודם קבוצהS-בגודל גדול מ k תיוצג ע"י אוסף של תת קבוצות
(, וקבוצה אחת לכל היותר מלאות בדיוק )נקרא להן kבגודל (.חסרה )kבגודל קטן מ-
.תתי קבוצות אלו מיוצגות כמו שתואר בחלק א' של השאלה שורשי תת הקבוצות מסודרים ברשימה משורשרת דו-כיוונית ומצביעים
לצומת חדש המייצג את הקבוצה כולה..שורש זה מכיל מצביע לרשימת שורשי תתי הקבוצות ואת גודל הקבוצה.הקבוצה החסרה )אם קיימת( תהיה תמיד ראשונה ברשימה
logk n
איך מוגדרות הפעולות?Findימצא את שורש תת הקב' המאוכסן
בצומת המייצג את האבר ומשם אתשורש הקבוצה הגדולה
Unionיתבצע באופן הבא -שתי קב' קטנות שגודלן יחד פחות מkנאחד כמו בסעיף הקודם -אם גודלן יחד גדול מk .נאחד לקבל קב' אחת מלאה ואחת חסרה
ניצור קב' חדשה שאלה תתי הקב' שלה אם אחת קטנה ואחת גדולה, נאחד את הקטנה עם הקב' החסרה של
הגדולה, ונוסיף את תתי הקב' המתקבלות לקב' הגדולה אם שתי הקב' גדולות נעביר את המלאות מהקב' עם פחות אלמנטים
לקב' עם יותר אלמנטים ונאחד את החסרות
חלק שני מה זמן הריצה של סדרה בתm פעולות כאשר נתחיל מאוסף
קבוצות, כל אחת מכילה רק אבר יחיד?nשל תשובה
נתבונן בסדרה שרירותית בהmפעולות עלותfind – כמו קודם O(m)-כדי לחסום את עלות הunion נחסום את מס' הפעמים שאלמנט ,
משנה את "מצביע תת קבוצה" שלו, ואת מס' הפעמים שתת קבוצה מלאה משנה את "מצביע הקבוצה" שלה
נתבונן באלמנטx כל פעם שהוא משנה מצביע תת קבוצה, גודל התת ,. מאחר שגודל תת קבוצה אינו 2קבוצה שהוא בתוכה גדל בלפחות פע
יכול לשנות מצביע תת קבוצה חסום x, מס' הפעמים שlognעולה על .loglognע"י
אם נסכום על כל האברים, מספר הפעמים שאלמנט כלשהוא משנה.nloglognאת מצביע התת קבוצה שלו הוא
המשך תשובה.נותר לחסום את מספר הפעמים שתת קב' מלאה משנה את מצביע הקבוצה שלה בכל פעם שתת קבוצהy משנה את מצביע הקבוצה שלה, גודל הקבוצה בה y
.2נמצאת גדל בלפחות פי מאחר וגודל קב' הוא לכל היותרn מספר הפעמים שתת קבוצה ,y משנה מצביע
.lognהקבוצה שלה חסום ע"י המספר הכולל של תת קבוצות הוא לכל היותרn/logn ולכן סה"כ שינויי מצביעי
קבוצות בתת קבוצות הוא
נסכם סה"כ לכל פעולותunion: O(n+nloglogn)=O(nloglogn) נשים לב שבכל פעולתunion רק תת קבוצה חסרה אחת יכולה לשנות מצביע ,
.O(n)קבוצה ולכן סה"כ עלות זו
:ולכן סה"כ עלות סדרת הפעולותO(nloglogn+m)
loglog
nn n
n