Partitionsproblem

Inom talteori och datavetenskap är partitionsproblemet , eller nummerpartitionering , uppgiften att avgöra om en given multimängd S av positiva heltal kan delas upp i två delmängder S 1 och S 2 så att summan av talen i S 1 är lika med summan av talen i S 2 . Även om partitionsproblemet är NP-komplett finns det en pseudopolynomisk tidsdynamisk programmeringslösning , och det finns heuristik som löser problemet i många fall, antingen optimalt eller ungefärligt. Av denna anledning har det kallats "det enklaste svåra problemet".

Det finns en optimeringsversion av partitionsproblemet, vilket är att dela upp multiuppsättningen S i två delmängder Si , S2 så att skillnaden mellan summan av element i S1 och summan av element i S2 minimeras. Optimeringsversionen är NP-hård , men kan lösas effektivt i praktiken.

Partitionsproblemet är ett specialfall av två relaterade problem:

  • I delmängdssummansproblemet är målet att hitta en delmängd av S vars summa är ett visst målnummer T givet som indata (partitionsproblemet är specialfallet där T är halva summan av S ).
  • I flervägsnummerpartitionering finns det en heltalsparameter k , och målet är att avgöra om S kan delas upp i k delmängder med samma summa (partitionsproblemet är specialfallet där k = 2).
  • Det är dock helt annorlunda än 3-partitionsproblemet : i det problemet är antalet delmängder inte fixat i förväg – det borde vara | S |/3, där varje delmängd måste ha exakt 3 element. 3-partition är mycket svårare än partition - den har ingen pseudopolynomisk tidsalgoritm om inte P = NP .

Exempel

Givet S = {3,1,1,2,2,1} är en giltig lösning på partitionsproblemet de två uppsättningarna S 1 = {1,1,1,2} och S 2 = {2,3}. Båda uppsättningarna summerar till 5, och de delar upp S . Observera att denna lösning inte är unik. S 1 = {3,1,1} och S 2 = {2,2,1} är en annan lösning.

Inte varje multimängd av positiva heltal har en partition i två delmängder med samma summa. Ett exempel på en sådan mängd är S = {2,5}.

Beräkningshårdhet

Partitionsproblemet är NP-svårt. Detta kan bevisas genom reduktion från delmängdssummaproblemet . En instans av DelmängdSumma består av en uppsättning S av positiva heltal och en målsumma T ; målet är att avgöra om det finns en delmängd av S med summan exakt T .

Givet en sådan instans, konstruera en instans av partition där indatamängden innehåller den ursprungliga mängden plus två element: z 1 och z 2 , med z 1 = summa(S) och z 2 = 2 T . Summan av denna ingångsmängd är summa( S ) + z 1 + z 2 = 2 sum( S ) + 2 T , så målsumman för partition är summa( S ) + T.

  • Anta att det finns en lösning S ′ till SubsetSum-instansen. Sedan summa( S ′) = T , så summa( S u { z 1 }) = summa( S ) + T , så S u { z 1 } är en lösning på partitionsinstansen.
  • Omvänt, anta att det finns en lösning S " till partitionsinstansen. Då S " innehålla antingen z 1 eller z 2 , men inte båda, eftersom deras summa är mer än summa( S ) + T . Om S'' innehåller z 1 måste den innehålla element från S med summan av exakt T , så S'' minus z 1 är en lösning på SubsetSum-instansen. Om S'' innehåller z 2 måste det innehålla element från S med summan av exakt summa( S ) − T , så de andra objekten i S är en lösning på SubsetSum-instansen.

Approximationsalgoritmer

Som nämnts ovan är partitionsproblemet ett specialfall av flervägspartitionering och delmängdsumma. Därför kan det lösas med algoritmer utvecklade för vart och ett av dessa problem. Algoritmer utvecklade för flervägsnummerpartitionering inkluderar:

  • Girig nummeruppdelning – går över siffrorna och sätter varje nummer i den uppsättning vars nuvarande summa är minst. Om siffrorna inte är sorterade är körtiden O( n ) och approximationsförhållandet är som mest 3/2 ("approximationsförhållande" betyder den större summan i algoritmens utdata, dividerat med den större summan i en optimal partition). Sortering av siffrorna ökar körtiden till O( n log n ) och förbättrar approximationsförhållandet till 7/6. Om talen är jämnt fördelade i [0,1], är approximationsförhållandet högst nästan säkert , och i förväntan.
  • Största skillnadsmetoden (även kallad Karmarkar–Karp-algoritmen ) sorterar siffrorna i fallande ordning och ersätter siffror upprepade gånger med deras skillnader. Körtidskomplexiteten är O( n log n ). I värsta fall är dess approximationsförhållande liknande – högst 7/6 . Men i det genomsnittliga fallet presterar den mycket bättre än den giriga algoritmen: när siffror är jämnt fördelade i [0,1], är dess approximationsförhållande som mest i väntan. Den presterar också bättre i simuleringsexperiment.
  • Multifit -algoritmen använder binär sökning i kombination med en algoritm för bin-packning . I värsta fall är dess approximationsförhållande 8/7 .
  • Delmängdens summaproblem har en FPTAS som kan användas för partitionsproblemet också, genom att sätta målsumman till summa( S )/2.

Exakta algoritmer

Det finns exakta algoritmer som alltid hittar den optimala partitionen. Eftersom problemet är NP-hårt kan sådana algoritmer ta exponentiell tid i allmänhet, men kan vara praktiskt användbara i vissa fall. Algoritmer utvecklade för flervägsnummerpartitionering inkluderar:

  • Den pseudopolynomiska tidsnummerpartitioneringen tar minne, där m är det största talet i inmatningen.
  • The Complete Greedy Algorithm (CGA) tar hänsyn till alla partitioner genom att konstruera ett binärt träd . Varje nivå i trädet motsvarar ett inmatat nummer, där roten motsvarar det största numret, nivån under det näst största numret, etc. Varje gren motsvarar en annan uppsättning där det aktuella numret kan läggas. Att korsa trädet i djup-första ordning kräver bara mellanslag, men det kan ta tid. Körtiden kan förbättras genom att använda en girig heuristik: i varje nivå utvecklar du först den gren där det aktuella numret sätts i setet med den minsta summan. Denna algoritm hittar först lösningen som hittas av girig nummerpartitionering , men fortsätter sedan med att leta efter bättre lösningar. Vissa varianter av denna idé är fullständigt polynom-tidsapproximationsscheman för delmängdssummaproblemet, och därmed även för partitionsproblemet.
  • Den kompletta Karmarkar-Karp-algoritmen (CKK) tar hänsyn till alla partitioner genom att konstruera ett binärt träd. Varje nivå motsvarar ett par siffror. Den vänstra grenen motsvarar att placera dem i olika delmängder (dvs. att ersätta dem med deras skillnad), och den högra grenen motsvarar att sätta dem i samma delmängd (dvs. att ersätta dem med deras summa). Denna algoritm hittar först lösningen som hittas av den största differensmetoden , men fortsätter sedan med att hitta bättre lösningar. Det går betydligt snabbare än CGA på slumpmässiga instanser. Dess fördel är mycket större när en lika partition finns, och kan vara av flera storleksordningar. I praktiken kan problem av godtycklig storlek lösas av CKK om talen har högst 12 signifikanta siffror . CKK kan också köras som en när som helst algoritm : den hittar KK-lösningen först och hittar sedan successivt bättre lösningar när tiden tillåter (kräver eventuellt exponentiell tid för att nå optimalitet, i de värsta fallen). Det kräver utrymme, men i värsta fall kan det ta tid.

Algoritmer utvecklade för delmängdssumma inkluderar:

  • Horowitz och Sanhi – går i tid , men kräver mellanslag.
  • Schroeppel och Shamir – går i tiden och kräver mycket mindre utrymme – .
  • Howgrave-Graham och Joux – körs i tid , men det är en randomiserad algoritm som bara löser beslutsproblemet (inte optimeringsproblemet).

Hårda instanser och fasövergång

Uppsättningar med endast en eller inga partitioner tenderar att vara svårast (eller dyrast) att lösa jämfört med deras inmatningsstorlekar. När värdena är små jämfört med storleken på uppsättningen är perfekta partitioner mer sannolika. Problemet är känt för att genomgå en " fasövergång "; är troligt för vissa uppsättningar och osannolikt för andra. Om m är antalet bitar som behövs för att uttrycka ett tal i mängden och n är storleken på mängden så att ha många lösningar och tenderar att ha få eller inga lösningar. När n och m blir större går sannolikheten för en perfekt partition till 1 respektive 0. Detta argumenterades ursprungligen baserat på empiriska bevis av Gent och Walsh, sedan genom att använda metoder från statistisk fysik av Mertens, och senare bevisade av Borgs , Chayes och Pittel.

Probabilistisk version

Ett relaterat problem, något liknande födelsedagsparadoxen , är att bestämma storleken på ingångsmängden så att vi har en sannolikhet på hälften att det finns en lösning, under antagandet att varje element i mängden är slumpmässigt utvalda med enhetlig fördelning mellan 1 och något givet värde. Lösningen på detta problem kan vara kontraintuitiv, som födelsedagsparadoxen.

Varianter och generaliseringar

Lika kardinalitetspartition är en variant där båda delarna ska ha lika många poster, förutom att ha lika summa. Denna variant är också NP-hård. Bevis . Givet en standardpartitionsinstans med några n nummer, konstruera en Equal-Cardinality-Partition-instans genom att lägga till n nollor. Det är uppenbart att den nya instansen har en lika-kardinalitet lika summa-partition om den ursprungliga instansen har en lika-summa-partition. Se även Balanserad nummeruppdelning .

Distinkt partition är en variant där alla ingående heltal är distinkta. Denna variant är också NP-hård. [ citat behövs ]

Produktpartition är problemet med att partitionera en uppsättning heltal i två uppsättningar med samma produkt (snarare än samma summa). Detta problem är starkt NP-hårt .

Kovalyov och Pesch diskuterar ett generiskt tillvägagångssätt för att bevisa NP-hårdhet hos problem av partitionstyp.

Ansökningar

En tillämpning av uppdelningsproblemet är för manipulation av val . Anta att det finns tre kandidater (A, B och C). En enskild kandidat bör väljas med hjälp av en röstningsregel baserad på poängsättning, t.ex. vetoregeln (varje väljare lägger sitt veto mot en enskild kandidat och den kandidat som har minst veton vinner). Om en koalition vill säkerställa att C väljs, bör de dela upp sina röster mellan A och B för att maximera det minsta antalet veton var och en av dem får. Om rösterna viktas, kan problemet reduceras till partitionsproblemet, och därmed kan det lösas effektivt med CKK. Detsamma gäller för alla andra röstningsregel som är baserade på poängsättning.

Anteckningar