פורסם 2005 באוקטובר 2320 שנים אני מתכנת מתחיל וכרגע התחלתי בתור תוכנית ראשונה לכתוב תוכנית שתפתור סודוקו(אווו איזה משחק משעמם)...עכשיו חשוב לי מאוד היעילות בשביל המהירות אך מצד שני זה בא על חשבון הקוד הקריא.לדוגמא: אני רוצה לסרוק אם קיימת אפשרות יחידה בשורה אז אני יכול לייצר פונקצייה אחת שכוללת שלוש פונקציות של בדיקת שורה טור וריבוע ואז הקוד קריא או לעשות את הכל בפונקצייה אחת ובתוך כל הלולאות לעשות כל מיני קומבינציות כך שזה יהיה מאוד יעיל אך ספק כמה זמן יקח לבן אדם מן השורה לקרוא את הקוד.אז מה אתם אומרים להשאר במסגרת של פונקצייה בת עשר שורות לכל היותר וחלוקה לתתי משימות(כמובן כמה שיותר יעיל) או לוותר על זה ולדאוג ליעילות.אני יחסית בשלבי סיום של התוכנה ושאני מסתכל לאחור אפשר לוותר על כמה סריקות ולעשות כמה דברים בתוך לולאה.אני מניח שבהמשך בקטע הקימפול יהיו כמה טעויות אך נראה לי שזה יעבוד....
פורסם 2005 באוקטובר 2320 שנים תמיד עדיף קוד כמה שיותר קריא, עדיף שתתרגל לזה כבר מעכשיו, כך יהיה לך הרבה יותר נוח כשתעבוד עם פרוייקטים גדולים בעתיד.חוץ מזה, הפיצול של פונקציה אחת למספר תתי פונקציות לא יוריד לך מהביצועים, תאמין לי, עוד כמה פרמטרים במחסנית זה כסף קטן למעבד.לעומת זאת עם יצוץ לך רעיון עוד שבוע, עדיף שתוכל להסתכל על הקוד ולהבין מהר מה עשית, מאשר לשבור את הראש ולקוות שהשינוי החדש לא הורס כלום.
פורסם 2005 באוקטובר 2320 שנים למה אתה חושב שזה או זה או זה?פיצול של פונקציה אחת למספר תתי פונקציות לא יוריד לך מהביצועים^^^בדיוק
פורסם 2005 באוקטובר 2320 שנים מחבר אני יסביר את העניין בתוספת הסבר.מדובר במערך תלת מימדי עכשיו אני יכול בתוך הלולאה הפנימית(מתוך השלושה) להתחייחס לערך שלה בתור טור בשביל סריקת השורה ובשביל שורה בשביל סריקת הטור ולמעשה אני יכתוב את יתר הפקודות באמצע וחסכתי לי די הרבה וזה יהיה פי 2 יעיל או שאני יכול לעשות שתי פונקציות לשורה ולטור ואז אני צריך לבצע את הסריקה פעמיים אך זה יהיה קריא בצורה יותר טובה.
פורסם 2005 באוקטובר 2320 שנים תמיד טוב לכתוב קוד כמה שיותר קריא, אמנם זה עשוי לבוא על חשבון של יעילות, אבל לא נראה לי שתרגיש את זה.אם אתה רוצה, אז אחרי שתכתוב את התוכנית עם קוד קריא, תכתוב תוכנית נוספת עם קוד יעיל ככל האפשר ותבדוק אם יש הבדל מורגש בביצועים.
פורסם 2005 באוקטובר 2320 שנים אם זה רק פי 2 [glow=red,2,300](או פי כל מספר אחר)[/glow] אז לא מחשיבים. אתה מתכוון לרמת יעילות של פי 2, או לזמן ביצוע ארוך פי 2? :-\ מה זה אמור להביע "פי כל מספר אחר"? מתי כן מחשיבים? :
פורסם 2005 באוקטובר 2420 שנים אם זה רק פי 2(או פי כל מספר אחר) אז לא מחשיביםאני לא יודע מי זה "הם" שמחשיבים או לא מחשיבים, אבל אני יודע שלי מאוד אכפת אם משחק שאני מריץ יעבוד ב- 20 פריימים לשניה או 40 פריימים.לאופטימיזציה יש שני חוקים:1. Don't do it2. Don't do it YETכלומר, אל תנסה לשפר ביצועים לפני שהתוכנית עובדת.בדר"כ פיצול של לולאות לפונקציות שונות לא ממש עוזר לקריאות כי זה מפזר לך את האלגוריתם (אפשר להתווכח על זה, אבל כשמדובר באלגוריתם פשוט יחסית ובטיפוס נתונים של מערך, לא נראה לי שתשיג קריאות יותר טובה אם תפצל אותה)קריאה לפונקציה רגילה (בייחוד אם היא ויראטואלית) מספר גדול של פעמים (למשל עבור כל צעד בלולאה) יהיה מורגש. עבור פונקציות של שורה או שתיים, רוב הזמן הולך על הקריאה לפונקציה והחזרה ממנה.למרות זאת קריאה לפונקציה inline לא עולה כלום (כי זו לא באמת קריאה לפונקציה).
פורסם 2005 באוקטובר 2420 שנים אני מתכוון לסדרי זמן ריצה.n=o(n)2n=o(n)זה הכל.כך שאם תריץ כמה לולאות אחת אחרי השניה לא יהייה הבדל משמעותי בביצועים.לפי דעתי הפיצול הוא כדאי.
פורסם 2005 באוקטובר 2420 שנים מה לעשות, בעולם האמיתי סדר גודל זמן ריצה זה לא הכל.ותכנית שייקח לה שעתיים לרוץ תהיה הרבה פחות טובה מתכנית שיקח לה רק שעה.
פורסם 2005 באוקטובר 2520 שנים מחבר פה הקריאות פוגע בהכרח ביעילות כי יש לי שלושה לולאות(9*9*9) אחת בתוך השנייה והפונקצייה חייבת לעבוד על מחזור שלם של הלולאה הפנימית ולכן אם אני משתמש בשני פונקציות מספר הלולאות יהיה (9*9*(9*2)) הדרך היחידה שלי להשאר על 9*9*9 הוא פשוט לבצע את זה בלי פונקציות.......התוכנית הזאת אני מניח תבצע עשרות אלפי מחזורים של לולאה(סריקת כל השורות הטורים לכל האפשרויות וכל דרכי הפתרון השונות ועד הרקורסיה בסוף לניחוש במידה ודרכי הפתרון לא מהוות פתרון זה המוןןןןןןןןןן לולאות).אפשר להניח לפני כמה זמן בערך יקח לתוכנית הזאת לרוץ?????
פורסם 2005 באוקטובר 2520 שנים אני מתכוון לסדרי זמן ריצה.n=o(n)2n=o(n)זה הכל.כך שאם תריץ כמה לולאות אחת אחרי השניה לא יהייה הבדל משמעותי בביצועים.לפי דעתי הפיצול הוא כדאי.כל זה טוב ויפה בתאוריהאבל במציאות שיש לך פתרון שרץ n ופתרון שרץ 1000n עדיף תמיד את ה-n.אם ל-n לוקח 10 שניות לרוץ תחשוב כמה זמן לוקח ל-1000n.בכל מקרה כל פיתרון שהוא לא יעשה יהיה O(1) כי מרחב הבעיה סופי (n=3).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.