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