רדוקצייה

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

רדוקציית קארפ

תהיינה S1,S2 בעיות הכרעה. רדוקציית קארפ מ S1 ל S2 הינה פונקצייה f שניתנת לחישוב בזמן פולינומי ומקיימת

∀x:x∈S1↔f(x)∈S2

Pasted image 20230325150519.png|300

טרנזיטיביות של רדוקציות קארפ

רידוקציות בין 3 בעיות A,B,C הן טרנזיטיביות כלומר אם קיימת רידוקציית קארפ מ A→B וריקודציית קארפ מ B→C אז קיימת רידוקציית קארפ A→C

הערה

אם יש רדוקציית קארפ מ S1 ל S2 יש גם רדוקציית קוק מ S1 ל S2 שכן נוכל לכל x לחשב f(x) ולבדוק האם f(x)∈S2

משפט: אם S2∈P וכן יש רדוקציית קארפ מ S1 ל S2 אזי S1∈P .
הוכחה: נבנה את האלגוריתם ל S1 בהינתן קלט x

  1. חשב f(x)
  2. החזר f(x)∈S2

IS ו 3-SAT

נבנה רידוקצייה קארפ מבעיות ההכרעה של 3-SAT ל IS כלומר

S3SAT={ρ | ρ is a CNF formula that can be saturated}SIS={(G,k) | G is a graph with an independent set of size k}

כדי להוכיח שקיימת רידוקצייה כזאת נרצה למצוא פונקצייה f חשיבה פולינומית שתקיים

f(ρ)=(G,k)∈SIS↔ρ∈S3SAT

נתאר את הרידוקצייה באמצעות דוגמה על הנוסחה

ρ=(x1∨x2―∨x3)∧(x1―∨x3―∨x4)∧(x1―∨x4―∨x3)

נבנה את Gρ באופן הבא:

  1. כל שלישייה תהווה שלושה קודקודים שכולם מחוברים אחד לשני עם קשת.
  2. בין כל ליטרל נעביר קשת לשלישה שלו אם קיימת כזאת.

כך למשל עבור הנוסחה הנ״ל נקבל

Pasted image 20230325152832.png|500

וניתן לראות שקיימת השמה מספקת מהצורה x1,x4,x3 שזאת גם קבוצה k=3 בלתי תלויה של קודקודים.

תיאור הרידוקציה (קלט: ρ ב 3CNF)
נבנה גרף G ומספר k באופן הבא:
כל מופע של ליטרל ב ρ יהיה קודקוד ולכן מספר הקודקודים ב G הוא מספר הפסוקיות כפול 3 .
הקשתות ב G יהיו בין כל הליטרלים תחת אותה הפסוקית ובין כל ליטרל ושלילתו.
k מהווה את מספר הפסוקיות ב ρ

הוכחה נכונות:
נרצה להוכיח שאם ρ ספיקה אז f(ρ)∈SIS ובנוסף נוכיח את הcp של הכיוון השני כלומר ρ לא ספיקה אז. f(ρ)∉SIS.

← יהי ρ ספיקה אז נוכיח שבגרף שאנחנו בונים יש IS בגודל k .
אם היא ספיקה אז בכל פסוקית יש לפחות ליטרל אחד שמקבל T בכל פסוקית. נוכל לבחור ליטרל אחד בידיוק מכל פסוקית שקיבל T והקודקודים שנבחרו מהווים קבוצה בת״ל בגודל מספר הפסוקיות. הקבוצה הזאת היא בת״ל כי לא ייתכן שבכל פסוקית ליטרל ושלילתו יהיו T ולכן מאיך שבנינו את הגרף בין כל הקודקודים האחרים כשכל אחד מפסוקית אחרת לא תהיה קשת.

→ אם G מכילה קבוצה בת״ל בגודל k קבוצה זאת חייבת לקחת בידיוק קודקוד אחד מכל עמודה (שקול לפסוקית) וכל שנשאר לעשות זה להציב True עבור הליטרלים שבחרנו.

כמעט קליקה

נאמר שקבוצת קודקודים S בגרף G=(V,E) היא כמעט קליקה אם יש קשתות בין כל זוג קודקודים ב S למעט אחד.

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

Almost−Clique={(G,k) | G has an almost k size clique}

נרצה לבנות רידוקצייה קארפ מ Clique ל Almost-Clique באופן הבא:
בהנתן גרף (G,k) נבנה (G′,k′) כך ש

(G,k)∈Clique↔(G′,k′)∈Almost−clique

נבנה זאת על ידי

V′=V∪{u′,u′′}E′=E∪{(v,u′),(v,u′′)  |  v∈V}

ויתקיים k′=k+2

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

נניח ש (G,k) הוא קליקה ונסמן ב S את הקליקה ב G. לפי הבנייה ברור כי S∪{u′,u′′} הוא כמעט קליקה בגודל k+2 שכן אין קשת בין הקודקודים שהוספנו.

כעת נניח ש (G′,k′) היא כמעט קליקה ולכן קיימת כמעט קליקה S′ בגודל k′ .
אם שתי הקודקודים שהוספנו שייכים ל S′ אז הקשת החסרה היא בהכרח (u′,u′′) ולכן כשנוריד את הקודקודים האלו נקבל S קליקה בגודל k′−2 ב G.
אם זה לא המצב, קיימים שני קודקודים אחרים u,v∈S′ שאין בינהם קשת ולכן נוכל פשוט להוריד את את אחד מהם ביחד עם הקודוקדים שהוספנו אם צריך ונקבל שוב קליקה.

הבחנה

  1. לכל בעיית הכרעה S יש רדוקציית קוק ל S―
  2. לא לכל בעיית הכרעה S יש רדוקציית קארפ ל S― למשל אם S היא קבוצת כל הקלטים ו S―=∅

קליקה ו IS

נבנה רידוקציית קארפ מ IS ל clique באופן הבא:
בהינתן (G,k) קלט ל IS נבנה (G′,k′) קלט ל clique כך של

G=(V,E)→G′=(V,E―)  ,  k′=k

באופן הזה מתקיים ש (G,k)∈IS→(G,k′)∈clique כי קיימת קבוצה בת״ל S בגודל k ולכן

u,v∈S→(u,v)∉E→(u,v)∈E―

ולכן בהכרח קיימת קליקה בגודל k ב G′ .
הכיוון השני זהה לחלוטין.

סגירות לרדוקציית קארפ

טענה:
המחלקה P סגורה לרדוקציית קארפ (כלומר אם S∈P ויש רדוקציית קארפ מ S′ ל S אז גם S′∈P) והמחלקה NPC לא סגורה לרדוקציית קארפ.

מסקנה: אם P≠NP אזי P∩NPC=∅ .

טענה:
המחלקה NP סגורה לרדוקציית קארפ.

Pasted image 20230630235359.png
יהי S∈NP לכן קיים מוודא V ופולינום P כך ש:

x∈S↔∃y:|y|<P(|x|):V(x,y)=1x∉S↔∀y:|y|<P(|x|):V(x,y)=0

נניח כי יש רדוקציית קארפ מ S′ ל S כלומר קיימת פונקציה f שניתנת לחישוב בזמן פולינומי ומקיימת

x∈S′↔f(x)∈S

נגדיר מוודא V′ עבור S′ אשר מקבל זוג (x,y) מחשב את f(x) מחזיר את תשובת המוודא V על (f(x),y) .

האלגוריתם של V′ הינו פולינומי כי V ו f רצים בזמן פולינומי , נסמן את הפולינום החוסם את |f(x)| כ g(x) ויתקיים

x∈S′→f(x)∈S→∃y:V(f(x),y)=1→∃y:|y|≤P(g(x)):V′(x,y)=1

באותו אופן

x∉S′→f(x)∉S→∀y:V(f(x),y)=0→∀y:V′(x,y)=0