נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: יעילות ב תיכנות

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 13 November 2007 בשעה 06:08 | IP רשוּם
ציטוט decimal

בדרך כלל שאני פותר תרגיל מסויים אני מנסה לפתור אותו בדרך הכי יעלה שאני יכול ודרך כלל גם מצליח לפתור את התרגיל בצורה דיי יעילה ו "היגיונית" אבל בעיה שלי היא שאני אף פעם לא יודע אם זה הדרך הכי יעלה כי תמיד יכול להיות שיש דרך עוד יותר יעילה וטובה אז איך אני יכול לדעת אם פתרתי הכי טוב שאפשר או שיש פתרון יותר טוב ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 13 November 2007 בשעה 13:27 | IP רשוּם
ציטוט צחי@

תשובה כללית: תלמד על תורת החישוביות ותורת הסיבוכיות.

אלו ענפים במתמטיקה / מדעי-המחשב שעיקרם ניתוח יעילות של חישובים באמצעות מציאת חסמים לזמן הריצה / זכרון של חישוב מסויים (או תוכנית מסויימת). כמו כן, תורות אלו מתמקדות בחלוקת בעיות למחלקות על בסיס קריטריונים של למשל "כמה זמן דרוש כדי לפתור את הבעיה X ?" או "כמה זכרון דרוש כדי לפתור את הבעיה X ?" או אפילו "האם הבעיה X פתירה ?".

 

 

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 13 November 2007 בשעה 13:39 | IP רשוּם
ציטוט decimal

תודה על התשובה
ועכשיו :
אלה הם תחומים קשים ( נגיד לעומת מתמטיקה תיכונית של 5 יחידות ) ?
והאם אפשר ללמוד אותם לבד או שזה יהיה ממש קשה ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 13 November 2007 בשעה 15:41 | IP רשוּם
ציטוט צחי@

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

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

 

 

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 13 November 2007 בשעה 23:20 | IP רשוּם
ציטוט decimal

מישהו מכיר אתר שאפשר ללמוד ממנו ברמה נמוכה יחסית את הנושאים האלה ?

ובעיקרון שתי שאלות שחשבתי עליהם ואני לא יודע את התשובה :
1) האם מתמטיקה תמיד יותר יעלה מתנאים ?
2) משהו כמו מקרה ספציפי , ניסתי למצוא אלגוריתם לפועלה ערך מוחלט ללא תנאים \ לולאות והדבר הכי טוב שחשבתי עליו זה לעשות את המספר בריבוע ( ואז תמיד לא שלילי ) ואז לעשות לו שורש - האם זה האלגוריתם היעיל ביותר שיש ערך מוחלט ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 13 November 2007 בשעה 23:25 | IP רשוּם
ציטוט shoshan

1) זאת שאלה שמראה שאתה לא מבין על מה הוא דיבר נראה לי...
 
2) לא, זה האלגוריתם הכי לא יעיל שאפשר לחשוב עליו.



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 14 November 2007 בשעה 00:29 | IP רשוּם
ציטוט decimal

כנראה שאני בכלל לא בכיוון :(
1) למה ?
2) מישהו יכול להגיד מהו האלגוריתם הכי יעיל ?
וגם למה האלגוריתם שאני הבאתי הוא פחות יעיל מנגיד תנאי

אם מספר קטן מאפס
 החזר מספר כפול מינוס אחד
החזרת מספר

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


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 14 November 2007 בשעה 11:39 | IP רשוּם
ציטוט צחי@

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

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

קוד:

       {     x       x>=0 אם
f(x) = {
       {    -x          אחרת

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

תחשוב מה היית צריך לעשות אם היית רוצה לכפול למשל 512 * 512 ללא מחשבון ?

היית עושה כפל ארוך, ומתחיל להכפיל 2*2, 1*2, 5*2 ... נניח שכל תת-הכפלה כזאת מוגדרת כפעולה אחת, ואם מספר הספרות במספר הוא n, אז היית מבצע n^2 פעולות רק בשביל לחשב את הריבוע של המספר (קצת יותר אבל לשם הדוגמא נניח שזה ככה). 

המחשב לא עושה קסמים, הוא מחשב כפל די באותה הדרך שאתה היית עושה את זה על נייר, ואומנם כל פעולה של מחשב לוקחת מיליארדית שנייה, אבל נניח שהיית צריך לחשב את זה עבור מיליון מספרים שונים, ולחזור על החישוב הזה 100,000 פעמים - אם אורך ממוצע של מספר הוא 4 ספרות, פתאום זה היה לוקח 16 שניות לחשב.

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

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

מקווה שזה קצת הבהיר את הדברים - זה לא תחליף ללימוד מקיף יותר של התחום אבל זה רק על קצה המזלג...

 

 

 

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 14 November 2007 בשעה 14:06 | IP רשוּם
ציטוט decimal

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


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 15 November 2007 בשעה 02:37 | IP רשוּם
ציטוט decimal

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


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 15 November 2007 בשעה 09:48 | IP רשוּם
ציטוט צחי@

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

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

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

אם אתה רוצה לדעת יותר בנושא, תקרא על P מול NP - זאת אחת השאלות הגדולות שמעסיקות את עולם המדע במאות ה-20-21, שאלה שאולי אין לה מענה.

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

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 15 November 2007 בשעה 14:23 | IP רשוּם
ציטוט decimal

"למעשה יש מחלקה שלמה של בעיות שידוע שיש להן פתרון, אם כי מאוד לא יעיל (זמן ריצה  2 בחזקת n ויותר), ואם זאת, לא ידוע אם קיים להן פתרון שהוא כן יעיל ופולינומיאלי (זמן ריצה n בחזקת c , כאשר c קבוע כלשהו)."
לפי זה אני מבין שאין דבר שיכול להגיד לך אם יש פתרון יותר טוב מהנוכחי ש "עדיין לא נמצא" וזה עונה על השאלה הראשונה שלי :
"בדרך כלל שאני פותר תרגיל מסויים אני מנסה לפתור אותו בדרך הכי יעלה שאני יכול ודרך כלל גם מצליח לפתור את התרגיל בצורה דיי יעילה ו "היגיונית" אבל בעיה שלי היא שאני אף פעם לא יודע אם זה הדרך הכי יעלה כי תמיד יכול להיות שיש דרך עוד יותר יעילה וטובה אז איך אני יכול לדעת אם פתרתי הכי טוב שאפשר או שיש פתרון יותר טוב ?"
לא יודע למה למרות שזה לא היגוני היתי בטוח שיש משהו במתמטיקה או מדעי המחשב שיש לו יכולת כזאת בכול מקרה אם אני צודק במה שכתבתי פה אין צורך להגיב עוד השאלה שלי נענתה
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 15 November 2007 בשעה 15:18 | IP רשוּם
ציטוט צחי@

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

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

 

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 15 November 2007 בשעה 16:50 | IP רשוּם
ציטוט decimal

הדיון הזה נראה לי כמו מבוי סתום : \
בגדול אחרי השמצאת פתרון מסויים מתקיימים שתי הדברים האלה :
1) אין דרך לדעת שהפתרון שלך הוא לא היעיל ביותר וגם אתה לא יודע את הפתרון היעיל ביותר אתה רק יודע על קיומו
2) אתה תדע שיש פתרון יעיל ביותר רק אחרי שתמציא אותו
זה נכון ?
חזרה לתחילת העמוד הצג את כרטיס החבר של decimal חפש הודעות אחרות של decimal
 
צחי@
משתמש חבר
משתמש חבר


הצטרף / הצטרפה: 02 January 2007
מדינה: Israel
משתמש: מנותק/ת
הודעות: 209
נשלח בתאריך: 15 November 2007 בשעה 17:24 | IP רשוּם
ציטוט צחי@

1) לא בהכרח נכון - תקרא את כל הדיון מהתחלה ותראה שזה כבר נדון.

2) אחת הדרכים הטובות לדעת שיש פתרון טוב יותר היא למצוא אותו - אבל זאת לא הדרך היחידה.

חזרה לתחילת העמוד הצג את כרטיס החבר של צחי@ חפש הודעות אחרות של צחי@ בקר בדף הבית של צחי@
 
decimal
משתמש פעיל
משתמש פעיל


הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת
הודעות: 118
נשלח בתאריך: 15 November 2007 בשעה 19:38 | IP רשוּם
ציטוט decimal

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

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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