17
לללללSuffix Trees לללל לללללל ללללל לללללhttp:// en.wikipedia.org/wiki/J immy_Hoffa

מבני נתונים

  • 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

Page 1: מבני נתונים

תרגול

Suffix Trees

מבני נתונים

ליאור שפירא

http://en.wikipedia.org/wiki/Jimmy_Hoffa

Page 2: מבני נתונים

Suffix Trees

Page 3: מבני נתונים

1תרגיל בנוsuffix treeלמחרוזת הבאה

Supercalifragilisticexpialidocious

Page 4: מבני נתונים

באמת1תרגיל תארו אלגוריתם הרץ בזמן ליניארי המקבל כקלט מחרוזתS

ומוצא את תת המחרוזת הקצרה ביותר החוזרת פעם אחת .Sבלבד ב-

למשלmississippi

Page 5: מבני נתונים

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

$

$

Page 6: מבני נתונים

1תרגיל

mississippi$i

ssi$ppi

$ssippi$ppi

sp

$pi

$i

sii

$ssippi$ppi

$ssippi$ppi

$

מחרוזת החוזרת פעם אחת בלבד חייבת להסתיים בעלה! כך שיש לה בן עלה )שאינו $( ועומקה מינימאלי. התשובה הינה pנחפש את הצומת

ועוד התו הראשון על הקשת מהצומת לעלהpהמחרוזת מהשורש עד לצומת

mהתשובה היא

$

Page 7: מבני נתונים

2תרגיל נגדיר תת מחרוזתz באורך k להיות חזרה מכסימלית ימנית במחרוזת S

כך ש:j, i≠j ו-iאם קיימים

תאר אלגוריתם ליניארי המקבל כקלט מחרוזתS ומספר k ומחשב את כל . עבור כל חזרה האלגוריתם מדווח kהחזרות המכסימליות הימניות באורך

את האינדקס בו מתחיל המופע הראשון שלה.

kjki

kjjj

kiii

ss

sssz

sssz

11

11

...

...

Page 8: מבני נתונים

2תרגיל בואו נסתכל שוב על העץ שלmississippi:

mississippi$

1

i

4

ssi$ppi

$ssippi$ppi

1

s

1

p

$pi

$i2 3

sii

$ssippi$ppi

$ssippi$ppi

$

$

מחרוזת באורך החוזרת מס' פעמים במקומות שונים, איך תופיע בעץ?

kצומת פנימית בעלת מס' בנים, בעומק

Page 9: מבני נתונים

union findשאלה ב--להלן מבנה נתונים לunion find:

)כל קבוצה תוחזק ברשימה משורשרת דו-כיוונית, כל אלמנט מצביע לצומת מיוחד )שורשהמייצג את הקבוצה

Findמקבלת מצביע ומחזירה מצביע לשורש Unionמוסיפה קב' קטנה לגדולה ומעדכנת את השורש

Page 10: מבני נתונים

union findשאלה ב- כמה זמן תיקח סדרתm פעולות כאשר נתחיל מאוסף

m>n קבוצות בעלות אבר אחד )כל אחת(. הנח nשל תשובה

נתבונן בסדרה כלשהיא בתmפעולות כל פעולתfind לוקחת O(1) ולכן סה"כ O(m) כל פעולתunion פרופורציונאלית למס' האברים שמשנים את

שורש הקב' המכילה אותם

Page 11: מבני נתונים

union findשאלה ב- כמה זמן תיקח סדרתm פעולות כאשר נתחיל מאוסף

m>n קבוצות בעלות אבר אחד )כל אחת(. הנח nשל תשובה

נתבונן בסדרה כלשהיא בתmפעולות כל פעולתfind לוקחת O(1) ולכן סה"כ O(m) כל פעולתunion פרופורציונאלית למס' האברים שמשנים את

שורש הקב' המכילה אותם

Page 12: מבני נתונים

union findשאלה ב- כמה זמן תיקח סדרתm פעולות כאשר נתחיל

קבוצות בעלות אבר אחד )כל אחת(. nמאוסף של m>nהנח

תשובה נתבונן בסדרה כלשהיא בתmפעולות כל פעולתfind לוקחת O(1) ולכן סה"כ O(m) כל פעולתunion פרופורציונאלית למס' האברים שמשנים

את שורש הקב' המכילה אותם לכן אם נחסום לכל אבר את מס' הפעמים שמשתנה

השורש אליו הוא מצביע ונסכם על כל האיברים, נקבל .unionחסם על העלות הכוללת של פעולות ה-

Page 13: מבני נתונים

המשך תשובה נתבונן באברx בכל פעם שמשתנה השורש אליו הוא .

. 2 נמצא מוכפל בלפחות xמצביע, גודל הקבוצה בה מס' הפעמים שמצביע nמאחר וגודל קב' קטן שווה ל

logn יכול להשתנות חסום ע"י nהשורש של נסכם עבור כל האברים ונקבל חסם כלליO(nlogn)

.unionעל העלות הכללית של פעולות ה- סה"כ אם נסכם נקבל עלות כלליתO(nlogn+m)

Page 14: מבני נתונים

חלק שני נסמן קבוצות שגודלןkלכל היותר נייצג כמו קודם קבוצהS-בגודל גדול מ k תיוצג ע"י אוסף של תת קבוצות

(, וקבוצה אחת לכל היותר מלאות בדיוק )נקרא להן kבגודל (.חסרה )kבגודל קטן מ-

.תתי קבוצות אלו מיוצגות כמו שתואר בחלק א' של השאלה שורשי תת הקבוצות מסודרים ברשימה משורשרת דו-כיוונית ומצביעים

לצומת חדש המייצג את הקבוצה כולה..שורש זה מכיל מצביע לרשימת שורשי תתי הקבוצות ואת גודל הקבוצה.הקבוצה החסרה )אם קיימת( תהיה תמיד ראשונה ברשימה

logk n

Page 15: מבני נתונים

איך מוגדרות הפעולות?Findימצא את שורש תת הקב' המאוכסן

בצומת המייצג את האבר ומשם אתשורש הקבוצה הגדולה

Unionיתבצע באופן הבא -שתי קב' קטנות שגודלן יחד פחות מkנאחד כמו בסעיף הקודם -אם גודלן יחד גדול מk .נאחד לקבל קב' אחת מלאה ואחת חסרה

ניצור קב' חדשה שאלה תתי הקב' שלה אם אחת קטנה ואחת גדולה, נאחד את הקטנה עם הקב' החסרה של

הגדולה, ונוסיף את תתי הקב' המתקבלות לקב' הגדולה אם שתי הקב' גדולות נעביר את המלאות מהקב' עם פחות אלמנטים

לקב' עם יותר אלמנטים ונאחד את החסרות

Page 16: מבני נתונים

חלק שני מה זמן הריצה של סדרה בתm פעולות כאשר נתחיל מאוסף

קבוצות, כל אחת מכילה רק אבר יחיד?nשל תשובה

נתבונן בסדרה שרירותית בהmפעולות עלותfind – כמו קודם O(m)-כדי לחסום את עלות הunion נחסום את מס' הפעמים שאלמנט ,

משנה את "מצביע תת קבוצה" שלו, ואת מס' הפעמים שתת קבוצה מלאה משנה את "מצביע הקבוצה" שלה

נתבונן באלמנטx כל פעם שהוא משנה מצביע תת קבוצה, גודל התת ,. מאחר שגודל תת קבוצה אינו 2קבוצה שהוא בתוכה גדל בלפחות פע

יכול לשנות מצביע תת קבוצה חסום x, מס' הפעמים שlognעולה על .loglognע"י

אם נסכום על כל האברים, מספר הפעמים שאלמנט כלשהוא משנה.nloglognאת מצביע התת קבוצה שלו הוא

Page 17: מבני נתונים

המשך תשובה.נותר לחסום את מספר הפעמים שתת קב' מלאה משנה את מצביע הקבוצה שלה בכל פעם שתת קבוצהy משנה את מצביע הקבוצה שלה, גודל הקבוצה בה y

.2נמצאת גדל בלפחות פי מאחר וגודל קב' הוא לכל היותרn מספר הפעמים שתת קבוצה ,y משנה מצביע

.lognהקבוצה שלה חסום ע"י המספר הכולל של תת קבוצות הוא לכל היותרn/logn ולכן סה"כ שינויי מצביעי

קבוצות בתת קבוצות הוא

נסכם סה"כ לכל פעולותunion: O(n+nloglogn)=O(nloglogn) נשים לב שבכל פעולתunion רק תת קבוצה חסרה אחת יכולה לשנות מצביע ,

.O(n)קבוצה ולכן סה"כ עלות זו

:ולכן סה"כ עלות סדרת הפעולותO(nloglogn+m)

loglog

nn n

n