Kontinuerligt ryggsäcksproblem

Inom teoretisk datavetenskap är det kontinuerliga ryggsäcksproblemet (även känt som det fraktionella ryggsäcksproblemet ) ett algoritmiskt problem i kombinatorisk optimering där målet är att fylla en behållare ("knapsäcken") med fraktionerade mängder av olika material som valts för att maximera värdet av de valda materialen. Det liknar det klassiska ryggsäcksproblemet , där föremålen som ska placeras i behållaren är odelbara; dock kan det kontinuerliga ryggsäcksproblemet lösas i polynomtid medan det klassiska ryggsäcksproblemet är NP-hårt . Det är ett klassiskt exempel på hur en till synes liten förändring i formuleringen av ett problem kan ha stor inverkan på dess beräkningskomplexitet .

Problemdefinition

Ett exempel på antingen de kontinuerliga eller klassiska ryggsäcksproblemen kan specificeras av ryggsäckens numeriska kapacitet W , tillsammans med en samling material, som vart och ett har två siffror associerade med sig: vikten w i av material som är tillgängligt för valt och det totala värdet v i för det materialet. Målet är att välja en mängd x i w i av varje material, med förbehåll för kapacitetsbegränsningen

och maximera den totala nyttan
måste var och en av mängderna x i vara antingen noll eller w i ; det kontinuerliga ryggsäcksproblemet skiljer sig genom att låta x i sträcka sig kontinuerligt från noll till w i .

Vissa formuleringar av detta problem skalar om variablerna x i till att ligga i intervallet från 0 till 1. I detta fall blir kapacitetsbegränsningen

och målet är att maximera den totala nyttan

Lösningsteknik

Det kontinuerliga ryggsäcksproblemet kan lösas med en girig algoritm , först publicerad 1957 av George Dantzig , som betraktar materialen i sorterad ordning efter deras värden per viktenhet. För varje material väljs mängden x i så stor som möjligt:

  • Om summan av de val som gjorts hittills är lika med kapaciteten W , så sätter algoritmen x i = 0.
  • Om skillnaden d mellan summan av de val som gjorts hittills och W är mindre än w i , så sätter algoritmen x i = d .
  • I det återstående fallet väljer algoritmen x i = w i .

På grund av behovet av att sortera materialen tar denna algoritm tid O ( n log n ) på ingångar med n material. Men genom att anpassa en algoritm för att hitta viktade medianer är det möjligt att lösa problemet i tid O ( n ).