לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 28-07-2009, 15:19
צלמית המשתמש של netaneldj
  netaneldj netaneldj אינו מחובר  
 
חבר מתאריך: 01.05.06
הודעות: 7,861
Facebook profile
צריך עזרה באופטימיזציה של חידה מס' 15 של פרוייקט אוילר

החידה:
ציטוט:
Starting in the top left corner of a 2
[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://projecteuler.net/images/symbol_times.gif]
2 grid, there are 6 routes (without backtracking) to the bottom right corner.


[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://projecteuler.net/project/images/p_015.gif]
How many routes are there through a 20
[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין: http://projecteuler.net/images/symbol_times.gif]
20 grid?



http://projecteuler.net/index.php?s...=problems&id=15

כתבתי פיתרון רקורסיבי לחידה,(brute force) הבעייה שהוא עובד בערך עד size = 13 ואח"כ הקוד טוען יותר מדי זמן...

הקוד:
קוד:
const long size = 2; static void Main(string[] args) { Console.WriteLine(grid(0, 0)); Console.Read(); } static long grid(long x, long y) { if (x == size && y == size) return 1; if (x == size) return grid(x, y + 1); if (y == size) return grid(x + 1, y); return grid(x + 1, y) + grid(x, y + 1); }


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

יש למישהו רעיונות איך לשפר את הקוד?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 28-07-2009, 18:08
  Dark Knight Dark Knight אינו מחובר  
 
חבר מתאריך: 30.07.05
הודעות: 949
שלח הודעה דרך ICQ אל Dark Knight
בתגובה להודעה מספר 1 שנכתבה על ידי netaneldj שמתחילה ב "צריך עזרה באופטימיזציה של חידה מס' 15 של פרוייקט אוילר"

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

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

אם יש לך חזרה אחת בדיוק אז מתוך 21 המקומות האפשריים לעשות בהם את הצעד הכפול למטה אתה צריך לבחור אחד - משמע יש לך בדיוק 21 מסלולים כאלו. [tex] \left(^{21}_1\right)[/tex] שזה בחר מקום 1 מבין 21.
עכשיו, לכל מקום כזה, אתה גם צריך לבחור 2 מקומות בהם לא תוכל לעשות כעת צעד למטה מבין 20 המקומות הנותרים, כלומר [tex] \left(^{20}_2\right) =\frac{20!}{18! \cdot 2!}[/tex]

אם יש לך 2 חזרות בדיוק אז יש לך 2 אפשרויות: יש מקום אחד בו יורדים 3 פעמים או שיש 2 מקומות בהם יורדים פעמיים.
לכן יש לך 21 מקומות אפשריים בהם יורדים 3 פעמים במקום מסויים, ולכל אחד מהם יש [tex] \left(^{20}_3\right) =\frac{20!}{17! \cdot 3!}[/tex] אפשרויות למקומות בהם לא יורדים כלל.
ויש לך [tex] \left(^{21}_2\right) =\frac{21!}{19! \cdot 2!}[/tex] אפשורויות לבחור 2 מקומות מתוך 21 בהם יורדים פעמיים ו-[tex] \left(^{19}_3\right) =\frac{19!}{16! \cdot 3!}[/tex] אפשרויות לבחור 3 מקומות בהם לא יורדים כלל מתוך 19 המקומות הנותרים.

וכו... וכו'... וכו' עד למצב בו יש לך 21 אפשרויות לבחור מקום בו יורדים כל הדרך למטה.

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

קישורים בוויקיפדיה: http://en.wikipedia.org/wiki/Catalan_number - באנגלית וכולל את הדוגמא הספציפית שלך
http://he.wikipedia.org/wiki/%D7%9E...%98%D7%9C%D7%9F - בעברית אבל בלי הדוגמא

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


נערך לאחרונה ע"י Dark Knight בתאריך 28-07-2009 בשעה 18:26. סיבה: שלחתי במקום לעשות הצגה...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 28-07-2009, 18:59
  Dark Knight Dark Knight אינו מחובר  
 
חבר מתאריך: 30.07.05
הודעות: 949
שלח הודעה דרך ICQ אל Dark Knight
בתגובה להודעה מספר 3 שנכתבה על ידי netaneldj שמתחילה ב "תודה על התגובה"

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 18:07

הדף נוצר ב 0.05 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2025 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר