Riduzione polinomiale Nel partition si richiede l’esistenza o meno di un sottoinsieme di un insieme di interi positivi finito dato tale che:
Ne knapsack si ha come input in insieme finito di “oggetti” che hanno un peso intero ed un profitto intero >0, ed un valore di peso massimo . E’ evidente il problema di ottimizzazione vincolato al peso massimo, il problema di decisione associato sarà dire se esiste un sottoinsieme degli oggetti che pesa meno di ed ha profitto totale maggiore uguale a .
Riduzione partition Knapsack
Chiamando la somma totale dei numeri dell’insieme T, è ovvio che:
ed essendo uguali:
Quindi se è possibile fare questa divisione, esistono anche due insiemi la cui somma totale è (la condizione che la somma totale sia pari è necessaria ma non sufficiente). Identifichiamo il profitto e peso totale e del problema knapsack con ., ed i singoli pesi/profitti con i valori del numero .
Vediamo l’altro verso. Chiamiamo (da zaino) il sottoinsieme degli oggetti tale che il loro peso totale è minore uguale a , ed il profitto maggiore uguale a .
Ma abbiamo definito , quindi queste somme sono uguali. Vale:
analogamente
ma questo implica:
quindi abbiamo diviso gli oggetti di partenza in due sottoinsiemi con uguale somma totale. .