340 likes | 488 Views
אחסון (אירגון) מידע. DATA Link. DATA Link. DATA Link. …. …. הערה : כל יחידה מכילה 2 שדות – מידע וקישור ליחידות אחרות. מטרה : אחסון ועיבוד מספר רב של יחידות מידע. מילת מפתח – יעילות !. 1. יעילות האחסון ( מקום ) – תוספת של מקום מעל ההכרחי, ניצול מקום.
E N D
אחסון (אירגון) מידע DATA Link DATA Link DATA Link … … הערה: כל יחידה מכילה 2 שדות – מידע וקישור ליחידות אחרות. מטרה: אחסון ועיבוד מספר רב של יחידות מידע. מילת מפתח – יעילות! 1. יעילות האחסון (מקום) – תוספת של מקום מעל ההכרחי, ניצול מקום. 2. יעילות העיבוד(זמן) –זמן עבור ביצוע פעולות על המידע. כגון חיפוש, מחיקה, הכנסת, גישה לאיבר במבנה...
אחסון לינארי סידרתי דרך מוכרת: מערך – אחסון סידרתי. מאפיינים: 1. מקום: מוגבל, ביזבוז כללי, חסכוני לכל יחידה. ...O(1), גישה לאיבר- O(n)2. זמן: הכנסה,הוצאה - הערה: ניתן לפתור חלק מהבעיות, אבל... מסקנה: באופן כללי לא מספק.
אחסון לינארי מקושר HEAD TAIL DATA NEXT POINTER DATA NEXT POINTER DATA NULL . . .
P-new הוספת איבר Pointer Start
הוספת איבר Pointer Start P-new
Pointer Start מחק את זה מחיקת איבר
מחק את זה מחיקת איבר Pointer Start
רשימה מקושרת מאפיינים: 1. מקום: לא מוגבל, אין ביזבוז באופן כללי, הוספה של מצביע. ...O(n), גישה לאיבר- O(1)2. זמן: הכנסה,הוצאה - מסקנה: שיפור מסוים ביחס למערך, הבעיה העיקרית – זמן גישה.
רשימה מקושרת דו-כיוונית DATA NEXT PRE DATA NEXT PRE DATA NEXT PRE שיפור יחסי בזמן גישה, הוספת מצביע.
(מחסנית) Stackמימוש 1: מילת מפתח:LIFO אינטואיציה: מחסנית רובה, ניירות על השולחן • פקודות: • 1. S <- MAKE () • 2. TOP (S) • 3. POP (S) • 4. PUSH (S) • 5. EMPTY (S) הערה: פקודות נוספות לא אפשריות
i-top 1st 2nd מחסנית במערך • 1. S <- MAKE () • 2. TOP (S) • 3. POP (S) • 4. PUSH (S) 5. EMPTY (S)
סיבוכיות (מחסנית במערך) בעיה: מה עושים כשמערך מתמלא? פתרון: שיטת ההכפלה Doubling 1) הקצה מקום מסוים לטבלה (n) 2) כשהמקום מתמלא והטבלה מכילה nאלמנטים: א) הקצה מקום חדש לטבלה בגודל 2n ב) העתק איברים לטבלה החדשה. ג) שחרר טבלה ישנה.
סיבוכיות (מחסנית במערך) • 1) עבור פעולת ׂPER OPERATION) : INSERT) • אם אין הכפלה (O(1 • אם יש הכפלה (O(n • AMORTIZED COST • חשוב זמן ממוצע עבור פעולה במקרה הגרוע ביותר. • שווה ל: T(n)/n , כאשר (T(n הוא סכום הפעולות על nאיברים. AMORTIZED COST O(1)
p-top p-top מחסנית ברשימה מקושרת p-top • 1. S <- MAKE () • 2. TOP (S) • 3. POP (S) • 4. PUSH (S) 5. EMPTY (S)
Prog A . . x= 17 Call B . . B() . . x =7 . Call C return C() . x =3 . return x=7 x=17 שימוש במחסנית תוכנית לבדיקת פלינדרום:w$wR דוגמא:abcda$adcba ({[]})(] בדיקת תקינות של סוגרים: ({[]})([(){}[{}]]) קריאה לפונקציות:
שימוש נוסף במחסנית יצוג ביטוי אלגברי: -+ABC: Prefixא. A+B-C: Infixב. AB+C-: Postfixג. שאלות: ?Postfix, Infix, Prefix1. מה הצורך ב- 2. מה הקשר החזותי בין השיטות? 3. איך מחסנית עוזרת בחישוב הביטוי?
Postfixחישוב ביטוי אלגברי (מחסנית האופרנדים).S1. אתחל מחסנית ריקה בביטוי (משצאל לימין):s2. לכל סמל push(S,s) הוא אופרנד -s אם2.1 push(pop(S), s, pop(S)) אחרת - 2.2 ?
דוגמא Infix: 2 * ( 2 + 3 ) + 3 * 4 - 5 * 6 * ( 7 - 4 - 2 ) Postfix: 2 3 + 2 * 3 4 * + 7 4 – 2 – 6 * 5 * - + 3 2 5 2 * 3 4 * + 7 4 – 2 – 6 * 5 * -
דוגמא 5 2 * 3 4 * + 7 4 – 2 – 6 * 5 * - * 2 5 10 3 4 * + 7 4 – 2 – 6 * 5 * -
דוגמא 10 3 4 * + 7 4 – 2 – 6 * 5 * - * 4 3 10 10 12 + 7 4 – 2 – 6 * 5 * -
דוגמא 10 12 + 7 4 – 2 – 6 * 5 * - + 12 10 22 7 4 – 2 – 6 * 5 * -
דוגמא 22 7 4 – 2 – 6 * 5 * - - 4 7 22 22 3 2 – 6 * 5 * -
דוגמא 22 3 2 – 6 * 5 * - - 2 3 22 22 1 6 * 5 * -
דוגמא 22 1 6 * 5 * - * 6 1 22 22 6 5 * -
דוגמא 22 6 5 * - * 5 6 22 22 30 -
דוגמא 22 30 - - 30 22 -8
Postfix ל-Infixהמרה מ- הערות: 1. קדימויות של אופרטורים... 2. קדימויות של סוגריים... 3. מבנה נתונים... 4. סדר של אופרנדים...
אלגוריתם המרה 1. אתחל מחסנית ריקה S(מחסנית האופרטורים). 2. לכל סמל s בביטוי (משצאל לימין): 2.1אם s אופרנד - תדפיס s 2.2 אחרת: 2.1.1 כל עוד S לא ריקה ו-top(S) קודם ל-s תדפיס pop(S) 2.1.2push(S, s) 3. כל עודSלא ריקה – תדפיס pop(S) הערה:מה לגבי סוגריים?
תור - Queue In Out מילת מפתח:FIFO פקודות: 1) Q <- MAKE() 2) ENQUEUE (x,Q) : INSERT (x,END (Q),Q) 3) FRONT (Q) : RET (FIRST (Q), Q) 4) DEQUEUE (Q) : DELETE (FIRST (Q), Q) 5) EMPTY (Q) : TRUE | FALSE
1 2 N N 1 2 QUEUE Q.REAR Q.FRONT תור במערך FRONT - על ראשון, REAR - על אחרון F=R => ריק F+k=R => kאיברים R=F-1=> מלא שימו לב: ניתן להכניס רק N-1איברים!!!!!!
rear front תור ברשימה מקושרת rear front 1) Q <- MAKE() 2) ENQUEUE (x,Q) : INSERT (x,END (Q),Q) 3) FRONT (Q) : RET (FIRST (Q), Q) 4) DEQUEUE (Q) : DELETE (FIRST (Q), Q) 5) EMPTY (Q) : TRUE | FALSE
שימושים Queue: תור למדפסת . . .
תור קדימויות In Out שינוי: הוספת מפתח k לכל איבר. הוצאת איבר נעשית לפי המפתח הזה. דוגמאות: עבודת מעבד, מערכת הפעלה, תזמון עבודותVIP, ...
תור קדימויות שינויים בולטים: FRONT(Q) = Maximum(Q) (Minimum(Q)) DEQUEUE(Q) = ExtractMaximum(Q) (ExtractMinimum(Q)) איך לממש? מה סיבוכיות המימוש הנאיבי?