• 40 likes • 193 Views
שאלה 2: יום-הולדת הוא רשומה המורכבת משני שדות: שדה שם המכיל שם של אדם, ושדה יום המכיל מספר בתחום 1-365 (כולל), המייצג את היום שבו נולד אותו אדם. טיפוס הנתונים מאגר-ימי-הולדת המאחסן רשומות ימי הולדת, ומוגדרות עליו הפעולות:. אתחל-מאגר-יום-הולדת. פעולה מחזירה מאגר ימי הולדת ריק.
E N D
שאלה 2: יום-הולדת הוא רשומה המורכבת משני שדות: שדה שם המכיל שם של אדם, ושדה יום המכיל מספר בתחום 1-365 (כולל), המייצג את היום שבו נולד אותו אדם. טיפוס הנתונים מאגר-ימי-הולדת המאחסן רשומות ימי הולדת, ומוגדרות עליו הפעולות: אתחל-מאגר-יום-הולדת פעולה מחזירה מאגר ימי הולדת ריק. פעולה המוסיפה את רשומת יום ההולדת b למאגר ימי הולדת P. הנחות: P מאגר מאותחל ו- b , יום הולדת תקין שאינו קיים במאגר. הוסף-יום-הולדת(P,b) פעולה המדפיסה את כל רשומות יום ההולדת ב- P החלות ביום day. הנחות: P מאגר מאותחל ו- day, יום בתחום 1-365. הדפס-ימי-הולדת(P,day)
א. מצא ייצוג לטיפוס הנתונים מאגר-ימי-הולדת, כך שיעילות הפעולה הוסף-יום-הולדת תהיה ( O(n ויעילות הפעולה הדפס-ימי-הולדת תהיה ( O(m כאשר m הוא מספר ימי ההולדת החלים ב day. ב. כתוב אלגוריתם הממש את הפעולה הוסף-יום-הולדת בייצוג שבחרת. ג. כתוב אלגוריתם הדפס-ממויין(L), המקבל רשימה בלתי ממוינת L של ימי הולדת ומדפיס את ימי ההולדת בצורה ממוינת. יש להשתמש בטיפוס הנתונים מאגר-ימי-הולדת. ד. מה תהיה יעילותה של הפעולה הדפס-ממויין(L) בייצוג שבחרת לטיפוס הנתונים מאגר-ימי-הולדת, כפונקציה של אורך הרשימה? נמק.
3. א. ניתן לייצג את מאגר-ימי-הולדת באופן הבא: birth_days = array[1…356] of birthday_list; רשימה של ימי הולדת = birthday_list ב. הוסף-יום-הולדת(P,b) {הפעולה מכניסה את יום ההולדת b למקומו המתאים במאגר P. pos הוא משתנה עזר מטיפוס מצביע לרשימה} 1) עוגן-רשימה 2) הכנס-לרשימה ג. הדפס-ממוין(L) {האלגוריתם מדפיס את הרשימה L ממוינת לפי ימי הולדת. P הוא משתנה עזר מטיפוס מאגר-ימי-הולדת.} 1) עוגן-רשימה ( pos <-- (P 2) עוקב-ברשימה ( pos<-- (L,pos 3) כל עוד לא pos = סוף-רשימה(L) בצע: 3.1) הוסף-יום-הולדת(אחזר-מרשימה(,P,(L,pos) 3.2) עוקב-ברשימה ( pos<-- (L,pos 4) עבור I מ-1 ועד 365 בצע: 4.1) הדפס-ימי-הולדת(P,i). --> pos ([.P [b.day ) (P[b.day],pos,b)
ד. בפעולה שני צעדים בסיסיים. האחד הוא לולאה בשורה (3 ) והוא מתבצע nפעמים (nהוא אורך הרשימה L). הצעד הבסיסי האחר, הוא הדפסה של יום הולדת בודד, בתוך שורה (4.1). יעילותה של הפעולה הדפס-ימי -הולדת(P,i)היא (O(mi כאשר mi הוא מספר ימי ההולדת החלים ביום i .מספר הצעדים הבסיסיים המבוצע במסגרת הלולאה בשורה (4) הוא ( O(n )= O(m1 + m2+m3+ … m356 ולכן יעילותו של האלגוריתם כולו היא ( O(n.