נגדיר אלגוריתם לא דטרמינסטי כאלגוריתם שבכל צעד יתכנו כמה אפשרויות
הגדרה
נאמר כי אלג׳ ל״ד מכריע בעיה אם מתקיים:
קיימת ריצה עבורה
בכל ריצה
זמן ריצה של אלגוריתם ל״ד
זמן הריצה של על קלט הינו מספר הצעדים המקסימלי ש מבצע בריצה כלשהי על . נאמר של יש זמן ריצה פולינומי אם קיים פולינום כך שלכל זמן הריצה של חסום על ידי
הגדרה שקולה למחלקה NP
אם כן, נוכל להגדיר את המחלקה על ידי
טענה: 2 ההגדרות של NP הן שקולות הוכחה:
תהי בעיה לפי ההגדרה המקורית, כלומר קיים פולינום ומוודא פולינומי כך ש . נגדיר אלגוריתם ל״ד המכריע את :
A(x):
y = ""
while y <= P(|x|) choose in a indetermistic way between:
1) y = y+0
2) y = y+1
3) break
return V(x,y)
נשים לב ששלב הבחירה נעשה לכל היותר פעמים ו אלג׳ פולינומי לכן פולינומי.
כמו כן: אמ״מ קיים באורך לכל היותר כך ש אמ״מ קיימת בחירה של כך ש בשורה האחרונה של הקוד. לכן גם לפי ההגדרה השקולה.
בכיוון השני, נניח לפי ההגדרה השקולה.
כלומר קיים אלגוריתם פולינומי שמכריע את . נסמן ב את הפולינום שחוסם את זמן הריצה של ונגדיר אלגוריתם דטרמינסטי שמקבל ופשוט מריץ את . השימוש ב יהיה כדי לקבוע את הבחירות הל״ד של כלומר, לפי הביט ה מתבצעת הבחירה ה באלגוריתם הל״ד.
כמובן ש פולינומי ובנוסף : אמ״מ קיימת ריצה עבורה אמ״מ קיים חסום ב כך ש ולכן לפי ההגדרה המקורית.
הגדרה
עבור בעיית הכרעה נגדיר: - כל הבעיות שניתן להכריע בעזרת אלגוריתם דטרמינסטי פולינומי עם גישת אורקל ל . - כל הבעיות שניתן להכריע בעזרת אלגוריתם ל״ד פולינומי עם גישת אורקל ל .
נוכל להגדיר גם בהינתן מחלקה כלשהי : ,