הסבר
אתה מנסה למצוא לבעיה פתרון מבלי לדעת את הגדרת הבעיה? בעית הסוכן הנוסע היא זו: בהינתן אינסטנציה של גרף שלם, לא מכוון וממושקל עם משקלות אי-שליליים לקשתות, מצא בגרף מעגל המילטון במשקל מינימלי. אינני יודע אם אני מכיר את כל המושגים בהם השתמשתי בניסוח המתמטי המדויק הנ"ל של הבעיה. אז הנה הסבר קצר על כל מונח: גרף זה יחס דו מקומי E(u,v על קבוצת קדקדים. אם הזוג u,v נמצא ביחס, אז יש קשת מכוונת בין u ל v. גרף לא מכוון זה גרף בו היחס E הוא יחס סימטרי, היינו לכל u,v אי של יו וי גורר אי של וי יו. אם אתה מצייר את זה, אז לשם נוחות לא צריך לצייר גרף לא מכוון ע"י קשת אחת בכל כיוון, אלא פשוט ע"י קו במום קו עם חץ בקצה. גרף שלם הוא גרף שבו היחס E הוא יחס מלא, היינו בין כל זוג קדקדים יש קשת. גרף ממושקל הוא גרף שבו יש פונקציה דו-מקומית שמתאימה לכל קשת (זוג איברים הנמצאים ביחס E) מספר (ממשי). מעגל המילטון: "טיול" בגרף המתחיל מקודקוד x, עובר בכל קדקד בגרף פעם אחת בלבד, ומסתיים בקדקד x. הבעיה הזו, TSP, היא בעיה קשה מבחינה חישובית. אנו מבחינים במחלקות חישוביות שונות עבורות בעיות כריעות. ידוע, למשל, אלגוריתם שבזמן ריצה בסדר-גודל אקספוננציאלי פותר את TSP. אבל סיבוכיות כזו איננה טובה כי, למשל, אם יש 100 קדקדים, מספר הצעדים של האלגוריתם במקרה הכללי הוא 2 בחזקת 100 (כפול איזה קבוע ממשי). נניח שיש מחשב שמחשב את זה תוך שניה אחת. עכשיו נגדיל את הקלט להיות באורך 200. למחשב לא תקחנה 2 שניות, אלא פי 2 בחזקת 100 זמן מהזמן הקודם. אם קודם לקח שניה, עכשיו זה 2 בחזקת 100 שניות. תחשוב לבד כמה הרבה זה. הקלט רק הוכפל באורכו, אבל זמן הריצה גדל בצורה מעריכית. יש מחלקות זמן ריצה גרועות יותר, דאבל אקספוננטיאל, שזה שתיים בחזקת שתיים בחזקת n. ויש גם עוד יותר גרוע, שתיים בחזקת שתיים בחזקת שתיים... n פעמים! (ויש בעיות שזה החסם שלהן!) עכשיו, מחלקת הסיבוכיות P היא מחלקת כל הבעיות שלכל אחת מהן קיים אלגוריתם שבזמן ריצה שהוא פונקציה פולינומיאלית של אורך הקלט מסיים ריצתו. NP זו מחלקת הסיבוכיות של כל הבעיות שלכל אחת מהן, אם יודעים מהי התשובה עבור אינסטנציה (קלט) כלשהו, אפשר לבדוק בזמן פולינומיאלי אם התשובה הזו נכונה או לא. התשובה לא נקראת כך, אלא נקראת "עד". אז כדי להוכיח שבעיה היא בNP, תנחש תשובה, ותראה שניתן בזמן פולינומיאלי להכריע האם התשובה נכונה או לא. תכונת קשיות NP היא שמכל בעיה בNP אפשר לעשות רדוקציה לבעיה שהיא NP קשה. זה אומר שבעיה NP קשה היא קשה לחישוב לפחות כמו כל בעיה בNP. לקבוצת הבעיות בNP שהן גם NP קשות קוראים NPC. לאף אחת מהן לא ידוע אלגוריתם בזמן ריצה פולינומיאלי. מוכיחים על בעיה מסוימת, 3 SAT שהיא NP קשה ע"י תרגום כל בעיה בNP המנוסחת עבור מכונת טיורינג (מודל חישובי שקול למחשב) לנוסחה בצורת 3SAT. זה נקרא משפט קוק. מעתה והלאה, כדי להראות שבעיה היא NP קשה, צריך להראות שאפשר לעשות רדוקציה ממנה ל3SAT. ואם היא גם בNP אז היא NPC. P מוכלת בNP, כי אם יש אלגוריתם פולינומיאלי למצוא התשובה, אפשר לייצר את התשובה בזמן פולינומיאלי, ואז אם יש לנו "עד" אפשר להריץ על הקלט ולהשוות לעד, וההשוואה זה O של n, ולכן זה בNP. את השאלה ההפוכה לא יודעים. אבל אם תראה על אחת מבעיות NPC, כמו TSP או SAT, שיש להן אלג' פולינומיאלי, אז מאחר שכולן "קשות באותה מידה" (זו המשמעות לכך שהן באותה המחלקה), יהיה אלגוריתם לכולן. בהצפנה למשל, מסתמכים על כך שNP שונה מP, ולכן לא ריאלי שמישהו יחפש את כל האפשרויות כי זה יקח לו זמן מעריכי.