רדוקצייה

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

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

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

x:xS1f(x)S2

Pasted image 20230325150519.png|300

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

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

הערה

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

משפט: אם S2P וכן יש רדוקציית קארפ מ S1 ל S2 אזי S1P .
הוכחה: נבנה את האלגוריתם ל 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

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

ρ=(x1x2x3)(x1x3x4)(x1x4x3)

נבנה את 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 למעט אחד.

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

AlmostClique={(G,k) | G has an almost k size clique}

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

(G,k)Clique(G,k)Almostclique

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

V=V{u,u}E=E{(v,u),(v,u)  |  vV}

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

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

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

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

הבחנה

  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,vS(u,v)E(u,v)E

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

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

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

מסקנה: אם PNP אזי PNPC= .

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

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

xSy:|y|<P(|x|):V(x,y)=1xSy:|y|<P(|x|):V(x,y)=0

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

xSf(x)S

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

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

xSf(x)Sy:V(f(x),y)=1y:|y|P(g(x)):V(x,y)=1

באותו אופן

xSf(x)Sy:V(f(x),y)=0y:V(x,y)=0