חידת הגיון שנשאלת בראיונות עבודה .. .גורד שחקים ובו 100 קומו
לפני 11 שנים
ע"י: המלאך
אתה עומד למרגלות גורד שחקים ובו 100 קומות. ברשותך 2 כדורי בדולח. עליך למצוא את מספר הקומה הנמוכה ביותר שאם זורקים ממנה כדור בדולח, הוא נשבר. עליך לעשות זאת במספר הזריקות המינימלי האפשרי.
הפתרון שמופיע באתר לא ברור!.
עזרה בבקשה.
פתרון: השיטה היא לעשות קפיצות גדולות ואם כדור אחד נשבר אז לבצע קפיצות של 1 בין השלבים עם הכדור השני, בכדי שלא נעלה במס' הזריקות שאנו מבצעים, כל קפיצה גדולה תהיה קטנה ב- 1 מהקפיצה הקודמת. סכום מס' השלבים שמורידים בקפיצה הגדולה צריך להיות בסביבות ה-100 ולכן הקפיצה הראשונה תהיה של 14 שלבים. מס' הזריקות המינימלי הוא 1
לפני שבועיים
ע"י: אפי
ישבתי לחשב, זה פשוט פונקצית מינימום של מספר הקבוצות שיהיו + גודל כל קבוצה.
אם נחלק לN קבוצות בכל קבוצה יהיו 100/N אפשרויות.
במקרה הגרוע נעבור על N-1 + (100/N) איברים.
עכשיו צריך לגזור את זה ולהשוות ל0
0 = 1 + ( N^2) / 200-
שזה שורש 200 = 14.1421356237
בהצלחה
לפני 11 שנים
ע"י: 1_אורח_כללי
אם באיטרציה i נשבר הכדור צריך לבדוק x-i קומות וכבר בצענו i קפיצות אזי מספר הבדיקות המקס' הינו X-i+i = X
X+(X-1)+(X-2)+... ~100 {מס' הגורמים הינו X }
x^2-(x+1)*x/2 ~100
x^2-x-200 = 0
x1,2 = (1 +/- ~28)/2
ערך שלם תחתון (חיובי) = 14
לפני 11 שנים
ע"י: 1_אורח_כללי
רגע חברים,
אז מה לגבי האופציה שהועלתה ש14 ניסיונות זה ה worst case?
האלגוריתם שלו היה נראה יותר מחוכם ותקין ללא עוררין.
לפני 11 שנים
ע"י: 1_אורח_כללי
תבנו פונקציה שמתארת את המתרחש(מספר הקומות).
תגזרו אותה ותמצאו את המינימום וזהו.
אני מאשש ש 2-19 זה האופטימלי.
לפני 11 שנים
ע"י: 1_אורח_כללי
חחח, יש רק שני כדורי בדולח....לא שמתי לב
במקרה הזה זה באמת 19
לפני 11 שנים
ע"י: 1_אורח_כללי
2-19?
19 זה אומר לזרוק מקומה 100 עד 10 בקפיצות של 10
+9 עבור קפיצות של 1?
יותר מידי...
הבחור שאמר חיפוש בינארי צודק, קוראים לזה גם אריה במדבר,
כאשר אם תחלק את טווח החיפוש שלך ב-2 כל הזמן אתה תקבל את התוצאה האופטימלית במינימום נסיונות
מאחר ויש לך 100 קומות מספר הניסיונות שווה כאמור ללוגריתם טבעי של 2 של מספר הקומות
ובעיגול מעלה זה 7.
לפני 11 שנים
ע"י: 1_אורח_כללי
אף אחת מהתשובות אינן נכונות, ואינכם מכירים את האלגוריתם כשורה.
המספר שנדרש כדי לגלות את מספר הקומה, הינו בין 2-19.
מקרה הטוב ביותר: 2, הגרוע ביותר 19.
וזה נכון לגבי כל אחת מהקומות שעלולה לשבור את הכדורים.
לפני 11 שנים
ע"י: 1_אורח_כללי
לא הבנת את השאלה, תקרא אותה שוב..
לפני 11 שנים
ע"י: 1_אורח_כללי
חיפוש בינארי - מתחיל מ50 (אמצע בין 1 ל-100)
אם נשבר אז קומה 25 (אמצע בין 1 ל50) ואם לא אז קומה 75 (אמצע בין 50 ל100)
וכך הלאה... אם יש לך n קומות, אז המהירות למצוא את הקומה הנמוכה ביותר היא log n במקרה שלנו זה יקח לנו עד 7 פעמים... (לוג בבסיס 2)
ל-100 קומות זה נשמע לא טוב 7 ניסיונות... אבל ל5000 קומות אז זה דורש 13 ניסיונות...ולמליון קומות זה דורש 20 ניסיונות...
לפני 11 שנים
ע"י: 1_אורח_כללי
בשלב הזה אנחנו כבר יודעים שהצעדים צריכים להיות סדרה חשבונית יורדת עם צעד בגודל 1 כדי שבכל מקרה מספר הצעדים יהיה קבוע. נניח שהמספר הזה הוא x. אז ברור שמתחילים מקומה x, אם לא נשבר עוברים לקומה 2x-1 וכו'.
אנחנו יודעים שסכום הצעדים צריך להסתכם ב-100 (כיוון שמדובר בשלמים המינימלי שגדול מ-100). נניח שיש לנו n איברים בסדרה הזו אבל נקבל סכום סדרה חשבונית -
nx-n(n+1)/2=100
אבל מה זה ה-n הזה? כדי לקבל את ה-x המינ-מקס נרצה שה-n הזה יהיה שווה ל-x (ככה הסדרה תגמר בצעד של 1 והגענו ל-x המינימלי שיכול ל"פרוס" את הבניין).
ועכשיו מדובר בפתרון משוואה ריבועית ועיגול כלפי מעלה.
לפני 11 שנים
ע"י: 1_אורח_כללי
כיון שבמידה והכדור שביר כבר בקומה הראשונה ,
מקסימום הניסיונות יהיה 14.
לפני 11 שנים
ע"י: המלאך
תודה רבה על השקעה אך לצערי הרב לא חידשתי לי כלום השאלה הגדולה למה דווקא 14 ?!
לפני 11 שנים
ע"י: איחטיאנדר
תני לי לפשט לך את הפתרון.
הפתרון הטריויאלי: להתחיל לזרוק מלמטה למעלה עד שישבר -> זאת הקומה
בואי נתחכם קצת: נזרוק באמצע, אם ישבר, אז נרוץ אז הכדור השני למעלה ואם לא נרוץ למטה
בואי נתחכם עוד קצת: נזרוק באמצע, אם ישבר, אז נרוץ אם הכדור השני למעלה ואם לא נזרוק באמצע החלק התחתון (כלומר בקומה ה-25) ונמשיך באופן דומה.
מה שהפתרון אומר, שהדרך הנכונה ביותר הוא לזרוק בהתחלה בקומה ה-14, אחרי זה בקומה ה14+13, אחרי זה בקומה ה14+13+12 וכ''ו.
מקווה שזה יותר ברור.
בהצלחה