קוד יעיל או קריא?????? - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

קוד יעיל או קריא??????


THE-MASTER

Recommended Posts

אני מתכנת מתחיל וכרגע התחלתי בתור תוכנית ראשונה לכתוב תוכנית שתפתור סודוקו(אווו איזה משחק משעמם)...

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

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

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

אני יחסית בשלבי סיום של התוכנה ושאני מסתכל לאחור אפשר לוותר על כמה סריקות ולעשות כמה דברים בתוך לולאה.

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

קישור לתוכן
שתף באתרים אחרים

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

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

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

לא הורס כלום.

קישור לתוכן
שתף באתרים אחרים

אני יסביר את העניין בתוספת הסבר.

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

קישור לתוכן
שתף באתרים אחרים

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

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

קישור לתוכן
שתף באתרים אחרים

אם זה רק פי 2 [glow=red,2,300](או פי כל מספר אחר)[/glow] אז לא מחשיבים.

:screwy:

אתה מתכוון לרמת יעילות של פי 2, או לזמן ביצוע ארוך פי 2? :-\

מה זה אמור להביע "פי כל מספר אחר"? :nixweiss:

מתי כן מחשיבים? ::)

קישור לתוכן
שתף באתרים אחרים

אם זה רק פי 2(או פי כל מספר אחר) אז לא מחשיבים

אני לא יודע מי זה "הם" שמחשיבים או לא מחשיבים, אבל אני יודע שלי מאוד אכפת אם משחק שאני מריץ יעבוד ב- 20 פריימים לשניה או 40 פריימים.

לאופטימיזציה יש שני חוקים:

1. Don't do it

2. Don't do it YET

כלומר, אל תנסה לשפר ביצועים לפני שהתוכנית עובדת.

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

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

למרות זאת קריאה לפונקציה inline לא עולה כלום (כי זו לא באמת קריאה לפונקציה).

קישור לתוכן
שתף באתרים אחרים

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

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

אפשר להניח לפני כמה זמן בערך יקח לתוכנית הזאת לרוץ?????

קישור לתוכן
שתף באתרים אחרים

אני מתכוון לסדרי זמן ריצה.

n=o(n)

2n=o(n)

זה הכל.

כך שאם תריץ כמה לולאות אחת אחרי השניה לא יהייה הבדל משמעותי בביצועים.

לפי דעתי הפיצול הוא כדאי.

כל זה טוב ויפה בתאוריה

אבל במציאות שיש לך פתרון שרץ n ופתרון שרץ 1000n עדיף תמיד את ה-n.

אם ל-n לוקח 10 שניות לרוץ תחשוב כמה זמן לוקח ל-1000n.

בכל מקרה כל פיתרון שהוא לא יעשה יהיה O(1) כי מרחב הבעיה סופי (n=3).

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...