480 likes | 704 Views
מיון מחרוזות. קטן. קלט : מחרוזות מעל אלף-בית. פלט : המחרוזות ממוינות בסדר עולה לקסיקוגרפי. 1. f. s. f. v. v. c. s. s. d. 3. 3. h. j. g. j. a. n. t. 2. 3. n. זמן גישה לתו. חסם תחתון. קריאת מחרוזת i. קריאת n מחרוזת. אם. מיון מחרוזות באורך. מיון מחרוזות באורך.
E N D
מיון מחרוזות קטן קלט: מחרוזות מעל אלף-בית פלט: המחרוזות ממוינות בסדר עולה לקסיקוגרפי
1 f s f v v c s s d 3 3 h j g j a n t 2 3 n זמן גישה לתו
חסם תחתון קריאת מחרוזת i קריאת nמחרוזת אם
מיון מחרוזות באורך מיון מחרוזות באורך
פתרון 1 QuickSort סיבוכיות השוואות כל השוואה סבוכיות מקום נוסף ? האם אפשר למיין בזמן
פתרון 2 RadixSort סיבוכיות מיונים כל מיון אם הוכח! סבוכיות מקום נוסף
מיון מחרוזות באורך מיון מחרוזות באורך
Trie פתרון 3 abb b a abcc b bbc b bb $ c c b abc $ $ c $ $
abb abcc b a bbc b b bb $ c abc c b $ $ c $ סיור preorder בעץ שורש – בן שמאלי ראשון - ימני $ abb abc abcc bb bbc
פתרון 3למיון למחרוזות באורך 1- לכל i הכנס si ל Trie b a 2- סיור preorder בעץ b b כל הכנסה $ c c b $ עוברים על כל קשת פעמיים $ c $ $
פתרון 3למיון מחרוזות באורך 1- לכל i הכנס si ל Trie b a 2- סיור preorder בעץ b b כל הכנסה $ c c b $ עוברים על כל קשת פעמיים $ c $ $
סבוכיות מקום נוסף b מספר הצמתים ב-Trie a יכול להגיע עד b b $ c c b למשל לסדרה $ aaaaaaaaaaaaa baaaaaaaaaaaa caaaaaaaaaaaa daaaaaaaaaaaa … $ c $ $
… d c b a a a a a aaaaaaaaaaaaa baaaaaaaaaaaa caaaaaaaaaaaa daaaaaaaaaaaa … a a a a 0000000000000 1000000000000 0100000000000 1100000000000 0010000000000 … a a a a a a a a
מיון מחרוזות באורך מיון מחרוזות באורך
דחיסתTrie b a bb ab b b $ c c c$ b $ b$ $ c $ c$ $
מספר העלים n לכל צמת פנימית לפחות 2 בנים bb ab מספר הצמתים הפנימיים < n $ c c$ b$ bb מספר הצמתים >2n $ bbc c$ abb abc במקום l nב- Trie לא דחוס abcc
משפט אם בעץ לכל צמת פנימית יש לפחות 2 בנים אזי מספר העלים > מספר הצמתים הפנמיים הוכחה באינדוקציה יהי T עץ עם n הצמתים פנמיים ו- l עלים n1<l1 n2<l2 n=n1+n2+…+1<l1+l2+…=l n1 l1 n2 l2 מספר הצמתים הפנמיים מספר העלים
מיון מחרוזות באורך מיון מחרוזות באורך
מבנה נתונים במחרוזות Insert Delete Search Hash פתרון 1 n ידוע וזמן ממוצעO(l) האם קיים פתרון עם זמן מדויקO(l)?
Trie פתרון 2 a Insert(ac) bb ab b c$ ac $ c c$ b$ bb $ bbc c$ abb abc abcc
Trie פתרון 2 Insert bb ab Delete Search $ c c$ b$ bb $ bbc c$ abb abc abcc
חיפוש מחרוזת בטקסט קלט: טכסט s מעל אלף-בית קטן וקבוצה של מחרוזות פלט: מוֹפָע של כל מחרוזת בטכסט חיפוש מחרוזת אחת למשל:
חיפוש מחרוזת בטקסט קלט: טכסט s מעל אלף-בית קטן וקבוצה של מחרוזות פלט: מוֹפָע של כל מחרוזת בטכסט חיפוש מחרוזת אחת חיפוש כל המחרוזות חסם תחתון
חסם תחתון האם אפשר לפתור את הבעיה ב- ? כן!!!!!!!
עץ סִיּוֹמוֹתSuffix tree s = xabxa$ $ 1 a$ 2 xa bxa$ a $ 3 xa$ $ bxa$ bxa$ bxa$ $ abxa$ |s| xabxa$ משפט קיים אלגוריתם שבונה עץ סִיּוֹמוֹת בזמן O(|s|2) |s|+1 (|s|+1)(|s|+2)/2
עץ סִיּוֹמוֹתSuffix tree רק לבנות את העץ צריכים O(|s|2) s = xabxa$ $ a$ xa bxa$ a $ xa$ $ bxa$ bxa$ bxa$ $ abxa$ xabxa$ משפט קיים אלגוריתם שבונה עץ סִיּוֹמוֹת בזמן O(|s|2)
דחיסת עץ סִיּוֹמוֹת s = xabxa$ 123456 (4,5) xa bxa$ (3,6) (5,5) a (6,6) $ (3,6) (6,6) $ bxa$ (6,6) (3,6) bxa$ $ משפט ללא הוכחה קיים אלגוריתם שבונה עץ סִיּוֹמוֹתדחוס בזמן O(|s|)
קיים אלגוריתם שבונה עץ סִיּוֹמוֹתדחוס בזמן O(|s|) s = xabxa$ 123456 הטכסט סבוכיות O(|s|+l) בונים עץ סִיּוֹמוֹת (4,5) xa bxa$ (3,6) (5,5) a (6,6) $ s1 = xa (3,6) (6,6) $ bxa$ (6,6) (3,6) bxa$ $ s2 = xabx 5-4+1=2 6-3+1=4 6 - 6 +1=1 +
s2 s = xabxa$ 123456 הטכסט s xa bxa$ 5-4+1=2 6-3+1=4 6 - 6 +1=1 + s2 = xabx (4,5) xa bxa$ (3,6) (5,5) a (6,6) $ (3,6) (6,6) $ bxa$ (6,6) (3,6) bxa$ $
פתרון 2 s = xabxa$ 123456 2 (4,5) 4 xa bxa$ (3,6) 1 (5,5) a (6,6) $ 3=6-3+1 3 1 1 (3,6) (6,6) $ bxa$ 6 4 1 4 (6,6) (3,6) bxa$ $ 1 + 5 2 =6-5+1
פתרון 2 s = xabxa$ 123456 מופע ראשון של xa 1 1 = min(4,1) (4,5) 4 xa 1 bxa$ (3,6) 1 (5,5) a (6,6) $ 4 3 1 1 (3,6) 2 (6,6) $ bxa$ 6 4 1 4 (6,6) (3,6) bxa$ $ 1 5 2
פתרון 2 s = xabxa$ 123456 1 xa 1 bxa$ a $ 3 2 $ bxa$ 6 4 1 bxa$ $ 5 2 פלט: כל הַמּוֹפָעִים s1 = xa s2 = ab s3 = a פלט: מוֹפָע הראשון של כל מחרוזת בטכסט
דחיסה i=12 S[1..m]= aabcbbabbsbabcbbbbabbabcbbabbabbsb… aabcbbabbsb(2,5)bbabbabcbbabbabbsb… (s 12,L12) נגדיר Priori=S[i..i+Li-1] הרישה S[i..i+Li-1] הארוכה ביותר אשר מופיעה כתת מחרוזת ב- S[1..i-1] Prior12=abcbb L12=5 s12=2
אלגוריתם דחיסה Ziv-Lempel Input S[1..m] For (i=1 ; i<=m ;;) {Compute (si,Li) if Li>1 {output(si,Li); i=i+Li}; else {output(S[i]); i=i+1}} aabcbbabbsbabbbbbabbabcbbabbabbsb… aabcbb bs איך לחשב Compute (si,Li) (2,2) (6,4)
פתרון עץ סִיּוֹמוֹת s = xabxa$ 123456 1 xa 1 bxa$ a $ 3 2 $ bxa$ 6 4 xa b xa $ 1 bxa$ $ 5 2 לא תת-מחרוזת קודמת סבוכיות (1,2) O(|s|) 4<1 תת-מחרוזת קודמת
מציאת תת-מחרוזת ארוכה משותפת קלט: מחרוזות s1 ו- s2 פלט: תת-מחרוזת ארוכה ביותר משותפת דוגמא: s1=superiocalifornialives s2=sealiver m =|s1|+|s2| נסמן: Ω(m) חסם תחתון:
בונים עץ סִיּוֹמוֹת ל- פתרון s=s1$1s2 $2 סבוכיות O(|s|)=O(m) s2 s1 |s| =|s1|+|s2| $2$2$2 $2$2 $1 $1 $1 $1 עץ סִיּוֹמוֹת מוכלל $2 $2 $2 $2
1,2 סבוכיות O(m) 1,2 1,2 1 1,2 1 2 $1$2$2$1 $1$2 $2$1$2$1$2$2$1$1$2 $2 תת-מחרוזת ששייכת רק למחרוזת s1 צהוב 1 תת-מחרוזת ששייכת רק למחרוזת s2 כחול 2 ירוק תת-מחרוזת ששייכת למחרוזת s1ו- s2 1,2
סבוכיות 1,2 O(m) 1,2 1,2 1 1,2 1 2 $1$2$2$1 $1$2 $2$1$2$1$2$2$1$1$2 $2 תת-מחרוזת ארוכה ביותר המשותפת היא זאת המיוצגת ע"י המסלול הארוך ביותר בתת-עץ עם צמתים 1,2
פתרון עץ סִיּוֹמוֹת s = xabxa$ 123456 empty string 1 x,xa xa 1 bxa$ a $ 3 2 $ bxa$ a b,bx,bxa,bxa$ 6 xab, xabx, xabxa, xabxa$ 4 1 $ bxa$ $ xa$ 5 2 סיור preorder בעץ a$ ab,abx,abxa,abxa$
נחזור ל- עץ סִיּוֹמוֹתלא דחוסSuffix tree s = xabxa$ $ a$ xa bxa$ a $ xa$ $ bxa$ bxa$ |s|+1 bxa$ $ abxa$ xabxa$ משפט קיים אלגוריתם שבונה עץ סִיּוֹמוֹת בזמן O(|s|2) |s|+1 האם קיים אלגוריתם לעץ סִיּוֹמוֹתלא דחוס שרץ בזמן O(|s|) ?
s=000001010011100101110111 s=000 001 010 011 100 101 110 111 עץ סִיּוֹמוֹת |s| = 3 x 23 0 1 0 1 0 1 0 1 0 1 0 1 0 1 000 001 010 011 100 101 110 111 (|s|-3) + (|s|-6) + (|s|-9) + … גודל העץ לפחות
s=(0…000) (0…001) (0…010) (0…011) … k גודל העץ