יאללה חברים מרים תחרות על התרגיל "פטנט, או ברונו הפיל?!"

ערב טוב לכולם, מכיוון שהתרגיל “פטנט, או ברונו הפיל?!” מבחינת זמן הרצה הוא לא פשוט חשבתי להוסיף לתרגיך טיפה פלפל, ולהרים תחרות של כמות מן ההרצה שייצאה לכם עד התשובה הסופית, לכן תייעלו אותו כמה שרק ניתן ותפרסמו תוצאה :money_mouth_face:
כמובן לשים לב שאת התשובה הסופית תשמרו איתכם :zipper_mouth_face:

לי ייצא 4:07 :trophy:

אני אוהב את הרוח המשחקית לעניין, אבל כפארטי־פופר מקצועי כבר פינצ’רתי מסיבה כזו:

(לא בקטע רע, אבל חשוב שגם אנשים עם מחשב יותר חלש לא יתבאסו לנו)

אני עם מחשב נייד מקרטע כאן :sweat_smile:
האם סגנון הכתיבה הוא לא הגורם העיקרי כאן?

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

— 0.2683281898498535 seconds —

אבל רק אומר שיש לי נייד שהוא סוג של מפלצת זכרון.
בשביל הפרספקטיבה:
מעצב אינטל i9
32gb ddr4
2t ssd

לייק 1

מדהים ההפרשים שיש בין מחשב למחשב. את החישוב שלי עשיתי על נייד… (22.5 שניות) ועדיין פער משמעותי…

לייק 1

אני אוכל סרטים איך לוקח לך זמן חישוב של 0.2 שניות
עכשיו הצלחתי להוריד את זמן הריצה שלי ל 3.8 בממוצע
אצלי המעבד i5ו
4GB ram
וכונן 6 gb פנוי :see_no_evil:
ועל פי מה שים הזכיר הקפיצה הטכנולוגית די משמעותית

לייק 1

4 שניות?
יצא לי 0.3990020751953125 seconds

לא הבנתי איך אתם יודעים כמה זמן רץ הקוד? תלמדו אותי גם!

ראי כאן

יצא לי 0.68 :wink:
(התרגיל הזה ממש הוציא לי את המיץ מבחינת חשיבה על מה יותר יעיל. הרג אותי)

2 לייקים

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

לי יצא:
114 ms ± 8.09 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

לייק 1

צריך להוסיף משהו נוסף, כדי לקבל את הפלט שלו?

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

לייק 1

ניסיתי את זה והרצתי כמה פעמים… ובכל הרצה קיבלתי מספר אחר על בדיוק אותו קוד :flushed:

שימי לב ל־standard deviation שהוא נותן.
גם ב־time את תקבלי תוצאה שונה לכל קוד, פשוט פה הוא אומר מה סטיית־התקן :slight_smile:

אוף, הוא טוען שהקוד שלי לא כזה יעיל :face_with_thermometer:
501ms ± 35.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

זה לא אומר שהוא לא יעיל, זה אומר שבהינתן החומרה, בהינתן מה שרץ לי ולך על המחשב כרגע, ובהינתן תצורת הסביבה והמערכות שעליהן אני ואת עובדים, לי לקח 114 מילישניות להריץ קוד (עם סטיית תקן של 8 מילישניות בערך) ולך 501 מילישניות (עם סטיית תקן של 35.5 מילישניות). :slight_smile:
כמו שאמרתי, בשבועות האחרונים לקורס נלמד איך להעריך יעילות של קוד באמת, וזה שונה לחלוטין מאשר מה שעשינו פה.

2 לייקים

לי ייצא — 0.21188020706176758 seconds —
המחשב שלי בן 4 וחצי עוד שניה …

3 לייקים

— 1.893251657485962 seconds —
מחשב ישן

לייק 1