Uppsättningspackning är ett klassiskt NP-komplett problem inom beräkningskomplexitetsteori och kombinatorik , och är ett av Karps 21 NP-kompletta problem .
Föreställ dig att vi har en finit mängd S och en lista med delmängder av mängden S . Packningsproblemet frågar om det finns k delmängder i en lista som är parvis disjunkta.
Mer formellt, om en uppsättning och en familj av delmängder av uppsättningen ges , är en packning en underfamilj av uppsättningar så att alla uppsättningar från är parvis osammanhängande, och kallas storleken på packningen. I packningslösningsproblemet är indata ett par och ett tal . Frågan är att avgöra om det finns ett paket av storlek eller mer. I packningsoptimeringsproblemet är ingången ett par och uppgiften är att hitta en packning med så många uppsättningar som möjligt.
Det är tydligt att problemet tillhör NP , eftersom givet k delmängder kan vi helt enkelt kontrollera att de är parvis disjunkta i polynomtid .
Optimeringsversionen av problemet, den maximala packningen av uppsättningar , ställer frågan om det maximala antalet parvis osammanhängande uppsättningar från listan. Detta problem kan naturligtvis formuleras som ett heltalslinjärt programmeringsproblem , det tillhör klassen av packningsproblem , och dess dubbla linjära programmeringsproblem är ett uppsättningstäckande problem [1] .
Problemet med att hitta den maximala packningen kan formuleras som följande linjära heltalsproblem .
maximera | (hitta den maximala uppsättningen av delmängder) | ||
under förhållanden | för alla | (valda uppsättningar måste vara parvis osammanhängande) | |
för alla . | (vilket set är antingen packat eller inte) |
Som ett exempel, låt oss säga att du har en samling olika livsmedel i ditt kök ( ) och att du har en kokbok med en samling recept ( ). Varje recept kräver en viss uppsättning produkter. Du vill laga det maximala antalet rätter från kokboken (förutsatt att produkten endast används i en maträtt). I det här fallet letar du efter en uppsättningsförpackning ( ) av ( ) - en uppsättning recept där produkten inte ingår i två olika recept.
Som ett annat exempel, låt oss föreställa oss ett möte med utländska representanter, som var och en talar engelska och flera andra språk. Du vill tillkännage ett beslut för någon grupp av företrädare, men du litar inte på dem och du vill inte att de ska diskutera beslutet sinsemellan på ett språk som du inte förstår. För att uppnå detta väljer du en grupp på ett sådant sätt att inte två representanter talar ett annat språk än engelska. Å andra sidan vill du förmedla ditt beslut till maximalt antal representanter. I det här fallet är elementen i uppsättningen andra språk än engelska, och delmängderna är de språk som talas av specifika representanter. Om de två uppsättningarna inte överlappar varandra kan representanterna inte tala ett annat språk än engelska. Den maximala packningen kommer att välja största möjliga antal representanter under de givna begränsningarna. Även om problemet i allmänhet är svårlöst, skulle i det här exemplet en bra heuristik vara att välja representanter som talar ett enda språk (annat än engelska) så att många andra inte behöver uteslutas.
Det finns en viktad version av uppsättningspackningsproblemet där varje delmängd tilldelas en viss vikt (ett reellt tal) och vi vill maximera den totala vikten:
I det första exemplet kan vi tilldela receptet en vikt som är lika med antalet vänner som gillar rätten, så att middagen kommer att glädja det maximala antalet vänner.
Vikten verkar göra problemet svårare, men de flesta av de kända resultaten för problemet utan vikter gäller även för det viktade problemet.
Packningsproblemet kan vara svårt för vissa k , men det kanske inte är svårt att hitta ett k som det är lätt att lösa för vissa ingångar. Till exempel kan vi använda den giriga algoritmen , där vi hittar mängden som skär det minsta antalet andra mängder, lägger till den i lösningen och tar bort mängderna som den korsar sig med. Vi fortsätter att göra detsamma så länge det finns set. Vi kommer att få ett paket av någon storlek, men inte nödvändigtvis maxstorleken. Även om ingen algoritm alltid kan ge nära det maximala resultatet (se nästa avsnitt), ger denna heuristiska algoritm bra resultat i många praktiska tillämpningar.
Inte bara är packningsproblemet NP-komplett, utan optimeringsversionen har visat sig vara lika svår att uppskatta som det maximala klickproblemet . I synnerhet kan den inte approximeras med någon konstant faktor [2] . Den mest kända algoritmen approximerar med en faktor [3] . Den viktade varianten kan approximeras i samma utsträckning [4] .
Problemet har dock en variant som är mer formbar - om vi inte tillåter delmängder att ha mer än k ≥ 3 element, kan svaret approximeras med en faktor k / 2 + ε för valfri ε > 0. problem med 3-elementuppsättningar kan approximeras med en koefficient nära 50%. I en annan mer formbar variant, med villkoret att inget element är i mer än k delmängder, kan svaret approximeras med en faktor k . Detsamma gäller för den viktade versionen.
Det finns en en-till-en-minskning av polynomtiden mellan det oberoende uppsättningsproblemet och uppsättningspackningsproblemet:
Minskningen är en tvåvägs PTAS-reduktion och den visar att de två problemen är lika svåra att approximera.
Matchning och 3D-matchning är specialfall av setpackning. En matchning av maximal storlek kan hittas i polynomtid, men att hitta den största 3-dimensionella matchningen eller den största oberoende uppsättningen är NP-hårda problem.
Uppsättningsförpackning hör till familjen av problem med att täcka eller separera delar av en uppsättning. Ett av de relaterade problemen är problemet med att täcka setet . Här får vi också en mängd S och en lista med mängder, men utmaningen är att avgöra om vi kan välja k mängder som tillsammans innehåller alla element i S . Dessa uppsättningar kan överlappa varandra. Optimeringsversionen letar efter det minsta antalet sådana uppsättningar. Det maximala packningsproblemet kräver inte att alla delar täcks utan undantag.
Problemet med NP-komplett exakt täckning kräver å andra sidan att varje element ingår i exakt en delmängd. Att hitta en sådan exakt täckning, oavsett storlek, är en NP-komplett uppgift.
Karp visade NP-fullständigheten av setpackningsproblemet genom att reducera klickproblemet till det .
Se även: Förpackningar av hypergrafer .
Förpackningsuppgifter | |
---|---|
Packningscirklar |
|
Ballongpackning |
|
Andra paket | |
Pussel |