לדלג לתוכן

מבני נתונים ואלגוריתמים - מחברת קורס/שיעורי בית 2/שאלות

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי

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


שימו לב:

*נא להגיש רק את שאלות 1-5.
  • שאר השאלות הן לצורך חזרה למבחן בלבד. אין צורך להגיש את התשובות להן.


הפונקציה נתונה על ידי הנוסחה. .

אנא הוכח .


רמז

נסה להוכיח זאת באותו אופן בו הוכחנו . כלומר:

  1. הוכח בנפרד חסמי ו.
  2. ערוך מניפולציות על איבר הטור הכללי ועל גבולות הסיכום כך שיתקבל איבר טור שאינו תלוי בגבולות הסיכום (ולכן ניתן יהיה להוציאו מחוץ לסכום).

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

  1. .‏
  2. .‏
  3. , כאשר הוא קבוע כלשהו.‏

בנוסחת הנסיגה ,‏ מתארת את זמן הריצה של אלגוריתם כלשהו. אנא פתור את הנוסחה.

מתארת את זמן הריצה של אלגוריתם כלשהו. אנא הוכח שאם אז .


כדאי לדעת:

נצטרך את פתרונה של נוסחת נסיגה זו בבעיית "דג הסלמון".

להלן פסוודו-קוד לפונקציה Foo, המקבלת מספר שלם לא-שלילי ומחזירה מספר שלם:

Foo(n)
1	if n == 0
2		return 0

3	return n % 2 + Foo( n / 2 )

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


A[1, ..., n] הוא מערך של מספרים שונים זה מזה. נאמר ש הוא היפוך אם אך A[i] > A[j].

  1. במערך [2, 3, 8, 6, 1] יש 5 היפוכים. אנא רשום אותם.
  2. אנא מצא אלגוריתם יעיל למציאת מספר ההיפוכים במערך.




דוגמה:

נניח שיזינו לאלגוריתם שתכתוב את המערך בדוגמה של הסעיף הראשון. הפלט שהאלגוריתם שלך אמור להוציא הוא המספר 5.



רמז

תוכל אולי לשנות את מיון מיזוג. הוסף משתנים גלובליים ופונקציות עזר כרצונך, אם הדבר יעזור לך.


הפונקציה Alg מוגדרת כך:

Alg(A, i, j)
1	if j <= i + 1
2		return
	
3	q = Sqrt(j - i + 1) # q = ⌊(j - i + 1)^(1/2)⌋
4	for k in [0, ..., q - 1]
5		Alg(A, i + k * q, i + (k + 1) * (q - 1))

6	Proc(A, i, j)

היא משתמשת בשתי הפונקציות הבאות:

  1. הפונקציה Sqrt(n) מחזירה את השורש הריבועי של מעוגל כלפי מטה. היא פועלת בזמן .
  2. הפונקציה Proc היא פונקציה כלשהי המקיימת שזמן ריצת Proc(A, i, j) הוא .

מהו זמן הריצה של Alg(A, 1, n)?


נתונה מטריצה בת עמודות ו שורות. כל כניסה במטריצה היא 0 או 1, ולכן כל שורה מתארת מספר בינרי בעל ביטים. השורות אינן מסודרות בסדר ידוע, אך ידוע שאין שתי שורות זהות. מכאן נובע שחסרה שורה להשלמת כל המספרים האפשריים בעלי ביטים.



דוגמה:

עבור , ייתכן שהשורה הראשונה היא המערך [0, 1] (המתאר בבינרית את המספר 1), השורה השנייה היא המערך [1, 1] (המתאר בבינרית את המספר 3), והשורה השלישית היא המערך [0, 0] (המתאר בבינרית את המספר 0). השורה החסרה היא המערך [1, 0] (המתאר בבינרית את המספר 2).


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


רמז

נסה להפוך את הבעיה לבעיה קטנה בחצי (בערך) בזמן לינארי.

אנא הוכחה את המשפט הבא:



משפט:

פתרון
הוא
.

מתארת את זמן הריצה של אלגוריתם כלשהו, והיא פתרונה של נוסחת הנסיגה .‏ בנוסחה זו, מספר שלם גדול ממש מ1, מספר גדול ממש מ1, ו היא פונקציה המקיימת , עבור שלם גדול ממש מ1. אנא הוכח .