כותב |
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 13 November 2007 בשעה 06:08 | | IP רשוּם
|
|
|
|
בדרך כלל שאני פותר תרגיל מסויים אני מנסה לפתור אותו בדרך הכי יעלה שאני יכול ודרך כלל גם מצליח לפתור את התרגיל בצורה דיי יעילה ו "היגיונית" אבל בעיה שלי היא שאני אף פעם לא יודע אם זה הדרך הכי יעלה כי תמיד יכול להיות שיש דרך עוד יותר יעילה וטובה אז איך אני יכול לדעת אם פתרתי הכי טוב שאפשר או שיש פתרון יותר טוב ?
|
חזרה לתחילת העמוד |
|
|
צחי@ משתמש חבר
הצטרף / הצטרפה: 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 רשוּם
|
|
|
|
תודה על התשובה ועכשיו : אלה הם תחומים קשים ( נגיד לעומת מתמטיקה תיכונית של 5 יחידות ) ? והאם אפשר ללמוד אותם לבד או שזה יהיה ממש קשה ?
|
חזרה לתחילת העמוד |
|
|
צחי@ משתמש חבר
הצטרף / הצטרפה: 02 January 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 13 November 2007 בשעה 15:41 | | IP רשוּם
|
|
|
|
התחומים הנ"ל נלמדים במהלך תואר אקדמי במדעי-המחשב, ככה שהם ברמה קצת יותר גבוהה ממתמטיקה תיכונית. המתמטיקה עצמה, לטעמי, היא לא מסובכת אבל ישנם מושגים רבים ושימוש בלוגיקה שאינם נלמדים בתיכון ונדרשת עקומת למידה.
כל דבר אפשר ללמוד לבד. יש הרבה אנשים שמשתמשים לעיתים תכופות במושגים מתורת החישוביות/סיבוכיות תוך הבנת הרעיון הכללי ללא ירידה ממשית לפרטים ולהוכחות לוגיות - למשל במציאת חסמים לזמן הריצה של תוכנית - מדברים במושגים של סדרי גודל ( O של ).
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 13 November 2007 בשעה 23:20 | | IP רשוּם
|
|
|
|
מישהו מכיר אתר שאפשר ללמוד ממנו ברמה נמוכה יחסית את הנושאים האלה ?
ובעיקרון שתי שאלות שחשבתי עליהם ואני לא יודע את התשובה : 1) האם מתמטיקה תמיד יותר יעלה מתנאים ? 2) משהו כמו מקרה ספציפי , ניסתי למצוא אלגוריתם לפועלה ערך מוחלט ללא תנאים \ לולאות והדבר הכי טוב שחשבתי עליו זה לעשות את המספר בריבוע ( ואז תמיד לא שלילי ) ואז לעשות לו שורש - האם זה האלגוריתם היעיל ביותר שיש ערך מוחלט ?
|
חזרה לתחילת העמוד |
|
|
shoshan מנהל האתר
הצטרף / הצטרפה: 16 July 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 4637
|
נשלח בתאריך: 13 November 2007 בשעה 23:25 | | IP רשוּם
|
|
|
|
1) זאת שאלה שמראה שאתה לא מבין על מה הוא דיבר נראה לי...
2) לא, זה האלגוריתם הכי לא יעיל שאפשר לחשוב עליו.
__________________ עד מתי רשעים יעלוזו?
עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 14 November 2007 בשעה 00:29 | | IP רשוּם
|
|
|
|
כנראה שאני בכלל לא בכיוון :( 1) למה ? 2) מישהו יכול להגיד מהו האלגוריתם הכי יעיל ? וגם למה האלגוריתם שאני הבאתי הוא פחות יעיל מנגיד תנאי
אם מספר קטן מאפס החזר מספר כפול מינוס אחד החזרת מספר
כי ברור שהתנאי לא תמיד יתקיים ואז יכול לעשות שנעשתה בדיקה "סתם"
|
חזרה לתחילת העמוד |
|
|
צחי@ משתמש חבר
הצטרף / הצטרפה: 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 רשוּם
|
|
|
|
תודה על התשובה התחלה שהזמן שלוקח שארבע הפעולות האלה הוא שווה : שורש , חזקה , בדיקת שליליות של ו מספר החזרת מספר ואז 2 פעולות ם 2 פעולות אז עדיף לא להשתמש בתנאי. אני חושב שהיתי יכול לדעת לבד שזה פחות יעיל בהרבה אם היתי רואה את האלגוריתם של שורש , חזקה ואז היתי רואה שבעצם נעשות הרבה יותר פעולות אבל אני כותב ב C# ושם לא מצאתי דרך לראות אותם. למרות שזה יתרון ענק למישהו שיכול גם לחשב פי כמה דרך אחת יותר יעילה משניה
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 15 November 2007 בשעה 02:37 | | IP רשוּם
|
|
|
|
אוקיי קראתי הרבה בנושא ולפי כול מה שהבנתי אין שום תחום בעולם שיכול להגיד לי אם פתרון מסויים הוא היעיל ביותר שקיים לבעיה מסויימת , אני לא מדבר על מצב שבו פתרתי ב 2 דרכים ואני רוצה לבדוק איזה מהם יותר יעילה אלה נגיד על מצב שבו פתרתי בצורה מסויים ואני בטוח שזה הפתרון היעיל ביותר ואז אני צריך ש "משהו" לי אם זה היעיל ביותר או לא לדוגמה : חיפוש איבר במערך , נגיד ואני עושה חיפוש סדרתי , ואז כדי ליעל את החיפוש אני יכול לצמצם כמה פקודות ואז הוא יהיה יותר יעיל בקצת אבל האם יש משהו שיגיד לי שכול חיפוש סידרתי יעיל ככול שהוא יכול להיות הוא עדיין לא הפתרון היעיל ביותר ? כי כול חיפוש בינרי הוא דרך חשיבה אחרת לגמריי שתמיד תהיה יעילה יותר מחיפוש סדרתי אז איך אני יכול לדעת את זה או שכמו שהבנתי אין תחום שיכול להגיד דבר כזה ?
|
חזרה לתחילת העמוד |
|
|
צחי@ משתמש חבר
הצטרף / הצטרפה: 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 רשוּם
|
|
|
|
"למעשה יש מחלקה שלמה של בעיות שידוע שיש להן פתרון, אם כי מאוד לא יעיל
(זמן ריצה 2 בחזקת n ויותר), ואם זאת, לא ידוע אם קיים להן פתרון שהוא כן
יעיל ופולינומיאלי (זמן ריצה n בחזקת c , כאשר c קבוע כלשהו)." לפי זה אני מבין שאין דבר שיכול להגיד לך אם יש פתרון יותר טוב מהנוכחי ש "עדיין לא נמצא" וזה עונה על השאלה הראשונה שלי : "בדרך כלל שאני פותר תרגיל מסויים אני מנסה לפתור אותו בדרך הכי יעלה שאני
יכול ודרך כלל גם מצליח לפתור את התרגיל בצורה דיי יעילה ו "היגיונית" אבל
בעיה שלי היא שאני אף פעם לא יודע אם זה הדרך הכי יעלה כי תמיד יכול להיות
שיש דרך עוד יותר יעילה וטובה אז איך אני יכול לדעת אם פתרתי הכי טוב
שאפשר או שיש פתרון יותר טוב ?" לא יודע למה למרות שזה לא היגוני היתי בטוח שיש משהו במתמטיקה או מדעי המחשב שיש לו יכולת כזאת בכול מקרה אם אני צודק במה שכתבתי פה אין צורך להגיב עוד השאלה שלי נענתה
|
חזרה לתחילת העמוד |
|
|
צחי@ משתמש חבר
הצטרף / הצטרפה: 02 January 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 15 November 2007 בשעה 15:18 | | IP רשוּם
|
|
|
|
decimal כתב:
לפי זה אני מבין שאין דבר שיכול להגיד לך אם יש פתרון יותר טוב מהנוכחי ש "עדיין לא נמצא". |
|
|
לא הבנת נכון, כל מה שאמרתי זה שיש בעיות מסויימות אשר עבורן לא ניתן לדעת בודאות, אבל יש המון בעיות אחרות שכן ניתן לדעת ואף להוכיח שזמן הריצה הוא אופטימלי. ה"דבר" שיכול להגיד לך אם יש פתרון טוב יותר הוא השכל האנושי.
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 15 November 2007 בשעה 16:50 | | IP רשוּם
|
|
|
|
הדיון הזה נראה לי כמו מבוי סתום : \ בגדול אחרי השמצאת פתרון מסויים מתקיימים שתי הדברים האלה : 1) אין דרך לדעת שהפתרון שלך הוא לא היעיל ביותר וגם אתה לא יודע את הפתרון היעיל ביותר אתה רק יודע על קיומו 2) אתה תדע שיש פתרון יעיל ביותר רק אחרי שתמציא אותו זה נכון ?
|
חזרה לתחילת העמוד |
|
|
צחי@ משתמש חבר
הצטרף / הצטרפה: 02 January 2007 מדינה: Israel
משתמש: מנותק/ת הודעות: 209
|
נשלח בתאריך: 15 November 2007 בשעה 17:24 | | IP רשוּם
|
|
|
|
1) לא בהכרח נכון - תקרא את כל הדיון מהתחלה ותראה שזה כבר נדון.
2) אחת הדרכים הטובות לדעת שיש פתרון טוב יותר היא למצוא אותו - אבל זאת לא הדרך היחידה.
|
חזרה לתחילת העמוד |
|
|
decimal משתמש פעיל
הצטרף / הצטרפה: 08 November 2007
משתמש: מנותק/ת הודעות: 118
|
נשלח בתאריך: 15 November 2007 בשעה 19:38 | | IP רשוּם
|
|
|
|
2) זה מה שמעניין אותי , אמרת שזה לא הדרך היחידה אז איזה עוד דרכים יש ואם הדרכים האלה הם ע"י תורת החישוביות או תורת הסיבוכיות אז כנראה שאני לא הבנתי אותם שקראתי על זה ואני אקרא מחדש זה מה הם הדרכים האחרות ?
|
חזרה לתחילת העמוד |
|
|