Data Structures 1

מסמכים קשורים
שעור 6

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

<4D F736F F D20EEF9E5E5E0E5FA20E3E9F4F8F0F6E9E0ECE9E5FA2E646F63>

Microsoft Word - tutorial Dynamic Programming _Jun_-05.doc

פייתון

Slide 1

Microsoft Word - אלגברה מעורב 2.doc

דף נגזרות ואינטגרלים לשאלון 608 כללים למציאת נגזרת של פונקציה: n 1. y' n x n, y הנגזרת x.1 נכפול בחזקה )נרשום אותה משמאל ל- (. x א. נחסר אחד מהחזקה. ב

Microsoft Word - SDAROT 806 PITRONOT.doc

תרגיל 9 מבוא ללוגיקה ותורת הקבוצות, סתיו תשע"ד 1. תהי L השפה בעלת סימן פונקצייה דו מקומי G, סימן פונקציה חד מקומי T, סימן יחס תלת מקומי.c, d וקבועים L

<4D F736F F D20F4FAF8E5EF20EEE5F2E320E020F1EEF1E8F820E120FAF9F2E3>

תרגול 1

Data Structure Assignment no.3 תאריך הגשה: p.m. 11/09/16, 23:59 את העבודה יש להגיש בזוגות במערכת ההגשות.submission system על העבודה להיות מוגשות כקובץ

שיעור 1

הגנה - שקפי תרגול

תכנות דינמי פרק 6, סעיפים 1-6, ב- Kleinberg/Tardos סכום חלקי מרחק עריכה הרעיון: במקום להרחיב פתרון חלקי יחיד בכל צעד, נרחיב כמה פתרונות אפשריים וניקח

תכנון אלגוריתמים, אביב 1021, תרגול מס' 4 תכנון דינאמי תכנון דינאמי בתרגול זה נדון בבעיית הכפלת סדרת מטריצות (16.1.(CLR ראשית נראה דוגמא: דוגמא: תהינה

תכנות מונחה עצמים א' – תש"ע

. [1,3] ו = 0 f(3) f(1) = עמוד 1 מתוך 6 דר' ז. אולחא מס' הקורס 9711 חדו''א הנ מכונות 1 f ( x) = ( x 1)( x 2)( x 3) c= f c = c (1,3), c תשובות I 1) פונ

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

אוניברסיטת חיפה החוג למדעי המחשב מבוא למדעי המחשב מועד א' סמסטר ב', תשע"ג, משך המבחן: שעתיים וחצי חומר עזר: אסור הנחיות: וודאו כי יש בידיכם

Microsoft Word B

Microsoft Word - ExamA_Final_Solution.docx

PowerPoint Presentation

מבוא למדעי המחשב - חובלים

Slide 1

שאלהIgal : מערכים דו מימדיים רקורסיה:

פקולטה: מחלקה: שם הקורס: קוד הקורס: מדעי הטבע מדעי המחשב ומתמטיקה מתמטיקה בדידה תאריך בחינה: _ 07/07/2015 משך הבחינה: 3 שעות סמ' _ב' מועד

מבוא לאנליזה נומרית na191 Assignment 2 solution - Finding Roots of Nonlinear Equations y cos(x) שאלה 1 היכן נחתכים הגרפים של? y x 3 1 ושל ממש פתרונות

Microsoft Word - c_SimA_MoedB2005.doc

תוכן העניינים

! 1! משוואות מסדר ראשו! (הפרדת משתני*, הומוגנית, לינארית) xyy = 1 x y xy 2 = 2xy 2 מצא את הפתרו' הכללי: x y y = 3 א) y ג) ב) ד) y tan x = y (1 ( x+ y

מבוא לתכנות ב- JAVA תרגול 11

תורת החישוביות תרגול הכנה לוגיקה ותורת הקבוצות מה יש כאן? בקורס תורת החישוביות נניח ידע בסיסי בתורת הקבוצות ובלוגיקה, והכרות עם מושגים בסיסיים כמו א"ב

הגשה תוך שבוע בשעת התרגול

הטכניון מכון טכנולוגי לישראל אלגוריתמים 1 )443432( סמסטר חורף הפקולטה למדעי המחשב תרגול 9 מסלולים קלים ביותר תרגיל APSP - 1 עד כה דנו באלגור

הגשה תוך שבוע בשעת התרגול

מבוא למדעי המחשב - חובלים

מתמטיקה של מערכות

Slide 1

Untitled

PRESENTATION NAME

שאלהIgal : מערכים דו מימדיים רקורסיה:

תוכן העניינים

סדנת תכנות ב C/C++

מספר זהות: סמסטר ב' מועד א' תאריך: 11102/4// שעה: 9:22 משך הבחינה: 3 שעות חומר עזר: אין מותר השימוש במחשבון פשוט בחינה בקורס: מבני נתונים מרצה: הדר בי

אוניברסיטת בן-גוריון המחלקה למדעי המחשב בוחן במבנים בדידים וקומבינטוריקה פרופ' מתיא כ"ץ, ד"ר עופר נימן, ד"ר סטוארט סמית, ד"ר נתן רובין, גב'

תוכן העניינים: פרק צמצומים ומימושים של פונקציות בוליאניות... 2 צמצומים של פונקציות באמצעות מפת קרנו:...2 שאלות:... 2 תשובות סופיות:... 4 צמצום

2019 שאלות מומלצות לתרגול מס' דיפרנציאביליות של פונקציה סקלרית )המשך(. כלל השרשרת. S = ( x, y, z) z = x + 3y על המשטח מצאו נקודה בה מישור משיק

Slide 1

מבנים בדידים וקומבינטוריקה סמסטר אביב תשע"ט מספרי רמזי תרגול 11 הגדרה: (t R = R(s, הוא המספר הטבעי הקטן ביותר כך שבכל צביעה של צלעות הגרף וכחול(, קיים

מבחן סוף סמסטר מועד ב 28/10/08 מרצה אחראית: דר שירלי הלוי גינסברג מתרגלים: גלעד קותיאל, גדי אלכסנדרוביץ הוראות: א. בטופס המבחן 6 עמודים (כולל דף זה) ו

Microsoft Word - Sol_Moedb10-1-2,4

אוניברסיטת חיפה החוג למדעי המחשב.5.6 מבוא למדעי המחשב סמסטר א' תשע"ז בחינה סופית מועד א', מרצה: שולי וינטנר מתרגלים: סמאח אידריס, ראמי עילבו

שקופית 1

שאלה 2. תכנות ב - CShell

פתרון מוצע לבחינת מה"ט ב_שפת c מועד ב אביב תשע"ט, אפריל 2019 מחברת: גב' זהבה לביא, מכללת אורט רחובות שאלה מספר 1 מוגדרת מחרוזת המורכבת מהספרות 0 עד 9.

שאלון להערכה עצמית במתמטיקה לקראת לימודי שנה א מדוע להתכונן לשנה א מסלולי לימוד רבים באוניברסיטה (מדעי המחשב, הנדסה, פיזיקה וכמובן מתמטיקה) דורשים לימ

אנליזה מתקדמת

תרגיל 5-1

מהוא לתכנות ב- JAVA מעבדה 3

PowerPoint Presentation

מבוא לתכנות ב- JAVA תרגול 7

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

<4D F736F F D20F4F2E5ECE5FA20EEE5EEF6E0E5FA20312E646F63>

חשבון אינפיניטסימלי מתקדם 1

áñéñ åîéîã (ñéåí)

תרגול מס' 7 – חזרה על MST ואלגוריתם Dijkstra

Algorithms Tirgul 1

ע 003 מרץ 10 מועד מיוחד פתרונות עפר

מבוא למדעי המחשב

Microsoft Word - solutions.doc

מבחן 7002 פרטים כלליים מועד הבחינה: בכל זמן מספר השאלון: 1 משך הבחינה: 3 שעות חומר עזר בשימוש: הכל )ספרים ומחברות( המלצות: קרא המלצות לפני הבחינה ובדי

מטלת מנחה (ממ"ן) 11 הקורס: חשבון אינפיניטסימלי II חומר הלימוד למטלה: יחידות 2,1 4 מספר השאלות: 7 משקל המטלה: נקודות סמסטר: ב 2007 מו

Limit

מבוא למדעי המחשב

מבוא למדעי המחשב

234114

<4D F736F F D20FAF8E2E5EC20E0ECE2E1F8E420EEF2E5F8E D F9E0ECE5FA2E646F63>

עב 001 ינואר 12 מועד חורף פתרונות עפר

ðñôç 005 î

תשובות מלאות לבחינת הבגרות במתמטיקה מועד ג' תשע"ד, מיום 0/8/0610 שאלונים: 313, מוצע על ידי בית הספר לבגרות ולפסיכומטרי של אבירם פלדמן שאלה מספר

Tutorial 11

PowerPoint Presentation

. שאלה 1: ה אי x] T : R 4[ x] R 4[ אופרטור ליניארי מוגדר על-ידי T( ax bx cx d) bx ax cx c )13 נק'( א( מצאו את הערכים העצמיים, המרחבים העצמיים

PowerPoint Presentation

מבוא למדעי המחשב

<4D F736F F D20F4F8F720E7F9E9E1E420EBEEE5FAE9FA203120E9E5ECE E646F63>

Slide 1

אוניברסיטת בן גוריון בנגב תאריך המבחן: שקולניק אלכסנדר שם המרצה: מר בשפת JAVA מבוא לתכנות מבחן ב: מס' הקורס : הנדסת תעשיה וניהול מ

PowerPoint Presentation

ע 001 ינואר 10 מועד חורף פתרונות עפר

מספר מחברת: עמוד 1 מתוך 11 ת"ז: תשע"א מועד ב סמסטר א' תאריך: 00:11 שעה: 0 שעות הבחינה: משך כל חומר עזר אסור בשימוש בחינה בקורס: מבוא למדעי ה

Microsoft Word - c_SimA_MoedA2006.doc

מקביליות

שאלהIgal : מערכים דו מימדיים רקורסיה:

67865 כלים מתמטיים 7 בינואר 2014 מרצה: מיכאל בן אור מתרגל: צור לוריא איני לוקחת אחריות על מה שכתוב כאן, so tread lightly אין המרצה קשור לסיכום זה בשום

תמליל:

ערבול (ing) Lecture7 of Geiger & Itai s slide brochure www.cs.technion.ac.il/~dang/courseds חומר קריאה לשיעור זה: Chapter - tables (pages 9 43) Geiger & Itai, 00

ערבול (ing) Lecture7 of Geiger & Itai s slide brochure www.cs.technion.ac.il/~dang/courseds ראינו שלושה מימושים שונים למילון:,AVL עצי -3 ורשימת דילוגים הפעולות הבסיסיות )חיפוש, הכנסה, והוצאה( מתבצעות כל אחת ב-( n O(log האם אפשר לממש פעולות אלו בסיבוכיות זמן יותר טובה? 0 Data } לא למפתח כלשהו נניח שהמפתחות הם { 0,,,3,4,5,6,7,8,9 k Data k כן! תשובה: m- Geiger & Itai, 00 באמצעות מערך אפשר לממש כל פעולה ב-( O( איך?...

ערבול (ing) Lecture7 of Geiger & Itai s slide brochure www.cs.technion.ac.il/~dang/courseds } נניח שהמספרים הם { 0,,,3,4,5,6,7,8,9 0 3 4 5 6 7 8 9 Geiger & Itai, 00 0 3 7 9 Insert(3) Insert(7) Insert(0) Insert(9) Delete(7) Delete(0) Search(3) Search(0)

ערבול (ing) Lecture7 of Geiger & Itai s slide brochure www.cs.technion.ac.il/~dang/courseds 4 } נניח שהמספרים הם { 0,,,3,4,5,6,7,8,9 0 3 4 5 6 7 8 9 3 9 direct addressing גישה ישירה סבוכיות זמן סבוכיות מקום O(M) O() למספרים,...,3,,0, M אבחנה: אם נשתמש במערך, זמן של כל פעולה יהיה אמנם ()O, אך דרישות המקום הן O(M), כאשר M הוא גודל הטווח. ייתכן o(m).n =

ערבול (ing) 5 מדוע לפיכך נרצה להשתמש בעצי חיפוש מאוזנים או ברשימות דילוגים? תשובה: ל ע ת ים גודל התחום של ערכי המפתחות גדול בהרבה ממספר המפתחות בהם משתמשים. דוגמא : מספרי תעודת זהות מורכבים מתשע ספרות עשרוניות כלומר קיימים 0 9 מפתחות אך בישראל יש פחות מ 0 7 אנשים. לפיכך שימוש במערך ינצל פחות מ % בודד של הזיכרון המוקצה למערך. דוגמא : מספר המחרוזות של אותיות עבריות באורך 30 )באמצעותן ניתן לתאר שם פרטי, שם אמצעי, ושם משפחה של תושבי ישראל( הוא 30 בעוד מספר האנשים קטן מ 0. 7

ערבול (ing) 6 מימוש מילון באמצעות מערך נקרא גישה ישירה ) Addressing :(Direct המפתח עצמו משמש כאינדקס במערך. כאשר מרחב המפתחות גדול נחשב אינדקס h(k) מתוך המפתח k באמצעות פונקצית ערבול. h: key index מפתח k יכנס לתא h(k) במערך המטרה לממש את פעולות החיפוש,הכנסה, והוצאה בזמן ממוצע של ()O. לכן זמן חישוב h(k) חייב להיות ()O נגדיר פונקצית ערבול :(hash) h: U {0,,m-} בתחום U מחשבת אינדקס בטווח המתאים. אשר בהינתן מפתח

דוגמא }000 - נניח שהמספרים הם }0 0 3 4 5 6 7 8 9 60 43 57 39 h: {0 000} {0,,,,9} h(x) = x mod 0 Insert(43) h(43) = 3 Insert(57) h(57) = 7 Insert(60) h(60) = 0 Insert(39) h(39) = 9

פעולות מילון }000 - נניח שהמספרים הם }0 0 3 4 5 6 7 8 9 60 43 57 39 h: {0 000} {0,,,,9} h(x) = x mod 0 Delete(57) h(57) = 7 Delete(50) h(50) = 0 Search(43) h(43) = 3 Search(66) h(66) = 6 hash function פונקצית ערבול h

פעולות מילון }000 - נניח שהמספרים הם }0 0 3 4 5 6 7 8 9 60 43 57 39 h: {0 000} {0,,,,9} h(x) = x mod 0 Insert(73) h(73) = 3 התנגשות

0 בשיטת הערבול נוצרות התנגשויות כאשר x y אבל h(y).h(x) = 0 3 4 5 6 7 8 9 5 9 5 7 88 9 דוגמא: m = 0 h(k) = k mod 0 5, 7, 5, 9, 88, 9 h(8) = = h(5)

פתרון להתנגשויות באמצעות )chaining( "שרשראות" T X x x 3 x 4 X 4 X 3 X 5 X x x 5 הפעולות: ]T. h(x.key)] בראש הרשימה x הכנס את Insert(T,x) זמן במקרה הגרוע ביותר ()O. ]T h(k)] ברשימה k חפש איבר עם מפתח Search(T,k) זמן במקרה הגרוע ביותר )אורך הרשימה(..T[ h(x.key)] מהרשימה x סלק את Delete(T,x) זמן במקרה הגרוע ביותר )אורך הרשימה(.

0 3 4 5 6 7 8 9 Insert(73) h(73) = 3 Insert(67) h(67) = 7 60 Insert(87) h(87) = 7 43 73 57 39 67 87

0 3 4 5 6 7 8 9 60 Insert(77) 43 73 במקום הסידורי בסוף הרשימה בראש הרשימה 57 39 67 87 שיטת השרשראות Chaining

דוגמא להכנסה בראש הרשימה 4 m = 0 נניח: h(k) = k mod m 0 3 4 5 6 7 8 9 6 53 9 53, 6, 7, 9, 37,, 57 57 37 7 37 57 57 קלט:

0 3 4 5 6 7 8 9 60 43 57 39 73 67 87 Insert(37) Insert(47) Insert(77) Insert(97) Insert(07) נכניס... במקרה הגרוע ביותר כל האיברים נכנסו לאותה הרשימה ואז זמן חיפוש/הוצאה הוא.(n) הנחה: המפתחות מפוזרים באופן אחיד או h מפזרת את המפתחות באופן אחיד

הנחה הפיזור האחיד הפשוט h מפזרת את המפתחות באופן אחיד n אברים m n m אורך ממוצע של רשימה פקטור העומס

הנחה הפיזור האחיד הפשוט אורך ממוצע של רשימה h מפזרת את המפתחות באופן אחיד n m זמן ממוצע חיפוש כ וש ל m n m O() אם נבחר O(n) m

8 ניתוח זמנים )המשך( משפט )חיפוש כושל(: בשיטת השרשראות ותחת הנחת הפיזור האחיד הפשוט הזמן הממוצע לחיפוש כושל הוא.+=+n/m הוכחה: בהנחת הפיזור האחיד הפשוט כל מפתח מגיע באקראי לאחת מ- m הרשימות. הזמן לחיפוש כושל הוא לפיכך הזמן הממוצע לחפש באחת הרשימות עד סופה. אורכה הממוצע של רשימה בהנחת הפיזור האחיד הוא. = n / m לפיכך בממוצע יידרש זמן + )הכולל את זמן בדיקת המצביע בסוף הרשימה(. 0 3 4 5 6 7 8 9 6 53 7 37 57 9 ארבעה מצביעים

0 9 ניתוח זמנים )המשך( 3 4 5 6 7 8 9 t n משפט )חיפוש מוצלח(: בשיטת השרשראות ותחת הנחת הפיזור האחיד הפשוט הזמן הממוצע לחיפוש מוצלח הוא.+/=+n/(m) )הכנסה בראש הרשימש( הוכחה: נאמר שבזמן החיפוש ישנם n מפתחות שהוכנסו בסדר k. k,, n 6 53 אחרי k i לפני k i 7 37 57 9 n i n i m k i n m.(n-i)/m הוא k i k i הוא? מהו זמן חיפוש הממוצע של המפתח k i אחרי מפתח זה נוספו n-i מפתחות נוספים. לכן בממוצע גודל הרשימה משמאל למפתח מכאן שזמן החיפוש הממוצע של המפתח + (n-i)/m המפתח זמן החיפוש הממוצע t למפתח כלשהו יהיה לפיכך: n n ( n i) ( n ) n i m nm i0 nm m n i הממוצע לחיפוש מפתיח רנדומלי!!! ב ל וף

ניתוח זמנים )המשך( 0 לפיכך, כאשר סדר הגודל של מספר המפתחות n בהם משתמשים הוא כגודל המערך m, כלומר עבור O(m) n, = נקבל שגורם העומס קבוע כלומר ()O = כל הפעולות דורשות זמן ממוצע ()O. ולכן דוגמא עבור 00=n מפתחות מטווח כלשהו U של מספרים שלמים, נאמר עד 0, 6 נוכל להחזיק מערך ובו 700=m מקומות ובממוצע אורך כל שרשרת יהיה ()O. וזמני החיפוש יהיו n/m=3

ערבול (ing) - פונקציית ערבול. h: U {,,, m} h k O() Direct Addressing מערך עם מימוש שרשראות זמן חישוב חייב להיות פיזור אחיד של המפתחות פקטור העומס O() הנחה פיזור אחיד הנחה התנגשויות כאשר x y אבל h(y) h(x) = זמן חיפוש כושל זמן חיפוש מוצלח שרשראות chaining + n m + n m

שיטת Open addressing לא נשתמש בשרשראות, אלא כל האיברים יוכנסו לטבלה. התנגשות נניח שברשותנו סדרה אינסופית של פונקציות ערבול:, h 0,h,h.h 0 (x).h (x) x Rehashing - h ( x) 0 h ( x) h 3 ( x) h ( x) ערבול נ ש נ ה נבחן שלושה שיטות: סריקה ליניארית, ערבול נשנה, וערבול כפול. ננסה לשמור את במקום אם תפוס, ננסה במקום נמשיך עד שנצליח.. (n m) ברור שבשיטות open addressing פקטור העומס

0 3 4 5 6 7 8 9 שיטת Open addressing סריקה ליניארית Linear probing h 0 ( x) h ( x) h ( x) 0 h ( x) h ( x) h ( x) h ( x) 3 h ( x) h ( x) 4 3 סריקה ליניארית -- probing linear אם המקום המיועד h(k) תפוס, שים במקום הבא מודולו m.

4 דוגמא 0 3 4 5 6 7 8 9 7 6 53 57 37 9 m = 0 דוגמא: h(k) = k mod m קלט: 53, 6, 7, 9, 37,, 57

5 linear probing כיצד נוציא איברים? הוצאה בשיטת לא ניתן פשוט למחוק איבר שכן שרשרת החיפוש תינתק. m = 0 דוגמא: h(k) = k mod m קלט: 53, 6, 7, 9, 37,,57 חפש 7? 7 6 53 57 9 הוצא 37 7 6 53 57 37 9 0 3 4 5 6 7 8 9

הוצאה בשיטת linear probing 6 פתרון : בזמן ההוצאה הוצא את כל האיברים עד לרווח הבא, כולם חזרה פרט לאיבר שרוצים להוציא. והכנס את חפש 7! 6 53 57 7 9 7 6 53 57 37 9 הוצא 37 7 6 53 57 37 9 0 3 4 5 6 7 8 9

7 הוצאה בשיטת ה מ צ יב ה כדי לא לנתק את שרשרת החיפוש נסמן את מקום האיבר שהוצא בסימן.deleted )שיטת המציבה( בזמן חיפוש x, במידה וניתקל בסימן,delete נמשיך את סריקת הרשימה עד למציאת x או עד שנגיע למקום ריק )המסומן ב-.)Null בזמן הכנסת x, במידה וניתקל בסימן,delete נשתמש במקום זה לשמירת x, אחרת נשמור את x במקום הריק בסוף הרשימה )המסומן ב-.)Null 0 3 4 5 6 7 8 9 7 6 53 57 delete 7 37 9 דוגמא: m = 0 h(k) = k mod m קלט: 53, 6, 7, 9, 37,, 57 הוצא 37, חפש 7, הכנס 7

דוגמא נוספת שיטת Open addressing סריקה ליניארית Linear probing 33 3 0 3 4 5 6 7 8 9 3D 43 7 Insert(3) Insert(7) Insert(3) Insert(33) Insert(43) Delete(3) Search(43) h(x) = x mod 0 Search(33) Search(73)

0 3 4 5 6 7 8 9 Open addressing Linear probing n m ( ) ( )3 m m מקום ראשון לא תפוס שני לא תפוס שלישי לא תפוס n אורך חיפוש ממוצע שיטת סריקה ליניארית מהו זמן הכנסה ממוצע? ההסתברות שמקום רנדומלי תפוס

יתרונות וחסרונות היתרון העיקרי של שיטת ה מ צ יב ה הוא פשטות. אבל 30 כאשר השימוש דורש הוצאות, אורך החיפוש תלוי גם באיברים שכבר הוצאו ולא רק באיברים שכרגע במבנה. דוגמאות לשימוש במילון ללא הוצאות: טבלה של שמות משתנים בהרצת תוכנית Table).(Symbol מספרי תעודות זהות אינם ממוחזרים. נתאר כעת שיטות נוספות ל- addressing.open שיטות אלו שימושיות במיוחד במימושי מילון ללא הוצאות. כאשר יש צורך בהוצאות, עדיפה שיטת הרשימות המקושרות.

ערבול - Rehashing נ ש נ ה 3 נניח שברשותנו סדרה אינסופית של פונקציות ערבול:, h 0 h, h, ננסה לשמור את x במקום (x) h. 0 אם תפוס, ננסה במקום (x) h. נמשיך עד שנצליח..h i (x) = h(x) + i סריקה ליניארית probing( )linear היא מקרה פרטי בו:

ערבול כפול -- ing Double 3 נגיע לתוצאות דומות לערבול נשנה ע"י שתי פונקציות בלבד,d. h כאשר: d(x) h i (x) = h(x) + i הפונקציות,d h נבחרות באופן בלתי תלוי. מהו היחס הרצוי בין d(x) לגודל הטבלה? m גודל הטבלה ו- d(x) צריכים להיות מספרים זרים כך ש (x) h 0 (x),,h -m תכסה את כל האינדקסים האפשריים בתחום {-m,,0}. לפיכך נוח לבחור את m להיות מספר ראשוני. הוצאות נעשות ע"י שימוש בסימון.delete

ניתוח זמנים עבור Rehashing 33 הנחת הפיזור האחיד: הסדרה (x)) (h 0 (x),h (x),h (x), h m- היא פרמוטציה אקראית של (-m,,0). משפט: בהנחת הפיזור האחיד, בשיטת ערבול rehashing מתקיים: זמן ממוצע של חיפוש כושל קטן מ- ( - )/ ln גורם העומס חיפוש כושל חיפוש מוצלח 0.5 3.386 0.8 5 3. 6 0.9 0 3.669 זמן ממוצע של חיפוש מוצלח קטן מ- הוכחה בספר הלימוד: Introduction to algorithms, Cormen et al., pp 38-39

ניתוח זמנים עבור סריקה ליניארית משפט: בהנחת הפיזור האחיד הפשוט, בשיטת ערבול open addressing זמן ממוצע של חיפוש כושל קטן מ- זמן ממוצע של חיפוש מוצלח קטן מ- בסריקה ליניארית מתקיים: /( ) /( ) 34 סריקה ליניארית חיפוש מוצלח סריקה ליניארית חיפוש כ וש ל ערבול נשנה חיפוש מוצלח ערבול נשנה חיפוש כ ו של גורם העומס 0.5.836.5.5 0.8 5 3.6 3.0 3.0 0.9 0 3.669 50.5 5.5 הוכחה בספר : 973 Knuth, The art of computer programming, Vol 3, מסקנה: המשפט מראה שאפשר להשתמש בסריקה ליניארית, כל עוד הטבלה לא מלאה מדי )80%(.

ערבול (ing) 35 - פונקציית ערבול. h: U {,,, m} h k O() Direct Addressing מערך עם מימוש שרשראות Open Addressing מערך זמן חישוב חייב להיות O() הנחה O() הנחה O() הנחה פיזור אחיד הנחה פיזור אחיד הנחה פיזור אחיד הנחה פיזור אחיד של המפתחות פקטור העומס α = n/m התנגשויות כאשר x y אבל h(y) h(x) = שרשראות chaining Rehash Linear probing Double ing Rehash פיזור אחיד + α זמן חיפוש כושל + α α + α זמן חיפוש מוצלח + α α ln α + α

36 פונקציות ערבול דרישות מפונקציות ערבול: מפזרת היטב וקלה לחישוב. שיטת החילוק מודולו m: רצוי ש- m : h(x) = x mod m לא יהיה חזקה של או 0. בחזקות של פונקצית הערבול מסתמכת רק על (m) log הביטים הראשונים.(LSB) בחזקות של עשר, פונקצית הערבול מסתמכת רק על (m) log 0 הספרות הראשונות. רצוי שפונקציות הערבול ישתמשו בכל האינפורמציה הנמצאת במפתח כדי לקרב עד כמה שניתן את הנחת הפיזור האחיד. יהיה ראשוני שאינו קרוב לחזקה של. חזקות קרובות של גורמות לפיזור לא אחיד כאשר המפתחות כתובים בבסיס שהוא חזקה של, למשל מחרוזות תווים נכתבות בבסיס = 56 8. הערה:רצוי לבדוק את פונקצית הערבול על תת קבוצה של מפתחות "אמיתיים" וכך לוודא שהנחת הפיזור האחיד מתקיימת בקרוב.

פונקציות ערבול )המשך( 37 0 > a שיטת הכפל בקבוע >.a הכפל את המפתח k בקבוע מצא את החלק השבור של התוצאה. h(k) = m (ak mod ) הכפל את החלק השבור ב- m הערך של m אינו קריטי. ועגל כלפי מטה: a 5 / 0.6803... ערך של a הגורם לפיזור טוב הוא : דוגמא: = 3456 k m = 0000 h(k) = 0000 (3456 0.6803 mod ) = 0000 (76300.0045 mod ) = 0000 0.0045 = 4.5 = 4

ערבול (ing) 38 - פונקציית ערבול. h: U {,,, m} h k O() Direct Addressing מערך עם מימוש שרשראות Open Addressing מערך זמן חישוב חייב להיות פיזור אחיד של המפתחות פקטור העומס α = n/m O() O() O() שיטת החילוק שיטת הכפל שיטת החילוק שיטת הכפל שיטת החילוק שיטת הכפל התנגשויות כאשר x y אבל h(y) h(x) = שרשראות chaining Rehash Linear probing Double ing Rehash פיזור אחיד + α זמן חיפוש כושל + α α + α זמן חיפוש מוצלח + α α ln α + α

פונקציות ערבול למחרוזות ארוכות a = 97 = 00 000 :ascii b = 98 = 00 000 39 נשתמש בקוד וכך הלאה פתרון נאיבי: בצע xor ביט ביט. לדוגמא: = 3 00) (0000 = 000)) (00 xor h( ab ) = h( (00 000) h(s 0,, s k ( =ascii(s 0 ) xor xor ascii(s k ) בהינתו מחרוזת s 0,, s k בצע: h( aa ) = h( (00 000) xor (00 000)) = (0000 0000) = 0 h{ bb ) = h( (00 000) xor (00 000)) = (0000 0000) = 0 חסרון ראשון: התוצאה אפס מתקבלת כאשר כל אות מופיעה מספר זוגי של פעמים: = 0 h{ abccba ) h(x) 55 חסרון שני: טווח הערכים מוגבל.

פונקציות ערבול למחרוזות ארוכות )המשך( 40 פתרון עדיף: בחר פרמוטציה אקראית ) 55 ( 0,, של 0 55 ואחסן אותה במערך.T.T[0] בצע xor בין האות הראשונה s 0 של המפתח והערך T 0 3 ] i T[aכאשר התוצאה a נמצאת בתחום 55 0. בשלב ה- i בצע xor בין האות s i של המפתח והערך xor בשלב הקודם. a i היא תוצאת ה- תוצאת פונקצית הערבול היא תוצאת ה- xor עם האות האחרונה של המפתח כלומר 8 38.hash(key) = s n xor T[a n ] דוגמא: hash(aa) hash(a) = T[0] xor 97 = 000 0 xor 00 000 = 0 00 = 8 hash(aa) = T[ hash(a) ] xor a = T[8] xor 97 = 000 00 xor 00 000 = 7 הערה: בשיטה זו נפתרה בעיית האותיות המופיעות מספר זוגי של פעמים.

0000 000 000 00 000 00 00 0 000 00 00 0 00 0 0 0000 07 96 6 6 97 94 3 04 50 0 84 03 99 33 000 3 58 4 57 3 8 5 0 37 48 8 53 63 86 35 000 69 4 60 34 79 70 80 4 0 9 33 7 9 39 96 00 85 0 0 4 6 78 30 93 0 9 66 65 4 77 43 5 000 30 8 9 06 09 57 46 65 38 7 36 6 00 35 55 87 08 7 3 93 30 7 0 40 98 45 3 00 5 00 7 4 6 4 74 74 9 4 47 0 5 5 73 36 44 0 45 98 49 8 34 66 45 03 64 54 8 5 55 4 46 000 3 35 34 3 47 44 97 64 43 83 88 75 53 56 5 89 00 9 58 63 7 9 6 79 3 54 87 8 6 67 6 38 6 00 0 07 54 8 77 8 78 39 59 4 53 50 68 5 37 0 90 99 9 43 4 0 70 75 36 06 48 44 49 46 95 00 9 3 37 69 85 3 6 7 7 73 83 44 5 4 3 0 08 49 56 90 6 39 40 60 94 38 76 4 84 55 04 0 9 7 80 47 3 09 67 05 76 33 59 5 50 8 89 00 5 7 0 5 3 7 8 9 40 8 05 95 86 68 48 5 T[00000] 97 00000 hash(dat) דוגמא T[0000000] 6 0000 T[00000000] 07 00 T[000] 53 0000 T[000] 40 00000 ascii 00 000 a 00 000 b 00 00 c 00 000 d symbol דוגמא: 4 hash( d) T[00000000] xor ascii( d) 00 xor 00000 000 hash( da) T[ hash( d)] xor ascii( a) 0000 xor 00000 000 hash( dat) T[ hash( da)] xor ascii( t) 00000 xor 0000 000 hash( dat) 000 48

פונקציות ערבול למחרוזות ארוכות )המשך( 4 מימוש של פונקצית הערבול: int hash(char *s) { int h = 0; char *p; for (p=s; *p; p++) h = T[h]^ *p; /* Xor */ return h; }

פונקציות ערבול למחרוזות ארוכות )המשך( 43 כדי להתגבר על בעיית הטווח ניתן להשתמש בשתי פרמוטציות T, T ולשרשר את התוצאות. hash(k) = [hash (k), hash (k)] = hash (k) * 56 + hash (k) גודל הטווח החדש, כלומר גודל טבלת הערבול, הוא 65,536= 6 = 56. )בעוד גודל כל T i הוא 56(. ניתן להגיע לטווח הרצוי ע"י שימוש במספר קטן של פרמוטציות נוספות. תוצאה דומה מתקבלת אם במקום hash נוסיף לאות הראשונה של המחרוזת ונשתמש שוב בפונקצית הערבול.hash לדוגמא: (bcb) hash(acb) = hash (acb) * 56 + hash

44 ערבול אוניברסלי לכל בחירה של פונקצית ערבול קיימת סדרה גרועה של מפתחות כך שתווצר רשימה באורך מקסימלי. תכונה זו יכולה ליצור בעיה. דוגמא: יתכן מתכנת המשתמש באופן עקבי בשמות מסוימים למשתני התוכניות שהוא כותב ולצערו פונקצית הערבול הבונה את ה- table symbol ממפה את כל השמות הנ"ל לאותו המקום בטבלת הערבול. לפיכך כל תוכנית מחשב של משתמש זה אינה יעילה כפי שיכולה הייתה להיות! הפתרון: לבחור באקראי, בזמן יצירת טבלת ערבול, פונקצית ערבול מתוך קבוצת פונקציות שהוגדרה מראש. נרצה שקבוצת הפונקציות תהיה כזו, שעבור כל סדרת מפתחות, בחירה אקראית של אחת הפונקציות תיצור פיזור טוב. הגדרה: תהי H קבוצת פונקציות ערבול מתחום U לקבוצה {-m,,0}. הקבוצה H נקראת אוניברסלית אם לכל זוג מפתחות שונים x,y U מספר הפונקציות עבורן h(y) h(x) = הוא. H /m אבחנה: לכל זוג מפתחות x ו- y,ההסתברות p שבבחירה אקראית של פונקצית ערבול מתוך H, תהיה התנגשות בין x ו- y היא. p = ( H /m)/ H = /m נראה כעת ששימוש בקבוצה אוניברסלית גורם לפיזור טוב. אח"כ נראה כיצד לבנות קבוצה כזו.

ערבול אוניברסלי )המשך( 45 משפט: תהי H קבוצה אוניברסלית של פונקציות ערבול לתוך טבלה T בגודל m. אם h נבחרה באקראי מתוך H, ונשתמש בה לערבול n מפתחות כלשהם, אזי לכל מפתח, המספר הצפוי של התנגשויות בשיטת הרשימות המקושרות שווה ל-.(n-)/m = α-/m הוכחה: ראינו שההסתברות להתנגשות של מפתח מסוים x עם מפתח מסוים y היא p. = m/ המספר הצפוי של התנגשויות של מפתח מסוים x עם מפתח כלשהו נתון לפיכך ע"י: L { yt yx} m n m m מסקנה: מספר ההתנגשויות הצפוי לכל מפתח קטן מגורם העומס.

בניית קבוצה אוניברסלית נבחר את גודל הטבלה להיות מספר ראשוני m. נשבור כל מפתח x ל- + r חלקים באורך קבוע ] r.x = [ x 0,,x )למשל באורך בייט = 8 ביטים(. מספר הביטים יבחר כך שהערך של x i יהיה לכל היותר m. r+ h {0,..,m-} בצורה הבאה: נגדיר פונקצית ערבול (x) a לכל סדרה ] r a = [a 0,,a מהתחום.m r+ h a ( x) r a i0 i x i mod m קבוצת הפונקציות H מוגדרת להיות } a a h} ומספר הפונקציות בקבוצה זו הוא: 46 דרך השימוש בשיטה זו: נקצה טבלת ערבול T בגודל m, נגריל מספר a ונשתמש בפונקצית הערבול h a לכל הפעולות דוגמא: 57=m, טווח המפתחות 0-. 4 נשבור כל מפתח לשלושה חלקים באורך 8 ביטים. נניח שהוגרלו המספרים [0,48,3]=a. בהינתן המפתח [0,4,] = 0 + 4 8 = 0000000 =00000000 0000000 05 = x נחשב (480 + 34 + 0) mod 57 = 993 mod 57 =

בניית קבוצה אוניברסלית )המשך( 47 משפט: קבוצת הפונקציות } a H = h} שהוגדרה בשקף הקודם היא קבוצה אוניברסלית. הוכחה: יהיו ] r x = [x 0,,x ו- ] r y = [y 0,,y מפתחות שונים. ללא הגבלת הכלליות נניח.x 0 y 0 אנו טוענים שלכל בחירה של a a,, r קיים ערך יחיד ל- a 0 כך שמתקיים (y) h. a (x)=h a הערך a מתקבל מהפתרון היחיד למשוואה: a h a ( x ( x) h a ( y) r i0 r a ( x i i y ) 0 (mod m) i הניתנת ל ש כ ת וב כדלקמן: ) (mod y ) a ( x y ) 0 0 0 i i i m i בהנחה שהטענה נכונה, נובע שכל זוג מפתחות x,y מתנגשים עבור m r נזכור שמספר הפונקציות ב- H הוא +r m. עבורו x,y מתנגשים. ערכים של a שכן לכל ערך של ) r (a,,a קיים ערך אחד לפיכך, ההסתברות ש- x ו- y יתנגשו היא m r m/ +r = m/ כנדרש מקבוצה אוניברסלית. a 0

בניית קבוצה אוניברסלית )המשך( 48 טענה: למשוואה הבאה יש פתרון והפתרון יחיד. a ( x y ) r a ( x ) (mod 0 0 0 i i i m i y עבור כל מספר z )שאינו 0( קיים מספר w יחיד נזכר שכאשר m ראשוני מתקיים: במילים אחרות: לכל מספר הופכי )כפלי( יחיד! (m. z w = (mod כך ש = (mod 3) 3) = (mod למשל z = x 0 y 0 0 במשוואה הנתונה נכפיל את המשוואה בהופכי של z ונקבל את הפתרון היחיד ל- a. 0 r a0 ai ( xi yi ) ( x0 y0) (mod m) i )

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

Element Uniqueness שימוש: בעיית היחידות 50 נתונים מספרים 0 x 0,,x n- < T.x i = x j מצא אם קיים ij עבורו פתרון ראשון מיון: זמן (n O(n log O(n) פתרון שני ערבול: הכנס את המספרים לטבלת ערבול בגודל )שיתכן וקטנה בהרבה מ- T(. בזמן התנגשות, בדוק שוויון. זמן ממוצע.O(n)

מיון

מערך ששומר בכל A[i] כמה איברים מופיעים יותר או שווה ל- i אתחול A ב- ()O אם אבר x היה מופיע i פעמים והופיע פעם נוספת A[i+]=A[i+]+ HowMany(i,j)=A[i]-A[j+] פעמים