בעיית כיסוי קבוצות

בעיית כיסוי קבוצות (באנגלית: Set Cover Problem) היא בעיה קלאסית בקומבינטוריקה, מדעי המחשב, אופטימיזציה וסיבוכיות. הבעיה נכללת ברשימת 21 הבעיות ה-NP שלמות של קארפ. בעיית כיסוי הקבוצות היא בעיה חשובה בתחום אלגוריתמי קירוב. היא בעיה ש"לימודה הוביל לפיתוח טכניקות יסודיות לתחום הכולל" של אלגוריתמים מקורבים. הבעיה היא: נתונה קבוצה סופית S {\displaystyle S} של קבוצות סופיות, שאיחודן הוא הקבוצה U {\displaystyle U} . יש למצוא תת-קבוצה של S {\displaystyle S} בגודל מינימלי, שאיחוד הקבוצות בה הוא U {\displaystyle U} . כלומר יש למצוא את הכיסוי הקטן ביותר לקבוצה U {\displaystyle U} שהוא תת-כיסוי של S {\displaystyle S} . שאלה זו היא NP-קשה; וגרסת בעיית ההכרעה שלה היא NP-שלמה. הבעיה הזו היא דוגמה אופיינית וחשובה של בעיית אופטימיזציה בדידה. תכונה חשובה של בעיה בסיסית זו היא שניתן למצוא באופן יעיל קירוב סביר לאופטימום שלה - ניתן למצוא באופן יעיל פתרון לבעיה הקרוב לפתרון האופטימלי, בסיבוכיות שתהיה בסדר גודל של הלוגריתם של גודל הקבוצה שאותה יש לכסות. בהינתן קבוצה U {\displaystyle {\mathcal {U}}} וקבוצה S {\displaystyle {\mathcal {S}}} של תתי קבוצות של U {\displaystyle {\mathcal {U}}} , כיסוי הוא תת-קבוצה C ⊆ S {\displaystyle {\mathcal {C}}\subseteq {\mathcal {S}}} כך שאיחוד האיברים של C {\displaystyle {\mathcal {C}}} הוא U {\displaystyle {\mathcal {U}}} . הבעיה היא למצוא את הכיסוי המינימלי של U {\displaystyle {\mathcal {U}}} (כלומר הכיסוי שמשתמש בכמה שפחות איברים מ- C {\displaystyle {\mathcal {C}}} ). בגרסת בעיית ההכרעה של בעיית כיסוי הקבוצות נתון הזוג ( U , S ) {\displaystyle ({\mathcal {U}},{\mathcal {S}})} ומספר טבעי k {\displaystyle k} , והשאלה היא האם יש תת-קבוצה של S {\displaystyle {\mathcal {S}}} מגודל k {\displaystyle k} לכל היותר שמהווה כיסוי של U {\displaystyle {\mathcal {U}}} . בהנחה ונתונה לנו קבוצה U = { 1 , 2 , 3 , 4 , 5 } {\displaystyle {\mathcal {U}}=\{1,2,3,4,5\}} ומשפחה של קבוצות S = { { 1 , 2 , 3 } , { 2 , 4 } , { 3 , 4 } , { 4 , 5 } } {\displaystyle {\mathcal {S}}=\{\{1,2,3\},\{2,4\},\{3,4\},\{4,5\}\}} . איחוד של כל הקבוצות ב- S {\displaystyle {\mathcal {S}}} מכיל את כל האלמנטים ב- U {\displaystyle {\mathcal {U}}} . לעומת זאת כיסוי הקבוצות הקטן ביותר עבור מקרה זה יהיה: S E T C O V E R = { { 1 , 2 , 3 } , { 4 , 5 } } {\displaystyle SETCOVER=\{\{1,2,3\},\{4,5\}\}} . ניתן להציג את בעיית כיסוי קבוצות כבעיית תכנון ליניארי בשלמים כך: הדרך הפשוטה ביותר לבצע את זה היא על ידי אלגוריתם קירוב חמדני. באלגוריתם זה בונים תת-קבוצה של S {\displaystyle {\mathcal {S}}} כדלקמן: מתחילים מקבוצה ריקה ומצרפים לה מדי צעד איבר מ- S {\displaystyle {\mathcal {S}}} (שהוא למעשה תת-קבוצה של U {\displaystyle {\mathcal {U}}} ) המגדיל ככל האפשר (בשלב הנוכחי) את מספר האיברים באיחוד האיברים שכבר נבחרו (מוסיפים את האיבר שיכסה כמה שיותר איברים מ- U {\displaystyle {\mathcal {U}}} שעדיין לא כוסו). האלגוריתם משיג יחס קירוב של H ( n ) {\displaystyle H(n)} (כלומר הוא מוצא פתרון שקטן מ- H ( n ) {\displaystyle H(n)} פעמים גודל הכיסוי האופטימלי). כאשר H ( n ) = ∑ k = 1 n 1 k ≤ ln ⁡ n + 1 {\displaystyle H(n)=\sum _{k=1}^{n}{\frac {1}{k}}\leq \ln {n}+1} הוא המספר ההרמוני ה- n {\displaystyle n} -י. ו- n {\displaystyle n} הוא גודל הקבוצה שאותה צריך לכסות, כלומר | U | = n {\displaystyle |{\mathcal {U}}|=n} . למעשה ניתן להוכיח שהאלגוריתם משיג יחס קירוב של l n ( n ′ ) − l n ( l n ( n ′ ) ) + Θ ( 1 ) {\displaystyle ln(n')-ln(ln(n'))+\Theta (1)} כאשר n ′ {\displaystyle n'} הוא גודל האיבר הגדול ביותר ב- S {\displaystyle {\mathcal {S}}} (כיוון שכל איבר ב- S {\displaystyle {\mathcal {S}}} הוא למעשה תת-קבוצה של U {\displaystyle {\mathcal {U}}} ). לחלופין, ניתן למצוא קירוב טוב לפתרון בהסתמך על תכנון ליניארי בשילוב עם תהליך של עיגול מקרי. מדיה וקבצים בנושא בעיית כיסוי קבוצות בוויקישיתוף Vijay V. Vazirani, Approximation Algorithms, 2001 doi: 10.1007/978-3-662-04565-7 Korte & Vygen 2012, p. 414. אלגוריתמים, 2013, עמ' 21-22 Chvatal V., A Greedy Heuristic for the Set-Covering Problem, Mathematics of Operations Research, Vol. 4 No. 3, 1979, עמ' 233-235 Petr Slavík, A tight analysis of the greedy algorithm for set cover, STOC '96, 1996, עמ' 435–441 doi: 237814.237991