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

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

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

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

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

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

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

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

חישוב פשוט? (צילום: MorgueFile)



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

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

ניתן להמחיש זאת על ידי דוגמה: אלגוריתם פולינומי מסויים רץ על קלט בגודל 10 במשך אלפית שניה, בזמן שעמיתו, האלגוריתם האקספוננציאלי, רץ במשך מאית שניה על אותו קלט. לא הבדל גדול. לעומת זאת, על קלט בגודל 50 האלגוריתם הפולינומי ירוץ במשך חמש אלפיות שניה, בעוד עמיתו האקספוננציאלי ידרוש חמש שניות. הבדל קצת יותר בולט (כאשר תוכנה רצה במשך חמש שניות, ניתן כבר "להרגיש" את הזמן שנדרש לריצה), אך עדיין לא משמעותי. לעומת זאת, אם נגדיל את הקלט עוד קצת, לגודל 100, האלגוריתם הפולינומי ירוץ במשך מאית שניה, בעוד עמיתו האקספוננציאלי ירוץ 30 שנה. אם נגדיל את הקלט לגודל 1000 האלגוריתם הפולינומי ירוץ עשירית שניה, בעוד עמיתו האקספוננציאלי ירוץ במשך פרק זמן שכדי לתארו נזדקק למספר עם עשרות אפסים – פרק זמן גדול בהרבה מגילו של היקום.

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

את אוסף כל הבעיות שניתן לפתור באמצעות מכונת טיורינג בזמן ריצה פולינומי נהוג לסמן באות P, מלשון Polynomial. זהו ה-P שמופיע בשאלת "P=NP", אליה נגיע עוד מעט.

קדחת השחת

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

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

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


אני עוד אמצא את המחט הזו...



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

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

נעבור לדוגמה יותר מציאותית – פירוק לגורמים. נביט במספר 50: הוא זוגי, כלומר ניתן לחלק אותו ב-‏2 ולקבל 25. את 25 אפשר לחלק ב-‏5 ולקבל 5. לעומת זאת את 5 אי אפשר לחלק יותר באף מספר ששונה מ-‏5 ומ-‏1, כלומר, הוא מספר ראשוני. גם 2 הוא ראשוני. לכן גילינו שאפשר לכתוב את 50 בתור המכפלה 2*5*5. כל המספרים שמשתתפים במכפלה הזו הם ראשוניים, ולכן אי אפשר להרחיב את המכפלה עוד יותר. המכפלה הזו היא הפירוק לגורמים ראשוניים של 50. כידוע, לכל מספר טבעי יש פירוק יחיד לגורמים ראשוניים.

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

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

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

הולכים אל הלא נודע

כל הדיון עד כה היה מבוא לשאלה, שהיא אחת השאלות הפתוחות המרכזיות כיום במדעי המחשב התיאורטיים, ואפילו זכתה להיכלל בין "7 בעיות המילניום" של מכון קליי למתמטיקה: שאלת P=NP.

השוויון שמופיע בשם השאלה הוא שוויון בין אוספי הבעיות שב-P וב-NP (ולכן התשובה אינה "כן, אם N=1 או P=0"). אנחנו יודעים שכל בעיה ב-P שייכת ל-NP (אם קל לפתור משהו, קל לבדוק אם הוא ניתן לפתרון או לא), ולכן השאלה הקשה היא בכיוון ההפוך – האם כל בעיה ששייכת ל-NP גם שייכת ל-P? האם מספיק לדעת שקל לבדוק את חוקיותו של פתרון לבעיה, כדי שמובטח יהיה שניתן לפתור אותה בקלות?

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

חשוב להדגיש שמדובר בשוויון בין אוספי הבעיות – כלומר, פירוש השוויון הוא כי כל בעיה שניתן לוודא את פתרונה ביעילות, ניתנת לפיתרון באופן יעיל. גם אם P שונה מ-NP, אין פירוש הדבר כי כל בעיה ב-NP לא ניתנת לפתרון יעיל; ישנן דוגמאות של בעיות שהיו ב-NP ולא היה ברור אם הן ב-P, ולבסוף התגלה שהן ב-P. הדוגמה הידועה ביותר היא כנראה זו של בדיקת ראשוניות: במשך שנים רבות לא היה ידוע אם ניתן לבדוק בזמן סביר האם מספר נתון הוא ראשוני (כלומר, לא היה ידוע אם הבעיה ב-P), אך הייתה ידועה הוכחה כי קיימת דרך לוודא בזמן סביר, בהינתן מידע מסויים, שמספר הוא ראשוני – כלומר, היה ידוע כי הבעיה ב-NP (ניתן גם לוודא בקלות בזמן סביר שמספר אינו ראשוני אם מציגים מספר שבו הוא מתחלק; בעיות שניתן לוודא בקלות את אי־נכונותן שייכות למחלקת co-NP). האלגוריתם המקובל לביצוע בדיקת ראשוניות היה הסתברותי – הוא עבד כמעט תמיד, אך הייתה קיימת הסתברות נמוכה מאוד שהוא יטעה, ויגיד על מספר פריק שהוא ראשוני. רק בשנת 2002 התגלה אלגוריתם שעובד בזמן פולינומי ואינו הסתברותי. בפועל, זמן הריצה שלו גדול יותר מזה של האלגוריתם ההסתברותי, ולכן למרות הגילוי ממשיכים להשתמש באלגוריתם ההסתברותי (קיימים אלגוריתמים יעילים נוספים, שחלקם מתבסס על השערות בתורת המספרים שטרם הוכחה נכונותן).

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

אלגוריתים להכנת תה

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

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

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

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

הבעיות ה-NP-שלמות הן בעיות ששייכות ל-NP ומאופיינות בתכונה המעניינת לפיה כל בעיה אחרת ב-NP ניתנת לרדוקציה אליהן. כלומר, אם פתרנו בעיה שהיא NP-שלמה בצורה יעילה, נוכל לפתור כל בעיה ב-NP בצורה יעילה על ידי ביצוע רדוקציה אל הבעיה ה-NP-שלמה שפתרנו. בפרט, הדבר יוכיח מייד כי P=NP. לכן זוכות הבעיות ה-NP שלמות ל"הדרת כבוד" מיוחדת – מצד אחד, אם P=NP, ייתכן מאוד שהדרך להוכיח זאת תעבור דרך פתרון יעיל של אחת מהן. מצד שני, אם P אינו שווה ל-NP, פירוש הדבר הוא שאין סיכוי שאף בעיה שזכתה לתואר "NP-שלמה" ניתנת לפתרון יעיל (ולכן ניתן להסתמך על אי־היכולת לפתור אותה באפליקציות של הצפנה, למשל).

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

ההוכחה של קוק ולוין היא מסובכת יחסית, אך לאחר שהוכח ש-SAT היא NP-שלמה, נפתחה הדרך להוכיח על אלפי בעיות אחרות שגם הן NP-שלמות, מכיוון שאם יש לנו בעיה שידוע שהיא NP-שלמה, והצלחנו לבצע ממנה רדוקציה לבעיה אחרת, הרי שגם הבעיה האחרת היא NP-שלמה. כבר בשנת 1973 פרסם ריצ'ארד קארפ מאמר ובו הציג 23 בעיות NP-שלמות, וכיום ידועות אלפי בעיות שכאלו.

טרם הסברנו מדוע המחלקה NP נקראת כך. ה-P שבשמה בא מהמילה "פולינומי", בדומה למחלקה P, אולם מה ה-N מייצג? לשם כך נציג דרך אחרת לחשוב על הבעיות שב-NP על ידי הכנסה למשחק של מכונות טיורינג מסוג חדש – מכונות אי־דטרמיניסטיות. על כך – במאמר הבא.
קישורים
המאמר הקודם - "מה לא יכול המחשב לעשות", מאת גדי אלכסנדרוביץ'
מגדלי האנוי
שיטת ההצפנה RSA
7 בעיות המילניום של מכון קליי
המשפט האחרון של פרמה
פרסום תגובה למאמר

פרסומים אחרונים במדור "מדע"


הצג את כל התגובות | הסתר את כל התגובות

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

או אולי

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

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

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

1 זו אפילו האטימולוגיה של המלה.
בלדה לנאיבי 468535
המממ, אכן. לא חשבתי על זה בכלל.
בלדה לנאיבי 468574
נא להסביר את (1)!
בלדה לנאיבי 468577
''מיון'' נולד מהמילה ''מין''. יענו, מיון היה במקור חלוקת איברים לתת-קבוצות לפי מינם.
בלדה לנאיבי 468579
ומה ההבדל בין זה לבין המובן הרגיל של מיון?
בלדה לנאיבי 468593
זה (חלוקה על-פי מינים) המובן ה"רגיל" של מיון. המובן השונה הוא זה של מדעי-המחשב – סידור לפי סדר כלשהו (למשל, לקסיקוגרפי).

שימוש במשמעות רגילה: למיין את הקלפים לזוגיים ואי-זוגיים.
שימוש במשמעות ממ"ח: למיין את הקלפים בסדר עולה.
בלדה לנאיבי 468604
תודה:)
בלדה לנאיבי 472274
לדעתי מדובר בטעות תרגום שמישהו עשה אי שם בשנות הששים, ומאז אנו תקועים עם מושגים עבריים לא מדוייקים.
המילים "SORT" או "ORDER" הן הן שהיו צריכות להיות מתורגמות ל"סידור" (אגב: סידור בשני מובניו - גם כסדור של פרטים לפי גודלם, וגם סידור במובן של "לסדר את העניינים": sort things out) - בעוד ש"מיון" היא המילה שהיתה צריכה להיות התרגום ל- "filtering" או "selecting" מעולם המחשבים.
בלדה לנאיבי 473373
sort באנגלית זה מין/סוג/מחלקה.
to sort זה לארגן לפי מין/סוג/מחלקה. התרגום למיון הוא דווקא מצויין.
המילה order במדעי המחשב אכן מתורגמת למילה סדר (למיטב ידיעתי).
אלגוריתמי מיון נאיביים 468426
באופן כללי, אומרים על אלגוריתם שהוא "נאיבי" אם הוא "לא מתוחכם", כלומר, הוא פותר את הבעיה בצורה הכי פשוטה שאפשר לחשוב עליה.
במקרה של אלגוריתמי מיון, אלגוריתם נאיבי לדוגמא הוא האלגוריתם שהרבה אנשים משתמשים בו למיון הקלפים שלהם במשחקי קלפים: בכל פעם, תפוס אחד מהקלפים והעבר אותו למקומו הנכון, והמשך כך עד שהקלפים ממוינים.
כדי למיין n קלפים, האלגוריתם הזה יבצע בערך n בריבוע צעדים. הסיבה שעבור כל קלף, צריך לבצע בערך n צעדים כדי להעביר למצוא את מקומו הנכון, ואת זה צריך לבצע עבור n קלפים.
שתי הערות 468456
"שבע וחצי מיליוני שנים" - יותר עדיף "שבעה".

אם P אינו שווה ל-NP, פירוש הדבר הוא שאין סיכוי שאף בעיה שזכתה לתואר "NP-שלמה" ניתנת לפתרון יעיל (ולכן ניתן להסתמך על אי־היכולת לפתור אותה באפליקציות של הצפנה, למשל).

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

(אפשר לנטפק עוד יותר אם רוצים ולומר ש-NP הוא רק בעיות הכרעה ומה הקשר בינו לבין חישובי הפונקציות של RSA ודיפי הלמן ושות')
שתי הערות 468501
מגיע לי עונש חמור על אי הדיוק שלי (נשרה לי המילה "שלמה" בנקודה קריטית). אני אנסה לנסח שוב את ניטפוקי:

מאמרך טוען ש: אם P אינו שווה ל-NP, פירוש הדבר הוא שאין סיכוי שאף בעיה שזכתה לתואר "NP-שלמה" ניתנת לפתרון יעיל (ולכן ניתן להסתמך על אי־היכולת לפתור אותה באפליקציות של הצפנה, למשל)

אך לעניות דעתי (הענייה עד מאוד) אין אפליקציות הצפנה המבוססות על בעיות NP-שלמות (למרות שמחפשים).
שתי הערות 468510
אכן (עד כמה שידוע לי, כיוון מבטיח אחד הוא הצפנה שמבוססת על ה-Shortest Vector Problem ב-Lattices; זו בעיה NP-קשה לקירוב ברמת דיוק מסויימת, אבל בינתיים לא מכירים הצפנה שפיצוח שלה ידרוש דיוק שכזה אלא פחות מכך).

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

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

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

ועוד הבהרה לתגובה שלי שמעלייך: המשפט האחרון שלי (על חוסר הצלחה לייצר הצפנה בטוחה) מתייחס ל- Subset-Sum בלבד. יש הרבה הצפנות מבוססות Lattice שנחשבות בטוחות.
שתי הערות 469088
(1) קימות סכמות הצפנה (סימטריות) המבוססות על הקושי של subset-sum שלא נשברו. ראה למשל:
יחד עם זאת, הסכימה הנ"ל מבוססת על הקושי של הבעיה בטווח של פרמטרים בהם היא אינה ידועה להיות NP-שלמה.

(2) ביסוס קריפטוגרפיה על NP-שלמות היא אחת הבעיות החשובות ביותר בתיאוריה של קריפטוגרפיה.
שתי הערות 469104
נקודה 2 - בהחלט (השתמע אחרת מתגובתי?). כתבתי שהפרדת P/NP לא תביא מיידית לביסוס קריפטוגרפיה על NP שלמות. ניתן לשער אפילו ששתי הבעיות (הפרדת P/NP וביסוס הצפנה על NPC) הן "בלתי תלויות" במובן מסוים (אבל אי אפשר לדעת).

מלבד זאת, מספר תוצאות שליליות (למשל http://portal.acm.org/citation.cfm?id=1132516.113261...) מצביעות על כך שפונקציה חד כיוונית המבוססת על NP-שלמות צריכה לקיים כמה תנאים מאוד מיוחדים.
שתי הערות 468512
האם קיים פתרון בסיבוכיות ידועה עבור אחת (ומכאן כל) הבעיות הNP-שלמות ?
שתי הערות 468514
בוודאי; למשל, עבור SAT (שהשאלה בה היא "האם פסוק לוגי בתחשיב הפסוקים הוא ספיק?") פתרון פשוט הוא "בדוק את כל ההשמות בזו אחר זו; אם אחת סיפקה את הפסוק, ענה "כן", אחרת ענה "לא"".

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

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

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

בפרט, אולי משהו שהיום היה בלתי אפשרי ביותר מחר יהיה פתיר, אבל משהו דומה לו, שהוא רק ''טיפה'' יותר מסובך, עדיין יהיה בלתי פתיר, וכן הלאה.
מגדלי האנוי 468474
אז מה מצפה לנו בערך במאמר הבא?
מגדלי האנוי 468477
אין לי מושג. רוצה להציע משהו?
מגדלי האנוי 468478
עוד שאלה:
אם קיים מאגר של מספרים ראשוניים וגורמיהם, שמהירות הגישה שלו קצרה למדי. נניח שבכל הכנסה של גורם ראשוני, מהירות הגישה לנתונים היא פחות ממספר שניות, כך שכל פעם שניגשים למאגר מספר השניות שצריך להמתין לקבלת תשובה הוא נמוך, אז אפשר לשבור את ה-RSA כי אין צורך לחשב אלא רק לעשות פעולת קלט-פלט בסיסית. מה דעתך?
מגדלי האנוי 468479
ב-RSA בימינו (בפעם האחרונה שבדקתי) עובדים עם מספרים בני 2048 סיביות. אז נניח 1024 סיביות למספר ראשוני (כי המספרים של RSA הם מכפלה של שני ראשוניים). זה נותן לנו מספר של 300 ספרות בערך. אין לי מושג כמה ראשוניים בני 300 ספרות יש, אבל עד כמה שהבנתי אפשר להעריך אותם (בעזרת "משפט המספרים הראשוניים") ולקבל שבערך אחד ל-‏700 מספרים בתחום הזה יהיה ראשוני (יותר במדוייק - אחד ל-ln גודל המספרים בתחום יהיה ראשוני). אם נתעסק רק במספרים שהם בערך בני 300 ספרות (כלומר, נוריד מהם את כל המספרים שהם בני 299 ספרות) יוצא שאנחנו מדברים על קבוצה של משהו כמו 9 כפול 10 בחזקת 299 מספרים. תחלק את זה ב-‏700 ותקבל שעדיין יש, ובכן, *המון* מספרים ראשוניים בני 300 ספרות בערך. כמה המון? יותר מכפי שכל האטומים ביקום יוכלו לאחסן גם אם כל אטום משמש לאיחסון של זיליארד ראשוניים.

עכשיו מתבקש לבוא מתמטיקאי ולהצביע על כל הטעויות ב"ניתוח" שלי (אבל נראה לי שהמסקנה הסופית נכונה).
מגדלי האנוי 468481
אתה מתכוון לכך שכל המספרים הפריקים מחושבים במהירות גבוהה בגלל התקדמות המחשבים, וכתוצאה מכך מספרים בעלי מספר סיביות רבות יותר מופיעים בחישוב. השאלה הבאה שלי היא: האם ניתן להחזיק הרבה קשרי תקשורת בין מחשבים, כי ככל שמספר הסיביות גדול כך יש גבול לכמות קשרי תקשורת בין מחשבים. כיצד ארגון כמו צבא יכול להתמודד עם דבר כזה? אולי באלגוריתם של CSMA/CD או משהו כזה?
מגדלי האנוי 468482
אין לי מושג מה זה CSMA/CD, אבל אני לא בטוח שהבנתי מה הבעיה. 2048 סיביות זה 256 בייטים; אלו "גרושים" מבחינת תקשורת ומקום אכסון בימינו. גם אם תכפיל את זה פי אלף, תקבל גודל אפסי (ותגדיל את הבטיחות בהרבה יותר מאשר פי אלף), כך שהגודל הוא לא הבעיה.

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

ובכן, אם המספר שאנו רוצים לפרק הוא בן 1024 סיביות, אז שני המספרים הראשוניים הם בני 512 סיביות. כמה מספרים ראשוניים בני 512 סיביות יש?

בערך 2 בחזקת 256 חלקי 200. שזה בערך 2 בחזקת 248 (אני הולך לקראתך). זה המון. 2 בחזקת 40 זה טרה, אז מה שיש פה זה טרה של טרה של טרה של טרה של טרה של טרהבייט של מידע.

אי אפשר להחזיק מאגר כזה גדול. טזה רק מאגר של הגורמים הראשוניים! אם תרצה להחזיק מאגר של מכפלות של גורמים ראשוניים, זה ייקח לך בריבוע.
בקיצור, זה בלתי אפשרי. וגם אם תצליח, מאגר למספרים של 2048 סיביות, שהוא לא קשה וקיים כיום, ידרושה ממך לעשות פי 2 בחזקת 1024 עבודה. שזה, עוד פעם, המון.
מגדלי האנוי 468480
אגב, השאלה לא מנוסחת הכי טוב - אין למספרים ראשוניים גורמים פרט להם עצמם ול-‏1. אני מניח שהכוונה הייתה למספרים שהם מכפלת שני ראשוניים (וכאלו יש הרבה יותר מאשר ראשוניים).
מגדלי האנוי 468530
אותך לקנטור.
לא פייר! אנחנו מדברים כאן על תחום סופי! 468536
468517
עד כמה מותר לי לשחק עם החוקים שמגדירים בעיה ?

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

אני מניח שעצם היות הבעיה דו-שלבית (ולכן "מלאכותית" במובן מסויים) תצרום, שכן האפשרות לוודא את נכונות הפתרון היא חד פעמית, אבל האם יש סט של חוקים המגדיר מה מותר ואסור בהגדרת בעיה ?
468527
מדידת הסיבוכיות היא בד''כ על פי המקרה הגרוע ביותר מבין אלו שהאלגוריתם אמור לפעול עליהם. כלומר, אם אתה יודע תמיד איפה הדיסקית, בוודאי שהסיבוכיות של כל העניין טריוויאלי - וגם הבעיה טריוויאלית. אם לעומת זאת הדיסקית יכולה להיות בכל מקום והאלגוריתם לא יודע איזה, אז לצורך בדיקת המקרה הגרוע ביותר אפשר להניח שיש ''יריב ערמומי'' שרואה את הפתרון שלך, ושם דיסקית במקום שיגרום הכי הרבה ''נזק''.
468550
אז לא מחשיבים את Quicksort כאלגוריתם שפועל ב nlonn יותר?
468556
לא החשיבו אותו כך אף פעם, כשמדברים על המקרה הגרוע. לכן לעתים קרובות מלמדים אותו בד בבד עם ניתוחי סיבוכיות על פי המקרה הממוצע.
468557
רק במקרה הממוצע (או אם משתמשים באלגוריתם ליניארי למציאת חציון כדי למצוא את הפיבוט).
468563
כמובן. הבעיה היא לא בP כי אין לאלגוריתם דטרמיניסטי דרך לפתור אותה בזמן פולינומי (נובע מההוכחה על האנוי), אבל בהינתן הפתרון, וידוא שלו (רק במהלך הראשון) כן נעשה בזמן פולינומי, לכן היא בNP, מה שהיה מפריך את P=NP אם הבעיה היתה תקפה.
השאלה שלי היא למה בדיוק הבעיה לא תקפה ?
468576
אני לא בטוח מה הכוונה ב"לא תקפה". על כל פנים, שים לב שיש כמה הבדלים מהותיים בינה לבין בעיות חישוביות "רגילות" - בפרט, זו בעיה של חיפוש, לא של תשובת "כן/לא", אבל בעיקר (וזה ההבדל המהותי) - היא מבוססת על קלט *חלקי*, שיש בו מידע מוסתר - בעצם, מעין "קופסה שחורה" שצריך להתמודד איתו. הכוונה היא שיכולים להיות שני קלטים שנראים זהה למכונה, ובכל זאת "מתנהגים" שונה (על סמך מהי הדיסקית המסומנת). נראה לי שכאן נמצא ההבדל המרכזי.
468581
"בעיה" היא פשוט פונקציה בינארית במשתנה אחד. יש לה קלט שהוא מחרוזת בינארית כלשהי ולכל קלט יש פלט מתאים (במקרה שלנו הפלט יכול להיות "1" או "0"). אפשר לחשוב על זה כטבלת אמת אינסופית שמתאימה ערך לוגי לכל מחרוזת. פתרון של הבעיה הוא פשוט תוכנה (או "מכונת טיורינג") שמחשבת את הפונקציה הזו.

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

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

אגב, באופן שקול אפשר להגדיר בעיה כתת-קבוצה של קבוצת המחרוזות (תת-הקבוצה המכילה את כל המחרוזות שהפלט עליהן הוא "1"). במקרה זה, תפקיד המכונה שלך לבדוק האם הקלט שייך לתת-הקבוצה או לא.
468591
תודה לך ולגדי.
הסבה לפונקציה בינארית היא טריוויאלית (האם קיימת דיסקית אדומה ?), לגבי היות הקלט סמוי, מותר לי להשתמש בקלט כדי למפות לתחום בשדה המספרים ? למשל בהינתן קלט A, האם קיים פתרון למשוואה דיופונטית מסויימת* בטווח המספרים עד e^A? בהינתן הפתרונות ניתן לבדוק זאת בזמן סביר (כלומר הבעיה בNP) אבל הוכח שאין נוסחה למציאת הפתרון למשוואה (וגם לא ניתן להוכיח שאין לה פתרון). גם אם קיים אלגוריתם למציאת הפתרון שמאפשר לעבור רק על שבריר מהמספרים, ניתן להגדיל את התחום כך שמספר המספרים עליהם יש לעבור יגדל מהר מספיק כדי שלא יהיה פתרון פולינומי.

נ.ב. כשאני חורג לתחום הטרחנות הכפייתית אנא הודיעו לי ואני אעבור לדיון המתאים :)

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

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

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

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

3. גם אם אי אפשר להוכיח שאין לבעיה פתרון, זה לא אומר שאי אפשר להראות שאין לה פתרון בתחום מוגבל (למעשה בטוח שאפשר, השאלה בכמה זמן).

עדיין לא הבנתי מה הדוגמא שלך אמורה להראות, בעיה ב- NP שאינה ב- P? אם כן, שים לב שדי קשה להוכיח שבעיה (כריעה) כלשהי אינה ב- P.
468609
גם אתה וגם גדי מצאתם חורים בטענה, שנבעו בין היתר מהסתמכות על מקור מפוקפק בשם ויקיפדיה העברית, שם נכתב "לחלק מהמשוואות הדיופנטיות, לא קיימת דרך ישירה למציאת הפתרונות, חוץ מבדיקת כל האפשרויות...", אני מניח שמשפט זה לא הוכח כראוי ? אם אכן נדרש מעבר על כל הפתרונות, בלי קשר לקושי לבדוק פתרון יחיד, כמות הפתרונות מוציאה את הבעיה מתחום הפולינומי.
דווקא 1 לא נראה לי כמכשול, כי אם אני מרשה מספרים עד e^A, מספר הספרות יגיע עד ~ln(e^A)~A ולכן הכפלה וחיבור של מספר כזה של סיביות יהיה פולינומי בA.

דווקא להראות שהבעיה אינה בP נדמה לי שהצלחתי (אם קיים אלגוריתם חיפוש פתרונות ביעילות f(n), אני מגדיל את הטווח לF(n) כשf(F(n)=e^A)), הבעיה שאז וידוא הפתרון (כפי שציין גדי) אינו פולינומי.
468610
אני חושב שהם מתכוונים שלא ידועה דרך אחרת למציאת הפתרונות ולא שלא יכולה להתקיים כזו.

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

לגבי הטענה האחרונה שלך, מי אמר שכדי לבדוק אם יש פתרון בתחום (סופי) מסוים צריך "אלגוריתם חיפוש פתרונות"? יכול להיות שיש שיטה הרבה יותר פשוטה שאף אחד עוד לא גילה. בכל מקרה ברגע שאתה מפסיק להיות פולינומי באורך הקלט כבר לא ברור אם הבעיה ב- NP.
468612
הקלט הוא A, המרחב בו מחפשים פתרונות גדול יותר, אבל זה לא קשור לקלט אם הבנתי נכון. וידוא הפתרון הוא אכן פולינומי בA, כי המספר המקסימלי שתאלץ לבדוק הוא e^A, עליו תאלץ לבצע פעולות כפל וחיבור. מספר הסיביות במספר פרופורציונלי לA ולכן פעולות כמו כפל וחיבור יהיו פולינומיות בA.

אם יש לך אלגוריתם שמוצא פתרון (אם יש) עבור תחום קטן מn בלי הגבלה על גודלו של n ובזמן שלא תלוי בn, אז אתה יכול להשאיף את n לאינסוף ולדעת האם יש או אין פתרון למשוואה, בסתירה למה שבר הוכח.
468618
אני אדם פשוט, וגם ריבוי האלמונים לא עוזר לי - בהנחה שאתה מי שהתחיל את הדיון הזה, תוכל לכתוב הודעה מסודרת שבה אתה מסביר, מההתחלה ועד הסוף, מה בדיוק אתה מנסה להוכיח כאן?
468622
ההודעות האחרונות היו סתם טרחנות בנוגע לנקודת הכשל. לא הצלחתי להוכיח דבר, לכן אחסוך את זמנך.
468623
טרחנות זו בטח לא, והגישה שלך דווקא סיקרנה אותי.
468746
הרעיון היה לנצל את העובדה שמספר בן A סיביות נמצא בטווח מספרים בן שתים בחזקת A סיביות. כלומר אם תהיה לי שאלה שאפשר לוודא את הנכונות שלה בזמן פולינומי(NP), אבל אין דרך למצא את הפתרון שלה (כמובן הכל בשלמים, או לכל הפחות בקבוצה לא צפופה, אם כי גם כאן בטח יש הסתייגויות שאני לא מכיר), אני אוכל באמצעות הקלט להגדיר טווח מספרים גדול מספיק כדי שזמן מציאת הפתרון יהיה אקספוננציאלי(לא בP). הידע שלי במתמטיקה הוא סימלי לכל היותר, לכן לא היו לי יותר מדי בעיות לבחור מהן. עבור משוואות דיופונטיות ידעתי שיש משוואות שלא ידוע האם יש להן פתרון. אם היתה הוכחה שחיפוש הפתרון באמת מצריך מעבר כל כל המספרים בטווח, יכול להיות שההוכחה היתה עובדת. לרגע גם טעיתי לחשוב שאם החיפוש (של הפתרון) הוא ביעילות כל שהיא (שכמובן חייבת להיות תלויה בn, המספר המקסימלי בטווח שמחפשים בו), אני אוכל לבנות פונקציה שתרחיב את הטווח כך שזמן החיפוש עדיין יהיה אקספוננציאלי. אני באמת יכול לעשות את זה, אבל אז הפתרון גדל כל כך שאני כבר לא יכול לוודא את נכונותו בזמן פולינומי בA.
468748
הגישה שלך בכלל לא מופרכת. בפרט, היא פחות או יותר הבסיס לקריפטוגרפיה המודרנית; למשל, בעיית הפירוק לגורמים, שהיא ‏1 מה שעומד מאחורי RSA סובלת מקושי שכזה. הרעיון הוא שאפשר לייצג די בקלות מספרים גדולים, בני מאות ספרות (כי צריך רק מאות ביטים בשביל זה), וגם די קל לעבוד איתם - חיבור וכפל, למשל, הם פולינומיים במספר הביטים, וגם העלאה בחזקה מודולו משהו היא פולינומית במספר הביטים אם משתמשים באלגוריתם פשוט אך לא נאיבי; אבל פירוק לגורמים נאיבי דורש בדיקה של כל המספרים הקטנים ממה שרוצים לפרק ‏2 וכאלו יש במספר שהוא אקספוננציאלי במספר הספרות. כמובן, כבר ידועים אלגוריתמיים יותר מתוחכמים לפירוק לגורמים, אבל גם הם עדיין אקספוננציאליים, אם אין לך מחשב קוואנטי פועל בהישג יד.

------------
1 לא בדיוק; אם פותרים פירוק לגורמים הלך על RSA, אבל אולי אפשר לחסל את RSA בלי לפתור את בעיית הפירוק לגורמים.

2 טוב, "עד השורש" הידוע.
לישראלים שלום 468708
בתחום הזה (תאוריה של מדעי המחשב) יש לישראל ייצוג מאוד מכובד‏1, במיוחד בהשוואה להישגים שלנו בענפים מתמטיים אחרים.

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

______
1 רשימת הזוכים בפרס גדל (כ-‏30% ישראלים):
רשימת המאמרים בשתי הועידות הגדולות של התחום (לכרבע עד שליש מהמאמרים יש מחבר ישראלי):
לישראלים שלום 468738
מי זה בדיוק "אנחנו"? מה זה בדיוק "יותר מדי"?
לישראלים שלום 468783
אנחנו - ישראל, או האקדמיה הישראלית (כן, יש כזה דבר שנקרא אנחנו, אבל מכיוון שאתה מתעקש להוציא את עצמך מהכלל, אני אמנע מזה בהמשך).

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

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

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

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

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

פתרונות אפשריים: הקמת מסלולים רב תחומיים, איתור מצטיינים בשלבים מוקדמים של התואר הראשון וטיפוחם לקראת קריירה אקדמית.
יש נטייה *בארץ*? 468931
לבחור בתואר ראשון שייתן מקצוע זאת החלטה, אפעס, די הגיונית (במיוחד בהתחשב במצב המשרות באקדמיה, אבל בלי כל קשר).
יש נטייה *בארץ*? 468941
הגיונית בסביבה חסרת הגיון.
יש נטייה *בארץ*? 468953
הייתי אומר ''תואר ראשון שייתן גם מקצוע''.
סטודנט הבוחר בתחום מדעי המחשב, מאפשר לעצמו התפתחות הן בצד המקצועי, והן בצד האקדמי - מה גם שהתחום האקדמי הוא די חדש בראי ההיסטוריה, ולהערכתי יש בו יותר מקום לפיתוחים וגילויים חדשים.
לישראלים שלום 471080
I'm an Israeli in this field that is currently living abroad. The quality of Israelis in this field is very high.
I can think of some possible reasons (I'll try to see below), but the question sounds really strange to me.

If a scientific field is doing well, the question should be how do we copy this to other fields, and not how do we make it do less well...

Generally, I think that the reasons that Israelis do relatively well in theoretical computer science are some mixture of:

1. As people said, many smart Israelis do their first degree in computer science and not say mathematics or physics. The reason is the job prospects. This is not unique to Israel - in the U.S. many smart people study law or business because it pays more than being a programmer or engineer.

2. When a good student then continues to do a Ph.D, they are naturally attracted to good professors. Therefore, if there are good Israeli professors in theory of CS then the good students will tend to study this as well.

I think generally a small country can't be strong everywhere, so it's better to be strong in some areas, rather than being average everywhere. But in any case probably any attempt to "fix" this "problem"" will result in good people not going to Ph.D or quitting it or taking jobs abroad, rather than other areas becoming better.

That's not to say that with some effort it's not possible to make Israel stronger in some other areas. But the way to do it is not to make us worse in theoretical computer science. In fact it's the opposite - excellence attracts excellence.

אגב אי אפשר למיין לnLOGn 468731
שימו לב למשהוא משעשע,
הדרך הכי מהירה למיין היא הדרך הנאיבית!

הסיבה לזה היא שאי אפשר לחפש ברשימה ממוינת במהירות של LOGn

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

זהו... סתם רציתי שתדעו שכל מה שלמדתם על מחשבים לא תקף למכונות טיורינג :-)
[כאתגר אתם מוזמנים לוודא שהאלגוריתם מיון מיזוג לוקח N בריבוע במכונת טיורינג...]
468733
[צ] "זהו... סתם רציתי שתדעו שכל מה שלמדתם על מחשבים לא תקף למכונות טיורינג" [/צ]

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

קח כתרגיל הביתה להוכיח שבמכונת טיורינג מרובת סרטים (נגיד 3) כשהאיברים למיון שייכים לאלף-בית של המכונה אכן אפשר למיין בזמן ריצה nlogn.
אגב אי אפשר למיין לnLOGn 468921
טוב בסדר אז השוואות :-)

(ואני לא מצליח להבין איך אתה מקבל את הLOG N גם אם 3 סרטים (וזה לא בגלל שאתה טועה זה כי בגלל שאני לא חכם מספיק))
אגב אי אפשר למיין לnLOGn 468924
אם שלושה סרטים לא תקבל לוג, עם אולי כן.
NP שלמה + פתרון לינארי 468772
אז ככה,
כבר שנים שאני מסתובב עם בעיה שלמה ב NP שיש לי בשבילה פתרון לינארי- אפילו לא חזקה של n.
שתי בעיות:
1) להראות שהבעיה שלמה ב NP.
2) להראות שהפתרון נכון תמיד.

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

כנראה שהבעיה אינה שלמה ב NP או שכוחי דל.

את השלב השני נעבור אחרי הצלחות בשלב הראשון.

מי שרוצה להתמודד עם הבעיה מוזמן לפנות אליי. אני בשמחה אשתחרר מהעול הזה, לכאן או לכאן.
NP שלמה + פתרון לינארי 468796
כמו שאני מבין את זה, רדוקציה *ל*-SAT מבעיה שיש לה פתרון ליניארי לא תראה שום דבר. מה שאתה צריך להראות הוא שיש רדוקציה *מ*-SAT *ל*בעיה הנ"ל. אז או שאני מבולבל לרגע, או שאתה מבזבז את זמנך לגמרי כבר כמה שנים.
NP שלמה + פתרון לינארי 468828
כן, גם אני התעכבתי רגע כשכתבתי את התגובה ושיניתי מ'מ' ל'ל'.
בו נתבונן בזה כך:
נסמן את הבעיה שלי ב X ואת האלגוריתם שלי ב P. ובתור בעיית NP ניקח את SAT ואלגוריתם שפותר SAT ב S.
עכשיו, ברור שקלט ל X ניתן להריץ על P וקלט ל SAT ניתן להריץ על S. אם נהפוך את הקלט של X ל קלט ל SAT הרי שהראנו ש X טובה לפחות כמו SAT. לא מועיל בהרבה. אבל, אם נראה שאת הקלט של SAT ניתן להפוך לקלט ל X אזי נריץ את P עם הקלט המקורי של SAT, נקבל תשובה בזמן לינארי ולמעשה הפכנו את SAT ללינארית.
לסיכום: יש לעשות רדוקציה מ SAT ל X על-מנת להראות ש P=NP, בלי סימן שאלה.

אנא תקנו אותי אם הצלחתי לבלבל את עצמי שוב.

בכל מקרה. הבעיה עדיין פתוחה: האם הבעיה שיש בידי, כולל הפתרון הלינארי טובים? האם X שלי ב NP או לא? והאם P שלי אכן פותר את כל המקרים. SIMPLEX הוא אלגוריתם שנראה טוב אבל יש קלטים שבהם הוא "נופל". האם גם P כזו? זאת ועוד בפתיל התגובות להלן...
NP שלמה + פתרון לינארי 468833
מצטער, אני מאוד לא אוהב לקרוא טקסטים שהם פחות מברורים לגמרי. אם אתה מעוניין בדעתי, אעדיף למסור לך אותה בצורת הסבר מחדש של הנושא, בלי לנסות לפענח - איתך הסליחה - את מה שכתבת.

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

כלומר, יוצא שאם את בעית SAT ניתן לפתור בזמן פולינומי, אז כל בעיה ב-NP ניתנת לפתירה בזמן פולינומי, ע"פ התהליך הנ"ל (אותו לא תיארתי במלואו. אמרתי שידוע שאפשר לבצע המרה כזאת לכל בעיה ב-NP, אבל לא אמרתי איך).

חשוב לשים כאן לב שהבעיה שלך עשויה להיות הרבה יותר פשוטה מהבעיה שאתה מוסר לו הלאה. לדוגמה, אתה יכול להתמודד עם הבעיה המאוד פשוטה של "האם המספר שאני עומד מולו כרגע הוא המספר 31, או כל מספר אחר?" במקרה המנוון הזה, אתה יכול לפתור בקלות את הבעיה, ואז להעביר הלאה, לבחור שפותר את SAT, במידה וקיבלת את המספר 31, את הפסוק "א' או ב"', ובמידה וקיבלת מספר אחר, את הפסוק "א' או לא א"'. התשובה שלו לראשון תהיה "כן", ולשני "לא", אבל אתה לא תלמד מכך שום דבר חדש.

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

אגב, חשוב לזכור שהרדוקציה מ-SAT לבעיה שלך צריכה להיות ניתנת לחישוב בזמן פולינומי. רדוקציה לא פולינומית מ-SAT יש לכל דבר שבעולם (כמעט).
NP שלמה + פתרון לינארי 468905
אפשר דוגמא (לרדוקציה לא פולינומית מSAT או מבעיה NP-שלמה אחרת לבעיה פולינומית)?
NP שלמה + פתרון לינארי 468907
בטח. למשל, הבעיה של "האם x הוא 1?" כש-x הוא בתחום 0 או 1.

הרדוקציה היא כזו: בהינתן פסוק בתחשיב הפסוקים, בדוק (בזמן אקספוננציאלי, בצורה הנאיבית) אם הוא ספיק. אם כן, העתק אותו ל-‏1. אם לא, העתק אותו ל-‏0.

מה קיבלנו? שפסוק הוא ספיק אם ורק אם הוא מועתק ל-x שעליו האלגוריתם שפותר את הבעיה הפשוטה עונה "כן".
NP שלמה + פתרון לינארי 468930
ועוד דבר,
את החלק של רדוקציה מ SAT לבעית סידור ההזמנות לא הצלחתי להראות בכלל. כלומר אין לי שום אלגוריתם שהופך את SAT לבעית סידור ההזמנות. כך שבוודאי שהוא לא פולינומי.
יש לכם משהו?
NP שלמה + פתרון לינארי 468933
זו הפעם הראשונה שבה אני שומע אותך אומר משהו על "סידור הזמנות", אז עדיין לא ברור על מה אתה מדבר.

בכל אופן, הצעד הראשון לפני שמתקלים את P=NP הוא לבדוק שניתן לבצע רדוקציה פולינומית מ-SAT (או בעיה NP-שלמה אחרת) אל הבעיה שיש לך ביד . אם אין לך משהו כזה, אין לך בעצם כלום (כלומר, יש לך בעיה שאתה יודע או לא יודע לפתור, אבל אין לה קשר ממשי לשאלת P=NP).
NP שלמה + פתרון לינארי 468939
אני כתבתי תאור ארוך של בעיית סידור ההזמנות, חשבתי שתראה את התגובה ההיא לפני זאת ולכן כבר התיחסתי אליה כאל בעיה שאתה מכיר... תיכף אני אתאר אותה שוב. משום מה היא לא עלתה למערכת (תגיד, צריך ללחוץ על "אישור"? :-))

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

להלן (שוב) תיאור הבעיה:

נתון צי רכבים N. לכל רכב בצי יש מספר תכונות המאפיינות אותו: מספר מקומות, סוג הילוכים, רשיון נדרש, צבע וכד'.

נתונה רשימת הזמנות R. כל הזמנה מכילה:
1. מאיזו שעה ועד איזו שעה הרכב נדרש.
2. מאפיינים של הרכב הנדרש. הרשימה יכולה להיות ריקה, כלומר כל רכב מתאים.

השאלה: האם קיים סידור ל R ב N? או בגרסה המלאה: מהו הסידור של R ב N?

כל מי שהיה פעם חבר קיבוץ מכיר את הבעיה.

יש לי גם תאור פורמלי יותר של הבעיה, יותר מאוחר אני אעלה אותו.
NP שלמה + פתרון לינארי 468949
בלי לחשוב על הבעיה יותר מדי, היא נראית לי הרחבה של http://en.wikipedia.org/wiki/Knapsack_problem שהיא בעיה NP שלמה.
NP שלמה + פתרון לינארי 468960
במבט חטוף, אני לא מצליח להבין אם יש קשר בין שתי הבעיות. אולי, אם כל פריט הוא הזמנה: משקלו הוא השעות וערכו הוא התיקים אליהם הוא יכול להכנס?... לא נשמע טוב, צריך לבדוק. ודווקא הרחבה יכולה ליצור הקלה בתנאים ולהפוך את הבעיה לפשוטה יותר....
NP שלמה + פתרון לינארי 469122
הנה תיאור של רדוקציה מבעיה דמוית-תרמיל לבעית סידור ההזמנות.

הבעיה (דמוית התרמיל): נתונות n משקולות, במשקל כולל N, וצריך למצוא תת קבוצה שלהן כך שסכום המשקולות בתת הקבוצה הוא *בדיוק* K. בנוסף אני דורש ש- 2K>N.

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

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

הדרישה ש- 2K>N היא דרישה טכנית, שלדעתי אפשר להיפטר ממנה. מה שבטוח הוא שבאופן טריביאלי אפשר לשים כל קבוע אחר במקום ה- 2.

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

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

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

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

עוד הערה טכנית: את הבעיה לא הסברת "שוב", הסברת אותה לראשונה. אם אתה מתכתב בנושא בכמה פורומים, מן הנימוס שתזכור עם מי דיברת על מה, או לפחות לא תנזוף באף אחד על שכחה.
NP שלמה + פתרון לינארי 468957
הוא הסביר אותה "שוב", בפעם הראשונה "משום מה היא לא עלתה למערכת" תגובה 468939 (אם אתה נוזף באחרים כדאי שתבדוק שאתה לא נוזף בהם בטעות).
NP שלמה + פתרון לינארי 468958
לא הבנתי שכשהוא אומר שהוא ''תיכף יתאר אותה שוב'', הוא מתכוון באותה הודעה ממש. חשבתי שהוא מתכוון עוד שעתיים, כשיגיע זמן הפסקת הצהריים. תודה על התיקון, וסליחה לרן.
NP שלמה + פתרון לינארי 469103
עוד לא העליתי את התאור הפורמלי של בעיית סידור ההזמנות, פשוט זה בבית ועוד לא היה לי את הפנאי.
אם זה ידרבן מישהו מהקוראים להתעסק עם זה, אני אעלה גם את האלגוריתם.

שאלה: מה המשתנה, n, שעליו ניתן לומר שהאלגוריתם עובד ב O כלשהו של n? האם זה צי הרכבים N, האם מספר ההזמנות R?

ועוד שאלה: האם טווח השעות בבעיה משנה לשייכותה למחלקה זו או אחרת? כלומר, אם הזמן בו ניתן לבקש רכב הוא סופי, למשל 24 שעות. או אם הזמן הוא לאינסוף.
NP שלמה + פתרון לינארי 469106
לרוב נהוג כשעוסקים בהיבטים תיאורטיים כמו P מול NP לדבר על גודל הייצוג של הקלט. לכן לא סופרים כמה רכבים והזמנות יש, אלא האם כמה מקום לוקח לייצג אותם (בדומה לצורה שבה פונקציות על מספרים נמדדות בסיבוכיות שלהם לא ביחס לגודל המספרים, אלא לגודל הייצוג שלהם, שהוא לוגריתמי בגודל המספר כשאנחנו בבסיס ספירה גדול מ-‏1).
NP שלמה + פתרון לינארי 469108
למעשה אתה טוען שזה שקלול של השניים. זה בסדר, אין לי בעיה עם זה.

ומה לגבי מהותו של עניין - לאיזו מחלקה הבעיה שייכת?
NP שלמה + פתרון לינארי 469118
הבעיה שאתה מציג היא מסוג בעיית תזמון משאבים בגרף אינטרוולים. הבעיות האלה מעניינות בהקשר של P/NP כיוון ששינוי מאוד קטן בהגדרת הבעיה מעביר אותה מ- P ל- NPC. ספציפית נראה לי שהבעיה שאתה מתאר נמצאת ב- P אבל אני לא יודע להציג לה אלגוריתם ובפרט אני לא רואה אלגוריתם "סטנדרטי" שעובד בזמן ליניארי (אני חושב שצריך זמן ריבועי או משהו כזה).
NP שלמה + פתרון לינארי 469149
כמו שאמרו כאן, זו בעייה בסגנון "Interval Graph". אני לא מבין כלום בנושא, אבל אני מכיר מישהו שמבין ואשאל אותו.
NP שלמה + פתרון לינארי 469152
זה מאד יעזור, תודה.
NP שלמה + פתרון לינארי 469230
טוב, אין לי תשובה חד משמעית. בבירור זו בעיית צביעה של גרף אינטרוולים. הבעיה ה"כללית" (נתונה כמות צבעים מסויימת והשאלה היא האם את גרף האינטרוולים אפשר לצבוע באמצעותה כך שלא יהיו שני צמתים סמוכים בעלי אותו צבע) אפשר לפתור ביעילות בגלל התכונות הנחמדות של גרף האינטרוולים (משהו בסגנון "תמיד קיימת צומת שהשכנים שלה הם קליק"). אתה לעומת זאת מגביל את הצבעים שיכולים להיות בכל צומת, וזה ככל הנראה מקשה על הבעיה - אבל לא ברור אם עד לרמה של NP-שלמות.

(אם הקשר לא ברור - "צבע" מתאים לרכב כלשהו; הצמתים בגרף מסמנים משימות; יש קשת בין שני צמתים אם ורק אם אלו משימות ש"עולות" אחת על השנייה; הצבעים החוקיים לצביעת צומת ספציפית הם צבעי כל הרכבים שהפרמטרים שלהם מתאימים למשימה שהצומת מייצגת).
NP שלמה + פתרון לינארי 469347
טוב, גם לי אין תשובה חד משמעית... :-)
כנראה שזה ישאר פתוח. היתה לי איזו תקווה שמישהו מהקוראים ירים את הכפפה, יקח את הבעיה ואת הפתרון ויוכיח משהו.
לא נורא. אני אעשה עוד נסיון אחד, להעלות את הניסוח הפורמלי, הן של הבעיה והן של האלגוריתם, אולי זה יעיר מישהו.

:-|

רן.
NP שלמה + פתרון לינארי 468954
אולי הוא מתכוון ל-PCP? אמנם זו בעיה בלתי-כריעה, לא ב-NP, אבל... מכך שזה לא נכון, לא הייתי קופץ למסקנה שלא לכך הוא התכוון.
NP שלמה + פתרון לינארי 468955
לא, לפי המשך השרשור, לא לכך הוא התכוון.
NP שלמה + פתרון לינארי 468961
נדמה לי שהבעיה נקראת staff scheduling ונהוג לפתור אותה עם integer programming.
NP שלמה + פתרון לינארי 468995
http://en.wikipedia.org/wiki/Linear_programming#Inte... היא בכלל בעיה NP קשה (כך שלא ממש נהוג לפתור אותה).
NP שלמה + פתרון לינארי 468998
מה זאת אומרת "לא ממש נהוג לפתור אותה"?
NP שלמה + פתרון לינארי 469014
לבעיות שמצריכות תכנון בשלמים, במקרה הכללי, אין פתרון ישים.
בטווח הרחוק, כולנו מתים. 469025
מה זאת אומרת אין פיתרון ישים? ברור שיש פיתרונות, רק שלא תמיד הם אופטימליים.
בטווח הרחוק, כולנו מתים. 469074
נדמה לי, ותקן אותי אם אני טועה, שהבעיה שהוצגה כאן היא בעיית אופטימיזציה.
בטווח הרחוק, כולנו מתים. 469075
אכן. לבעיות אופטימיזציה שהן NP-קשות נהוג למצוא פתרונות מקורבים. יש תחום מחקרי שלם (ומרתק) על "עד כמה טוב אפשר לקרב בעיה מסויימת בלי לקבל ש-P=NP". מסתבר שבעיות NP-שלמות נבדלות זו מזו באופן דרסטי במידת הקירוב האפשרית שלהן.
דוגמא לזמן ריצה אקספוננציאלי 469161
הקדים ואומר תודה לכותב המאמר.

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

התוכנית הייתה אמורה למצוא פיתרון יחיד(או את כל הפתרונות) של חידת המלכות.

חידת המלכות : הגדרה של מלכה בשחמט - כלי שיכול לנוע באלכסון שמאלה ימינה למעלה ולמטה לכל אורך הלוח.

המטרה היא לשים 8 מלכות על לוח שח מט(בגודל 8 על 8 משבצות כמובן) כך שאף מלכה לא תוכל במהלך אחד להגיע למלכה אחרת.

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

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

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

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

זה לא האלגוריתם האידאלי אך הוא התאים לי כשרציתי לפתור את הבעיה.

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

זהו מספר לא קטן בכלל. למעשה זהו מספר עם 7 ספרות. ניתן למצוא אלגוריתם יותר יעיל וכמובן שיש את האלגוריתם הכי פחות יעיל שכל מלכה יכולה להיות בכל מקום פנוי כלומר כמות האפשרויות היא 64*63*...* 57 שזהו מספר עם 14 ספרות.

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

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

בואו נניח שבדיקת מצב לוקחת פעולת מעבד בודדת. כלומר ב-‏8 על 8 יש 10 בחזקת 7 פעולות. המחשב עובד על 3 גיג'ה הרץ. כלומר 3*10 בחזקת 9 פעולות בשניה. כלומר זמן הריצה קטן מ-שניה.

עכשיו עבור לוח של 12 על 12 יש 12 בחזקת 12 מצבים כלומר 9 כפול 10 בחזקת 12. נחלק את המספר במהירות שעון(3 גיג'ה) זה 3000 שניות. כלומר כמעט שעה.

עבור לוח של 15 על 15 : 10 בחזקת 17 מצבים. לוקח לפי מהירות השעון הזאת 4.5 שנים.

עבור 17 על 17: 10 בחזקת 20 פעולות. 8700 שנה.

עבור 20 על 20 : 10 בחזקת 26. 1.1 מליארד שנה.

עבור 25 על 25 : 10 בחזקת 34 מצבים. 938798431.1 מליארדי שנה.
יש לזכור שהעולם קיים רק כמה מליארדי שנים בודדות.

עכשיו נניח שמשפרים את יעילות האלגוריתם פי 10(וזה הרבה... אולי אפשרי אבל לא פשוט), ונניח שיש מחשב שבמקום לחשב 3*10 בחזקת 9 פעולות בשניה מחשב 10 בחזקת 20 פעולות בשניה(מדובר על עצום. פי מאה מליארד יותר מהר) עדיין עבור לוח של 25 על 25 הזמן שיקח לפתור את הבעיה הוא מליון שנים.

ככה שכנראה לעולם לא נוכל לפתור את הבעיה של חידת המלכות עבור לוח של 25 על 25 ע"י האלגוריתם שתואר. בלי קשר להתפתחות הטכנולוגיה. ועם בטעות נוכל לפתור עבור לוח של 25 על 25 משבצות לא נוכל לעשות זאת על לוח של 35 על 35 משבצות.

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

--#--------
----#------
------#----
--------#--
----------#
-#---------
---#-------
-----#-----
-------#---
---------#-
#----------

חסכנו מיליארד שנה
עכשיו נותרו עוד שני שליש מהמקרים
דוגמא לזמן ריצה אקספוננציאלי 469192
האם יש הוכחה שלכל לוח (ריבועי) יש לפחות פיתרון אחד לבעיה?
קטנוני כרגיל 469195
ללוח 2X2 אין פתרון
קטנוני כרגיל 469197
צודק. וחוץ ממנו?
קטנוני כרגיל 469198
גם ל3X3 אין.
קטנוני כרגיל(כה''ב) 469199
בסדר, בסדר, התכוונתי האם יש מספר שהחל ממנו תמיד יש לפחות פיתרון אחד, והאם המספר הזה הוא ליד 8.
קטנוני כרגיל(כה''ב) 469201
נדמה לי שזה מספק אינטואיציה, גם אם לא הוכחה ממשית:
(מספר פתרונות לבעיה כפונ' של מספר המלכות)
קטנוני כרגיל(כה''ב) 469202
תודה! יש הכללה למימדים גבוהים?
קטנוני כרגיל(כה''ב) 469204
אני לא יודע על הוכחה, אבל החל מ 4X4 (ארבע זה ליד 8?‏1) יש פתרון, שכמובן אינו יחיד, כי אתה תמיד יכול לסובב את הלוח ב 90° (ארבעה פתרונות "שונים") וגם להציב אותו מול מראה.

___
1 כשהייתי שסין לאחרונה, שאלתי את אחד הסינים שעבדתי מולו, האם הוא במקורו משנחאי. הוא השיב שהוא מעיר ליד שנחאי. מה זה ליד? במכונית ארבע שעות נסיעה.
מתוך מה שאני יודע 469229
כאשר הרצתי את התוכנה למצוא את כל הפתרונות אז מ-‏5 ועד 10 או 12 כמות הפתרונות רק הלכה וגדלה. זה לא מוכיח כלום אבל זאת אינדקציה.

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

לפי דעתי יש הוכחה שיש פיתרון יחיד עבור כל n>5 (כאשר n מספר השורות והעמודות). וגם יש טכניקה למצוא פיתרון יחיד שכזה. אבל לא בטוח בקשר לעניין.
ללא שום קשר 469214
מתמטיקסם
מה לעזאזל קורה כאן? 469219
מזמן לא קראתי מאמר כל כך מסובך שאת התגובות שלו אפילו לא הצלחתי להעמיד פנים שאני מבין.
ואחר כך אומרים שרופאים מדברים בשפה סודית....<אנחה>.
מה לעזאזל קורה כאן? 469223
אחחחחח דוקטור! אתה כל כך עוזר לי עכשיו! אמא שלי צדקה ששרינק זה בכלל לא מקצוע ורופא פנימי זה יותר טוב מאלף שרינקים!!!

אחחחחח דוקטוווור!!! עוווווווווד!!!!!!!!!!
מה לעזאזל קורה כאן? 469228
אם משהו לא ברור, אני יכול לנסות להסביר (אמנם, כנראה שהנסיון הראשון לא היה מוצלח, אבל אין חכם כבעל נסיון).
מה לעזאזל קורה כאן? 469444
'
גמני, בגלל גולמיותי הבסיסית כנראה, ובעיקר עקב המוסיות הקנדית, משתאה נוכח צביר ההודעות הזה מיום היווסדו ועד לשלהי התגובות בהווה.

ראבאק, על מה מדובר פה?!

_____________

הכותב חש רגשי נחיתות עזים במסורת SAT ו-PN=NP או בערך
מה לעזאזל קורה כאן? 469445
שוב - מה לא ברור? את הכל אפשר לנסות להסביר.
מה לעזאזל קורה כאן? 469449
'
סליחה, לא רוצה להעיק מהבסיס. רק כבר כמה ימים שאני משפשף את המצח בתזזית. בודק כל כמה שעות אם לא חלה אצלי צניחה חופשית ברמת חיבורי הנוירונים במוח, ובעיקר - מפנים את ההכרה כי קיים עולם מושגים שלם שאין לי שום גישה אליו.

זה לא אתה. זה בהחלט אני.

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

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

________________

הכותב הולך לפתור משוואה עם נעלם אחד ובודד במטרה להציל את כבודו העצמי בעיני עצמו
מה לעזאזל קורה כאן? 469450
אני ממש לא מסכים, אבל מילא.
מה לעזאזל קורה כאן? 469455
סתם, אני סקרן לדעת איזה צורך אתה מספק בכתיבת הודעות שמנסות לשכנע את כותב המאמר ושאר הקוראים בכך שאינך מסוגל להבין משהו? לא עדיף לכתוב: "לא הבנתי למה מ-X נובע Y", או משהו בסגנון? גם חוסך זמן (וביטים) וגם עשוי לעזור לכותב להבין מהן בדיוק הנקודות שבהן קוראים חסרי השכלה בתחום עלולים להתקשות.

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

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

לא הייתי מעלה בדעתי לומר זאת לולא ראיתי הודעה קודמת ששיקפה בדיוק את תחושתי. ככותרת פתיל המשנה הנוכחי. מכיוון שהתאמצתי לשווא לקרוא ולקלוט את הנכתב בגוף המאמר ובתגובות - מצאתי לנכון להביע את תסכולי מעצמי בצמוד לדברי הד''ר. זה הכל. כנראה שהחומר המובא כאן ספציפי ומקצועי מדי להדיוטות שלא עוסקים בתחום. עובדה היא שרבים המה המגיבים והמתדיינים שכן מוצאים שפה משותפת ואף מוסיפים כהנה וכהנה לשיח המתמטי. אני יכול רק לקנא בכם.
מה לעזאזל קורה כאן? 469457
אני יכול לומר בודאות שהחומר לא *אמור* להיות "ספציפי ומקצועי".

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

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

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

בכל מקרה, שוב, תודות לך ולMRP, שגרמתם לי להתנער מעצלנות/שטחיות מחשבתית, ולהתאמץ לרכוש עוד ידע באמצעות האתר הזה.

_____________

הכותב כבר מתכנן לעשות רושם על אישה מסוימת דרך דיון בלולאות אינסופיות והשיטה לעצירתן
מה לעזאזל קורה כאן? 469482
אתה מתבקש לדווח על רמת הצלחתך /הרשמתך.
מה לעזאזל קורה כאן? 472832
'
דיווח:
עשיתי רושם עילאי. היא תלתה בי עיניים מוקסמות ועגולות לגמרי מפליאה (שלא לומר תדהמת מוחלטת על מה לעזאזל קורה פה), והפנתה אותי לעבר עיסוקים יותר ארציים. למשל, מה תעדיף שאקנה לה כמתנת יום הולדת. והכי חשוב כמה (קראט). כמובן בהקשר של מספרים ראשוניים.
469428
מה שלא הבנתי לגבי הRSA הוא שמוצאים שני מספרים ראשוניים שהמכפלה שלהם נותנת מספר שלישי, נכון?

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

מה שלא ברור לי הוא איך מלכתחילה מוצאים את שני המספרים הראשוניים האלו (שאמורים להיות מספרים גדולים מאוד)?
RSA 469435
הם מאוד גדולים, אבל הם לא גדולים כמו המכפלה של שניהם...
469443
כדי למצוא "סתם" מספר גדול אין לנו שום בעיה - פשוט מגרילים ספרות (כדי להגריל מספר בן 500 ספרות, צריך לבצע 500 הגרלות של מספרים בין 0 ל-‏9 - לא קשה במיוחד). הבעיה היא, אם כן, לבדוק עבור מספר גדול אם הוא ראשוני או לא. זו אכן בעיה מעניינת, מבחינה חישובית. למעשה, עד תחילת האלף הנוכחי לא היה ידוע אף אלגוריתם דטרמיניסטי שעושה את זה בזמן סביר, והגילוי של אלגוריתם כזה (AKS) היה סנסציה זוטא.

אלא מה? כבר הרבה לפני AKS היו כמה וכמה אלגוריתמים הסתברותיים מהירים מאוד לבדיקת ראשוניות. ב"הסתברותיים" הכוונה שיש להם סיכוי לטעות, אבל אם משלמים מחיר נמוך למדי בזמן הריצה, הסיכוי הזה הופך לאפסי. אלגוריתם מאוד מוכר ומקובל הוא אלגוריתם מילר-רבין [ויקיפדיה], שעשוי בטעות להגיד על מספר לא ראשוני שהוא כן ראשוני, אבל הסיכוי נמוך יחסית אם עושים מספיק בדיקות. הרעיון הבסיסי של מילר-רבין הוא שימוש במבחן שמספק "המשפט הקטן של פרמה [ויקיפדיה]", תוך כדי הוספת התחכמות קטנה שמטפלת במקרי קצה מעצבנים. אם תרצה, אפרט עוד על העניינים הטכניים.
469511
עד תחילת האלף הנוכחי? כלומר, אחרי שנת 2000? ממש ממש בשנים האחרונות? וואלה?

כלומר, כאשר RSA הוציאו את הפטנט שלהם הוא היה ישים רק בשילוב עם אלגוריתם *סטטיסטי* לבדיקת ראשוניות?

האם תוכל לתת סדר גודל של עד כמה הסיכוי לשגיאה הוא נמוך?

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

הסיכוי לשגיאה של מילר-רבין (ושל כל אלגוריתם הסתברותי בעל ערך אחר) הוא קטן *כרצוננו*. פירוש הדבר הוא שאפשר, באמצעות הגדלה לא משמעותית של זמן הריצה, להקטין משמעותית את ההסתברות לטעות. במקרה של מילר רבין, כל "בדיקה" שהאלגוריתם מבצע מותירה הסתברות של 1/4 לטעות (רק אם המספר לא ראשוני; אם הוא ראשוני, האלגוריתם תמיד מצליח). פירוש הדבר הוא שאחרי שתי בדיקות ההסתברות לטעות תהיה 1/16, אחרי שלוש, 1/64, ובאופן כללי - כל נסיון נוסף מקטין את ההסתברות לטעות פי 4. מהר מאוד אפשר להגיע להסתברויות נמוכות בצורה קיצונית לטעות - ההסתברות שמשהו יתפקשש בחומרה עצמה כבר תהיה גדולה יותר.

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

מה שחשוב להדגיש בכל הסיפור הזה הוא שייצור המפתח של RSA הוא דבר די חד פעמי, ולכן אפשר להקדיש לו המון זמן. תקשורת שוטפת מוצפנת בעזרת שיטות הצפנה סימטריות (שהן מהירות הרבה יותר מ-RSA), וה-RSA משמש רק להחלפה בטוחה של מפתחות אקראיים עבור השיטות הללו.
469547
הנה רעיון נחמד להבטיח שההצפנה תמיד תעבוד, גם אם המספרים אינם ראשוניים: כאשר אתה מריץ את מבחן מילר-רבין, תבדוק את כל הראשוניים הקטנים (נניח ה- 64 הראשונים). אח"כ תקודד את ההודעה שאתה רוצה לשלוח באמצעות הכפלה או אי הכפלה בראשוני הקטן המתאים (אתה שולח 64 ביט להודעה במקום, נניח, 512, כי כל ביט עולה לך יותר מביט בשידור, אם אתה רוצה שהמודולו לא ייכנס לפעולה כדי שהצד השני יוכל לשחזר את החזקות בצורה טריביאלית). מכיוון שבדקת עבור כל הראשוניים הנ"ל שכל אחד מהם בחזקת p-1 שווה ל- 1, מובטח לך שזה יקרה גם למכפלה כלשהי שלהם (וגם ל- q, וגם ל- pq).

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

אגב, כדאי לציין שלפעמים, במקום להשתמש ב- RSA כדי *להעביר* מפתח מצד א' לצד ב', אפשר להשתמש פרוטוקול דיפי-הלמן [ויקיפדיה] כדי *לתאם* מפתח בין שני הצדדים (כלומר, זה לא שמישהו בוחר את המפתח ואז מעביר אותו לשני; משתמשים בפרוטוקול שבסופו יש לכל אחד מהצדדים מפתח, שאף אחד מהם לא בחר, ושלא ידוע לאף אחד אחר מלבדם).
469565
לא הבנתי שום דבר מהרעיון, אני חושש.

דיפי הלמן זה סיפור בפני עצמו. כמובן שזו שיטה מקסימה, ויש לה שימושים פרקטיים רבים; אבל יש לה את הסכנות שלה (בפרט, היא חשופה בצורה קיצונית למתקפת Man-in-the-middle). כשמגיעים לשימושים מעשיים, לרוב מה שיש הוא מיש-מש אחד גדול של הרבה שיטות. למשל, פרוטוקול IKE שמשמש להסכמה על מפתח הצפנה (סימטרי) משותף משתמש גם בדיפי הלמן כדי לייצר סוד משותף, וגם (באחד מאופני התפעול שלו) בחתימות מבוססות מפתח פומבי כדי למנוע את המתקפות הסטנדרטיות על דיפי-הלמן.
469572
ניקח מספר "חשוד כראשוני" p. נבדוק האם כל המספרים 2,3,5,7 ועד הראשוני ה- n מקיימים n^(p-1)=1 מודולו p. נוודא שאותו דבר מתקיים עבור מספר "חשוד כראשוני" q. נוודא גם שמכפלת כל n המספרים האלו קטנה מ- pq.

כעת, נניח שאנחנו רוצים להעביר הודעה בת n ביטים. נקודד את ההודעה באמצעות מספר שמהווה את מכפלת כל הראשוניים שעבורם הביט הוא 1 (ניסוח שקול: נעלה כל ראשוני בחזקת הביט שלו ונכפיל). נקרא למספר הנ"ל A. נשים לב ש- A מקיים בהכרח A^(p-1)=1 מודולו p וכנ"ל עבור q, כי A הוא מכפלה של מספרים שמקיימים תנאי זה. נצפין את ההודעה "בדרך הרגילה". הפענוח "בדרך הרגילה" בהכרח ייתן את המספר A. מכיוון שמכפלת כל n הראשוניים היתה קטנה מ- pq, בהכרח כך גם A, שהוא מכפלה של קבוצה חלקית שלהם. לכן, הצד המפענח יכול פשוט לבדוק אם A מתחלק ב- 2,3,5 וכו', ולקבל את n ביטי ההודעה המקוריים. כמובן שהשיטה בזבזנית, כי כדי להעביר הודעה של n ביטים היינו צריכים להעביר הודעה של יותר ביטים. אפשר לייעל ע"י כך שלמספרים קטנים יותר נרשה חזקות גדולות יותר (באמת מעניין לחשב כמה מידע אפשר לשדר בדרך זאת עם, נניח, מספר pq של 1024 ביט).

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

מה שאהבתי בדיפי הלמן זה את האפשרות לתאם מפתח מבלי שאף אחד "תכנן" את המפתח הזה. אני לא מכיר פרוטוקולים "אמיתיים", אבל אם הייתי מתכנן אחד אני מניח שהייתי משתמש בשילוב של כמה שיטות .
469578
אני עדיין לא מבין. הבנתי את הרעיון הבסיסי, אבל לא למה זה עובד. אתה אומר "נצפין בדרך הרגילה" ו"נפענח בדרך הרגילה" - אבל איך אתה עושה את זה? כדי לבנות מפתחות הצפנה ופענוח שעובדים, אתה צריך לדעת את פונקצית אוילר של pq; כדי לדעת אותה, אתה צריך לדעת את p,q *ולדעת שהם ראשוניים*. אם הם לא ראשוניים, אנחנו באותו ברוך כמו כל מי שמנסה לפרוץ מבחוץ; החישוב של פונקצית אוילר של מספר קשה בדיוק כמו הפירוק שלו לגורמים.

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

(p-1)(q-1)

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

אם כן, נניח שעבור A מסוים אנחנו יודעים ש- A^(p-1)=1 מודולו p, וש- A^(q-1)=1 מודולו q. עכשיו, את מפתחות ההצפנה והפענוח d,e בונים כך שיתקיים de=1 מודולו (p-1)(q-1). אם ההודעה המקורית היתה A, ההודעה המפוענחת תהיה A^de. נבדוק מה קורה מודולו p ומודולו q בנפרד. מודולו p:

A^(de) = A^(k*(p-1)*(q-1)+1) = (A^(p-1))^(k*(q-1))*A = 1^(k*(q-1))*A = A

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

-----------------
(1) עכשיו שמתי לב שבעצם יש פה דרישה נוספת - ש- p ו- q יהיו זרים (כלומר, אם במקרה נפלנו בשניהם על מספרים פריקים, ואם במקרה שני המספרים הפריקים אינם זרים זה לזה - נדפקנו). אפשר פשוט לוודא שהם זרים (אלגוריתם GCD הוא פולינומיאלי בגודל הקלט). לחליפין, אפשר לפתור בדרך אחרת: במקום לבדוק ש- 2,3,5 וכו' עוברים את מבחן פרמה, תבדוק ש- a^de=a מודולו pq, עבור כל המספרים האלו. אז מובטח לך שזה יהיה נכון גם עבור כל מכפלה שלהם.
469613
אחלה. עכשיו אני נוטה להסכים שמדובר בשיטה לא משהו, אבל שהיא עובדת.
469775
אני בטוח שאחרי השרשור הזה נחה דעתו והתבססה הבנתו של מוס גולמי :-)
469979
לדעתי נחה הבנתו (היא לא התקדמה לשום מקום) והתבססה דעתו (על משתתפי הדיון).
דוגמא 470350
אפשר לקבל דוגמא לבעיה שהיא *לא* NP?

תודה
דוגמא 470353
כל הבעיות ב-NP הן כריעות. לכן, בעיות שאינן כריעות הן לא NP. לכן (לדוגמא) בעיית העצירה [ויקיפדיה] היא לא ב-NP.
דוגמא 470357
זו דוגמא טריוויאלית מדי. אני רוצה בעיה *כריעה* שלא נמצאת בNP.
דוגמא 470362
באמת מעניין.

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

גדי?
דוגמא 471086
ידוע שהמחלקה EXSPACE (בעיות שניתן לפתור עם מכונת טיורינג עם מקום אקספוננציאלי באורך הקלט) מכילה ממש את NP. לכן בעיות שלמות ב-EXSPACE אינן ב-NP.
לדוגמאות לבעיות כנ"ל ראה http://en.wikipedia.org/wiki/EXPSPACE
דוגמא 471090
ב-Complexity zoo ‏1 אפילו כותבים דוגמה קונקרטית:

"The theory of reals with addition (see EXPSPACE) is hard for NEXP"

ההפניה שהם נותנים היא ל:

M. J. Fischer and M. O. Rabin. Super-exponential complexity of Presburger arithmetic, Complexity of Computation (R. M. Karp, ed.), SIAM-AMS Symposium on Applied Mathematics, 1974.

ואני עצמי לא מסוגל (כרגע) להסביר יותר מכך.

---------
השערה 470363
מה בדבר בעיית ההכרעה "לגרף הנתון אין מעגל המילטוני"? זו בוודאי בעייה ב-co-NP כי אם אין זה נכון שאין בגרף מעגל המילטוני, יש לכך הוכחה פשוטה (הנה המעגל). מצד שני, לא נראה שיש בהכרח "עד" פולינומיאלי לכך שגרף נתון *אינו* מכיל מעגל כזה.

מצד שלישי, הוכחה לכך שבעייה זו באמת איננה ב-NP תהווה גם הוכחה לכך ש-NP שונה מ-co-NP, ואם אינני טועה(?) זו בעייה פתוחה הנחשבת קשה. נדמה לי שלפנינו בעייה כריעה שאיננה ב-NP (כפי שביקשת), אך איננו יודעים להוכיח שזה באמת המצב.
השערה 470988
א) למעשה הבעיה הנ"ל היא co-NP שלמה, דהיינו היא (1) ב-co-NP כפי שאמרת ו-(2) היא "קשה" לפחות כמו כל בעיה ב- co-NP.

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

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

מה כן?

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

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

TQBF [Wikipedia] היא בעיה חביבה למדי שמאוד לא סביר שתהיה ב-NP, אבל לא באמת ידוע; היא מה שנקרא PSPACE-שלמה, שזה כמו NP-שלמה רק עבור מחלקה (כנראה) גדולה יותר, של כל הבעיות שאפשר לפתור בסיבוכיות *זכרון* פולינומית. היא די דומה באופיה ל-SAT, למי שמכיר, רק שכאן יש לנו נוסחה בתחשיב *הכמתים*. כאמור, ייתכן ש-P=PSPACE ואז בפרט זו בעיית NP; אבל זה מאוד מאוד לא סביר.

מקום טוב אחד להתחיל לחפש בו דוגמאות לבעיות קשות "ממש" הוא "אלגוריתמיקה" של דוד הראל, שלצערי לא לידי כרגע.
חרוזים 473143
אהבתי במאמר שלך
את תמונת החרוזים
חרוזים 473201
חשבונייה, קראו לזה פעם.
באנגלית זה הרבה יותר מגניב: Abacus 473239
והנה אתר שמוקדש לו: http://www.ee.ryerson.ca/~elf/abacus/
באנגלית זה הרבה יותר מגניב: Abacus 473296
בהמשך לדיון על אאופמיזם: זו לא מילה אנגלית! זו מילה לטינית, ממקור יווני עם ניחוח שמי, והיא משותפת לכל שפות אירופה. די לאנגלוצנטריות!
זו כן מילה אנגלית. 473306
פשוט מקורה בלטינית (לא כתבתי בשום מקום שזו מילה *רק* באנגלית).
זו כן מילה אנגלית. 473310
קראתי פעם שמקורה במלה ''אבק''.
הא! מסתבר שזו בכלל מילה בעברית! 473325
זאת אומרת, אם מאמינים לזה:
או שמא בפיניקית:
נוגה אלון זכה בפרס ישראל למתמטיקה 473732
סוף סוף קצת כבוד לקומבינטוריקה.

והנה קצת מספרים:
נוגה אלון זכה בפרס ישראל למתמטיקה 473754
...ועדי שמיר זכה בפרס למדעי המחשב (טיפה יותר רלוונטי, למרות שגם הזכייה של אלון בעיקר מעוררת את השאלה ''מה לקח להם כל כך הרבה זמן'').
נוגה אלון זכה בפרס ישראל למתמטיקה 473762
סופר לי מפי קולגה שברדיו, כשדיווחו על הפרס, התייחסו שוב ושוב לעבודתו של ''פרופ' נוגה''.
נוגה אלון זכה בפרס ישראל למתמטיקה 473764
כמו Sir Paul
נוגה אלון זכה בפרס ישראל למתמטיקה 473824
נוגה זה לא שם המשפחה שלו?
נוגה אלון זכה בפרס ישראל למתמטיקה 473828
לא, זה שמו הפרטי הנוגה.
נוגה אלון זכה בפרס ישראל למתמטיקה 473822
דווקא נוגה אלון יותר רלוונטי לתיאוריה של מדעי המחשב.

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

נוגה אלון זכה בפרס ישראל למתמטיקה 473835
למה "מישום מה"? ככה מעריכים אקדמאים כבר מאות שנים. חוקר מוכשר הוא חוקר שחוקרים מוכשרים חושבים שהוא מוכשר. לגבי גדולים בתורה, אגב, זה מאוד דומה.
נוגה אלון זכה בפרס ישראל למתמטיקה 473838
מדובר על אנשים שיש להם הרבה שיתופי פעולה, לא הרבה ציטוטים.
הוכחה ש-P שונה מ-NP? 547997
הוכחות לכך ש-P שונה מ-NP, שווה לו או שבכלל הבעיה אינה כריעה הן דבר די נפוץ, אבל הרבה פחות נפוצות הוכחות שנראה על פניו שיש בהן משהו ומעוררות התרגשות בקהילה, ועושה רושם שצצה עכשיו אחת כזו. מצד אחד:

ומצד שני, פחות אופטימי:

בכל מקרה יהיה מעניין לעקוב ולראות מה קורה עם זה.

לתוהים - לא, הוכחה לא תגרום לשינוי מהותי במדעי המחשב (להבדיל ממה שהוכחה ש-P=NP הייתה גורמת), אלא בעיקר לאישוש של מה שכולם בטוחים שהוא נכון וכנראה לקידום טכניקת ההוכחה ולשימושים נוספים שלה. מצד שני, זה עדיין פתרון של חידה עתיקה יחסית בענף וההתרגשות מוצדקת.
הוכחה ש-P שונה מ-NP? 548469
עדכון: חוות הדעת הנוכחית שכמה מהשמות הגדולים מביעים בבלוגים שבהם מתקיים דיון בנושא - ההוכחה לא עובדת, לא ניתן לתקן אותה, ואין בה רעיונות חדשים טובים שאפשר להשתמש בהם בכל זאת.

חבל.
התפתחות מעניינת (?) 548067
הוכחה ש-P שונה מ-NP? אולי. פרטים אחדים כאן: http://www.gadial.net/?p=696
התפתחות מעניינת (?) 548071
פרטים נוספים, אצל גדי אלכסנדרוביץ': תגובה 547997.
חרמפפפ 548072
הוכח או הפרך 554044
ב-‏1979 התפרסמה בניו יורק טיימס ידיעת מדע פופולרי קצרה מאת אחד מלקולם בראון, על התפתחות במחקר איפשהו בין אופטימיזציה לחישוביות. מדען המחשב קריסטוס פפדימיטריו התעצבן על אי-הדיוקים שהסתננו לכתבה, ואחד התרגילים בספר שלו Combinatorial Optimization: Algorithms and Complexity כולל את הידיעה במלואה, לצד המטלה:

Determine, when possible, whether each statement is (a) true, (b) false, (c) misleading, (d) equivalent to a well-known conjecture, the solution of which was probably not known to Mr. Browne.

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

(בונוס מיוחד יינתן לסטודנטים שישימו לב לכך ששפי גולדווסר זו "היא").
הוכח או הפרך 554060
אני מקווה שלא אכפת לך שהשתמשתי בזה כאן.
הוכח או הפרך 554061
נהפוך הוא, לכבוד לי.
דק מן הדק 718522
אם אתה עדיין אוסף ציטוטים משעשעים מספרי מתמטיקה, יש לי עוד שניים בשבילך. המתמטיקאי דייוויד בנסון כתב ספר נפלא על מוזיקה ומתמטיקה, שזמין להורדה בחינם ובאופן חוקי מהאתר שלו‏1. בעמ' 45 הוא מתאר את תופעת גיבס - "בעיה" בהתכנסות של טורי פורייה סמוך לנקודות אי רציפות עם קפיצה, שמתבטאת ב-overshoot של כ-‏8.9% מגודל הקפיצה. בהערת שוליים למספר הנ"ל הוא כותב שהערך חושב לראשונה ע"י Maxime Bocher ב-‏1905, ומוסיף:

"A number of otherwise reputable sources overstate the size of the overshoot by a factor of two for some reason probably associated with uncritical copying."

בעמ' 73 בנסון מתאר את פונקציית הדלתא של דיראק, ששונה מ-‏0 רק בנקודה אחת, אבל הערך שלה בנקודה הזו כל כך גדול עד שהאינטגרל סביבה הוא 1. על צירוף הדרישות הנ"ל הוא כותב:

"The awake reader will immediately notice that these properties are contradictory."

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

חזרה לעמוד הראשי פרסום תגובה למאמר

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