NP-completeness

NP-hardness :
עבור בעיית הכרעה S , זאת תקרא NP-קשה (NPH) אם קיימת רדוקציית קארפ מכל בעייה SNP ל S .

NP-completeness :
נאמר ש S היא NP-שלמה אם היא NP-קשה וגם SNP .

משפט: קיימת בעיה שהיא NP-שלמה
הוכחה: נשתמש ב מכונת טיורינג אוניברסלית u . נזכיר שמכונת טיורינג אוניברסלית u(M,x) מקבלת כקלט תיאור של מכונת טיורינג M וקלט על המכונה ומחזירה M(x) .

נגדיר את בעיית ההכרעה Su הבאה:

Su={M,x,1t | y:|y|t:M(x,y)=1M determine the input after at most t steps}

כמו כן נשים לב ש M זאת מכונת טיורינג שמקבלת 2 קלטים ו 1t=1111t times
זאת אכן בעיית NP-שלמה, נוכיח זאת.

f(x)=VS,x,1PVS(|x|+P(|x|))

כאשר VS הוא המוודא הפולינומי של S. הקלט ל VS אורכו |x|+|y||x|+P(|x|) כלומר פולינומי לאורך הקלט.
יהי PVS הפולינום החוסם את זמן הריצה של VS כפונקצייה של אורך הקלט שלו. כלומר

TVS(|x|+|y|)PVS(|x|+|y|)PVS(|x|+P(|x|))

כאשר TVS זאת פונקציית זמן הריצה של VS על קלט באורך מסויים. אכן נקבל ש xS אמ״מ קיים y חסום פולינומית ב P כך ש VS(x,y)=1 אמ״מ f(x)Su שכן השתמשנו באלגוריתם הוידאו כייצוג של המכונה שלנו. כדרוש.

Cook-Levin

משפט cook-levin אומר שבעית SAT היא NP-שלמה.
ההוכחה שלו דורשת להסתכל על בעיה אחרת CSAT- נתון מעגל בוליאני ויש להכריע האם יש לו השמה מספקת.
מעגל בוליאני - הוא גרף ללא מעגלים מכוון שקודקודיו מתחלקים ל3 סוגים

  1. קודקודי קלט- ללא קשתות נכנסות
  2. קודקודי פלט - ללא קשתות יוצאות, קשת נכנסת אחת
  3. שערים- קודקודים עם degin2 ו degout1

Pasted image 20230411185319.png|300

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

CSAT היא NP-שלמה

השלב הראשון של ההוכחה אם כן היא להראות שלכל SNP קיימת f חשיבה פולינומית כך ש xSf(x)=CxSCSAT כאשר

SCSAT={C | C is a boolean circle graph that can be saturated}

תהי SNP , אזי ל S ישנו מוודא פולינומי VS כך ש y:|y|P(|x|):VS(x,y)=1xS וזמן הריצה של VS חסום על ידי PVS(|x|+|y|)PVS(|x|+P(|x|))=t .

נבנה טבלה שמייצגת ריצה של מכונת טיורינג על הקלט (x,y) לפי הריצה של VS (אפשר לעשות זאת כי הראנו שכל בעיה בNP אפשר ״להמיר״ לבעיית NP-שלמה שהקלט שלה הוא מכונת טיורינג)
פונקציית המעברים הינה

Σ×QΣ×Q×{+1,1,0}

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

Pasted image 20230412121928.png|400

נתבונן בטבלת ריצת המוודא VS (המכונה הדו מימדית) על קלט (x,y) נרצה להמיר את טבלת הריצה למעגל לוגי Cx כך ש Cx(y)=VS(x,y) ואז יתקיים

y:Cx(y)=1y:VS(x,y)=1xS

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

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

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

כעת משהבנו איך תיאור המכונה יעבוד ונראה על הטבלה הנ״ל נוכל לנצל זאת כדי לבנות את המעגל Cx . ניקח את הטבלה ונבנה ממנה מעגל בגודל t×t המורכב מאיחוד של המעגלים הקטנים יותר שקובעים את הערך של כל תא בשורה מסויימת, המשתנים של המעגל יהיו x,y שנמצאים בשורה הראשונה לאחר ההשמה. תוצאת הפלט תהיה accept או true אמ״מ VS(x,y)=1 כלומר המכונה מכריעה את הקלט. במצב שבוא VS(x,y)=0 נקבל שגם המעגל שלנו לא ספיק ולכן

y:Cx(y)=1y:VS(x,y)=1xS

כדרוש.

קיימת רידוקציית קארפ מ CSAT ל SAT

כעת הוכחנו שבעיית CSAT היא NP-שלמה, כל שנשאר לעשות הוא לבנות רידוקציית קארפ ממנה ל SAT. מטרנזיטיביות הרידוקציית יתקיים שגם היא שלמה. נרצה שבהינתן מעגל בוליאני C בנות נוסחה Φ בצורת CNF כך ש CCSATΦSAT.

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

אם כן, האינטואיצייה תהיה ״לפצל״ את המעגל לכמה מעגלים קטנים, מכל אחד נבנה נוסחה בצורת CNF ולבסוף נחזיר נוסחה שתהיה מורכבת מכל הנוסחאות הקטנות.
נסמן את קודקודי הקלט ב x1,xn ואת השערים ב g1,,gm ונגדיר נוסחה עם n+m משתנים כנגד קודקוד הפלט והשערים ב C. למשל עבור המעגל
Pasted image 20230412141128.png|300
נקבל נוסחה מהצורה
Pasted image 20230412141152.png|350
נשים לב שהוספנו פרדיקט של EQ שהמטרה שלו היא לבדוק שיוויון בין gi המשתנה לנוסחה שממנה הוא מורכב במעגל. באופן הזה הגרף מבטיח שהפרקדיט EQ יחזיר true רק אם המשתנה ב״גרף״ החדש שבנינו יקבל ערך ששקול לערך שהוא מקבל במעגל C. תחת ההבנה הזאת נוכל לקחת כל פרדיקט EQ ולבנות טבלת אמת בין שני הגורמים שמרכיבים אותו. אלו יהיו תמיד על מספר משתנים בגודל קבוע כי מתחילים מהנעלמים ומתקדמים לכיוון הפלט. לאחר שנמיר את ה״גרף״ לפסוקיות בצורה CNF נשים בין כולם ונגיע לתוצאה הרצויה (כמעט).

לכל שער i במעגל C נגדיר נוסחה בצורת CNF נסמנה Φi שתהיה מסופקת אמ״מ הערך שמקבל המשתנה gi עקבי עם הערך שמקבל השער gi במעגל C. לדוגמה עבור

g1=x1x2
x1 x2 g1 g1=x1x2
T T T T
T T F F
T F T F
T F F T
F T T F
F T F T
F F T F
F F F T

נזכיר שכדי להמיר את הפסוקית לצורת CNF לוקחים את כל הפסוקיות שמחזירות false ומפעילים not כל כולם ולכן

(g1=x1x2)(x1x2g1)(x1x2g1)(x1x2g1)(x1x2g1)(x1x2g1)(x1x2g1)(x1x2g1)(x1x2g1)

לאחר שיש לנו את כל הפסוקיות Φ1Φm נרצה לבנות פסוקית נוספת מהקודקוד שנכנס לקודקוד הפלט. כלומר כרגע יש לנו את התוצאה של

i=1mΦi

נרצה לוודא בנוסף שגם הקודקוד שנכנס לקודקוד הפלט הוא true ולכן נוסיף פסוקית נוספת Φm+1=gm במקרה הנ״ל Φ5=g4 . לבסוף נחזיר

i=1m+1Φi

Pasted image 20230412150140.png|400
זמן בנייה מספר השערים ב C חסום ליניארית באורך הקלט. עבור כל שער ביצענו O(1) צעדים (כיוון שמשתמשים לכל היותר ב 3 קודקודים) כדי לבנות נוסחה Φi .

כעת נרצה להוכיח ש CCSATΦSAT :
נניח CCSAT לכן קיימת השמה z=z1zn עבור קודקודי הקלט במעגל שתספק אותו. נסתכל על ההשמה לנוסחה בה כל משתנה xi מקבל את הערך zi וכל משתנה gi מקבל את הערך של השער gi במעגל ל C .
לפי הבנייה כל Φi מסופקת וכן הפסוקית Φm+1 מסופקת כי C(z)=T .

נניח ΦSAT לכן קיימת השמה z=z1,,zn למשתנים ב Φ שמספקת אותה. נשים לב שההצבה הנ״ל מספקת את המעגל מהבנייה של Φ.

הבחנה

3SAT היא גם כן NP-שלמה כי ראינו עכשיו שברידוקצייה מ CSAT ל SAT בכל פסוקית יש לכל היותר 3 ליטרלים

הבחנה

ראינו ש SAT היא NPC וראינו רדוקציית קארפ מ SAT ל IS ולכן היא גם כן שייכת ל NPC

תזכורת

אם יש רידוקציית קארפ מ A ל B כך ש BNP אזי ANP

Vertex Cover

נתון גרף G=(V,E) ונתון מספר k. נרצה לדעת האם גרף G ישנם k קודקודים שמכסים את כל הקשתות.

Pasted image 20230602191430.png

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

כעת, נראה רדוקציית קארפ מ IS ל VC.
לשם הרידקוצייה נוכיח את טענת העזר הבאה:
עבור G=(V,E) ו SV קבוצה בת״ל המקיימת |S|=k . אזי, VS=S היא קבוצה המקיימת VC. יותר מזה,

S is independentS is vertex cover

הסבר:
אם S בלתי תלוי אזי לכל קשת (u,v)E מתקיים ש uS או ש vS כי אחרת שניהם ב S וזו סתירה לכך ש S בת״ל. כלומר בהכרח מתקיים שאחד מהם נמצא ב S ולכן זאת תכסה את כל הקשתות.
מצד שני, אם S היא ב VC אזי S היא בת״ל תחת אותו הסבר, לא ייתכן שישנה קשת (u,v) ששני קצותיה נמצאים בתוך S .

מטענת העזר נוכל לבנות רידוקציית קארפ מ IS ל VC על ידי

f(G,k)= (G, |V(G)|-k)

הנכונות נובעת ישירות מטענת העזרת.