תרגיל בית מספר 1#
Transcription
תרגיל בית מספר 1#
אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 3102 תרגיל בית מספר - 2להגשה עד 8באפריל בשעה 225:: קיראו בעיון את הנחיות העבודה וההגשה המופיעות באתר הקורס ,תחת התיקיה .assignmentsחריגה מההנחיות תגרור ירידת ציון /פסילת התרגיל. הנחיות ספציפיות לתרגיל זה: תשובות לשאלות 1ג' 4 ,3 ,א' ו 4 -ב' יש לממש בקובץ השלד ( )skeleton.pyהמצורף לתרגיל זה .אין לצרף לקובץ ה py -את הקוד ששימש לפתרון יתר השאלות .לא לשכוח לשנות את שם הקובץ למספר ת"ז שלכם לפני ההגשה ,אך להשאיר את הסיומת .py שימו לב שבקובץ השלד יש פונקציה בשם testהמכילה כמה מקרים פשוטים .היעזרו בפונקציה זו כדי לוודא נכונות הפלטים שלכם עבור אותם מקרים .פתרונות שלא עובדים נכון במקרים פשוטים אלו לא יתקבלו. כמובן ,על הקוד שלכם להיות נכון לכל קלט תקין ,ולא רק למקרים שבדוגמאות. כל שאר השאלות יוגשו בקובץ docx ,docאו pdfיחיד. בסה"כ מגישים שני קבצים בלבד .עבור סטודנט שמספר ת"ז שלו הוא 012345678הקבצים שיש להגיש הם ( 012345678.docxאו .docאו ).pdfו.012345678.py - הקפידו לענות על כל מה שנשאלתם ,באופן קולע וברור. עמ' 1מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 3102 שאלה 1 אלגוריתם שמבצע את פעולתו במקום ( )in-place algorithmהוא אלגוריתם שמעתיק בכל רגע נתון רק כמות קבועה מהקלט שלו למשתני עזר (ב"כמות קבועה" הכוונה לכמות שאיננה תלויה כלל בגודל הקלט). בפרט ,אלגוריתם כזה לא מייצר העתק של הקלט שלו ,אלא משנה אותו במידת הצורך. נבחן בהקשר זה את פעולת היפוך סדר האיברים של רשימה נתונה בשם .lst א .האם הפקודה ] lst = lst[ : :-1הופכת את סדר האיברים במקום? הסבירו בקצרה את תשובתכם. ב .האם הפקודה )(( lst.reverseהמתודה reverseשל המחלקה )listהופכת את סדר האיברים במקום? מה מחזירה הפונקציה? הסבירו בקצרה את תשובתכם. טיפ :כדי לענות על סעיפים א' ו -ב' כדאי להשתמש בפונקציה idשל פייתון. ג .הוסיפו לקובץ השלד המצורף מימוש לפונקציה ) reverse(lstשמקבלת רשימה ,והופכת את סדר האיברים שלה ,במקום .הפונקציה תחזיר .Noneאין להשתמש בפונקציות מוכנות של פייתון ,אלא יש לבצע את היפוך הסדר באופן ישיר. דוגמת הרצה: ]>>> lst = [1,2,3 )>>> reverse(lst >>> lst ][3,2,1 ד .האם ניתן לכתוב פונקציה כזו גם עבור היפוך סדר התווים במחרוזת במקום? הסבירו מה יהיו ההבדלים מן הפונקציה שכתבתם בסעיף ג' (אם בכלל) ,או הסבירו מדוע אי אפשר. עמ' 2מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 3102 שאלה 2 שלישיית מספרים טבעיים a < b < cנקראת שלשה פיתגורית אם היא מקיימת את משפט פיתגורס: .a2 + b2 = c2 דוגמה.32 + 42 = 52 : א .מיצאו את כל השלשות הפיתגוריות שמקיימות .a + b + c = 1960 ב .מיצאו לכמה מספרים 0 ≤ m < 1000מתקיים התנאי הבא: קיימת בדיוק שלשה פיתגורית אחת עבורה .a + b + c = m ג .בונוס :מיצאו את כל השלשות הפיתגוריות שמקיימות .a + b + c = 30000000 = 3*107 הערה :אין בתרגיל זה מגבלה ספציפית על זמן הריצה של התוכנית שלכם ,אבל בכל זאת כדאי להשקיע מחשבה על היעילות של הקוד שלכם בטרם תפתרו את סעיף ב' -פתרון לא יעיל עלול לרוץ זמן רב מדיי (ולא להסתיים לפני מועד הגשת התרגיל .)...בסעיף ג' צריך להשקיע אף יותר מחשבה בעניין. הערה נוספת :אל תשתמשו בתכונות של שלשות פיתגוריות שאינכם יודעים להוכיח. שאלה 2 זוהי שאלת המשך לשאלה 5מתרגיל בית .1 בשאלה ההיא נתבקשתם למצוא 12ספרות סמוכות שסכומן מקסימלי במספר נתון .לא נדרשתם לתת דעתכם לעניין היעילות של התוכנית שלכם. כעת ,ברצוננו למצוא סכום מקסימלי של 60,000ספרות סמוכות במספר .5200,000 נסו לפתור את הבעייה הזו תחילה עם הקוד שכתבתם בתרגיל בית .1ייתכן שהקוד שלכם היה יעיל מספיק. אך אם הריצה לא מסתיימת תוך לכל היותר דקה אחת על מחשב סביר (למשל המחשבים בחוות המחשבים בבניין שרייבר) ,תצטרכו לייעל את התוכנית שלכם .נסו לחשוב איפה יש נקודות של חוסר יעילות מבחינת זמן ריצה. הנחיות הגשה :את התשובה המספרית לשאלה (הסכום המקסימלי הנ"ל) הגישו בקובץ ה.doc/docx/pdf - בקובץ השלד ממשו את הקוד המשופר שלכם ,אבל הפעם כפונקציה ,ולא כתוכנית כמו בתרגיל בית .1שם הפונקציה יהיה ) ,sum_digits(n, dוהיא תחזיר את הסכום המקסימלי של dספרות סמוכות במספר .n דוגמת הרצה: )>>> sum_digits(5**36, 12 16 עמ' 3מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 3102 שאלה 4 א .כיתבו פונקציה ) add(A, Bשמקבלת שתי מחרוזות המייצגות מספרים טבעיים בכתיב בינארי, ומחזירה מחרוזת שמייצגת את החיבור שלהם. דוגמת הרצה: )">>> add("1111", "11010 ''101001 להלן המחשה של אלגוריתם החיבור ( A+Bבדומה לחיבור מספרים עשרוניים עם נשא (:))carry )(carried digits 1 1 1 1 )1 1 1 1 (A + )1 1 0 1 0 (B ------------= 1 0 1 0 0 1 ב .כיתבו פונקציה ) mult(A, Bשמקבלת שתי מחרוזות המייצגות מספרים טבעיים בכתיב בינארי, ומחזירה מחרוזת שמייצגת את המכפלה שלהם. דוגמת הרצה: )">>> mult("110", "11 ''10010 להלן המחשה של אלגוריתם ההכפלה ( AxBבדומה למכפלת מספרים עשרוניים): )(A )(B ← Corresponds to a zero in B ← Corresponds to a one in B 1 0 1 × 1 0 1 0 --------0 0 0 + 1 0 1 + 0 0 0 + 1 0 1 --------------= 1 1 0 0 1 0 הנחייה :בסעיפים א' ו -ב' אין להשתמש בהמרות של מספרים מבסיס לבסיס .בפרט ,אין להשתמש בפונקציות intו bin -של פייתון ,בפונקציה convert_baseשראינו בתרגול וכו' .יש לממש את האלגוריתמים בהתאם להמחשות שהובאו ,ישירות באמצעות לולאות. ג .נניח שכל פעולת חיבור או כפל של שני ביטים לוקחת יחידת זמן אחת .נסמן את מספר הביטים של Aב- nושל Bב.m - מהי סיבוכיות הזמן של הפונקציה addושל הפונקציה multכתלות ב n -ו ?m -התייחסו למקרה הגרוע (כלומר ל A -ו B -כנ"ל עבורם יתבצע מספר מקסימלי של פעולות חיבור/כפל של שני ביטים) .תנו תשובתכם כביטוי סדר גודל אסימפטוטי (כלומר ע"י שימוש בסימון )…(.) O עמ' 4מתוך 5 CC BY-NC-SA 3.0 אוניברסיטת תל אביב -בית הספר למדעי המחשב מבוא מורחב למדעי המחשב ,אביב 3102 שאלה : בהינתן טבעי ,nכל טבעי kשקטן ממש מ n-ומחלק את nנקרא מחלק ממש של .n סדרת מחלקים היא סדרת מספרים ,שהראשון שבהם הוא מספר טבעי כלשהו ,וכל איבר שווה לסכום המחלקים ממש של קודמו בסדרה .אם מגיעים ל – 0 -הסדרה מסתיימת (שכן ל 0 -אין מחלקים). למשל ,להלן סדרת מחלקים שמתחילה ב:45 - סדרות מחלקים נחלקות ל 3 -סוגים: .1סדרות שמסתיימות ב( 0 -סדרות סופיות). .2סדרות שלא מגיעות ל 0 -לעולם (אינסופיות) ,שנכנסות למעגל מחזורי כלשהו. .3סדרות שלא מגיעות ל 0 -לעולם (אינסופיות) ,שלא נכנסות למעגל מחזורי כלשהו (סדרות כאלו חייבות להיות בלתי חסומות). ישנן סדרות שלא ידוע לאיזה סוג הן שייכות .למעשה לא ידוע אם בכלל יש סדרות מהסוג השלישי – זוהי שאלה פתוחה במתמטיקה. א .הסבירו בקצרה מדוע יש אינסוף סדרות מהסוג הראשון (רמז :מספרים ראשוניים) ,ומדוע יש סדרות מהסוג השני (רמז :מספרים מושלמים). ב .כמה מספרים בין 1ל 275 -הם התחלה של סדרות מהסוג הראשון? ומהסוג השני? (כל המספרים בתחום זה מתחילים סדרה ששייכת לאחד משני הסוגים הללו .לגבי 272אגב ,לא ידוע כיום לאיזה סוג הוא שייך.)... ג .כמה מספרים בסדרה שמתחילה ב 107 -מתחלקים ב 10 -ללא שארית? למשל ,עבור 45יש מספר אחד כזה (שהוא .)0 לצורך עזרה בבדיקת תקינות :בסדרה שמתחילה ב 131 -יש 30מספרים כאלו. סוף. עמ' 5מתוך 5 CC BY-NC-SA 3.0