Somma del sottoinsieme, soluzione di programmazione dinamica pseudo-polinomiale?


8

Ho riscontrato il problema P vs NP qualche tempo fa e di recente ho lavorato sul problema della somma dei sottoinsiemi. Ho letto l' articolo di Wikipedia sul problema della somma dei sottoinsiemi e la domanda Algoritmo di somma dei sottoinsiemi

Ho esaminato il problema e trovato alcune soluzioni, ma finora sembrano essere NP, credo di poter realizzare un algoritmo sufficientemente veloce in tempo NP.

Il mio problema è che non sono bravo in teoria, quindi non mi aiuta molto a parlare del teorema di Cook-Levin o delle macchine di Turing non deterministiche.

Quello che vorrei è una spiegazione del sottoinsieme di programmazione dinamica temporale pseudo-polinomiale che su Wikipedia.

L'ho letto e credo di aver compreso il concetto generale del perché sia ​​NP anziché P (correlato alla dimensione dell'input piuttosto che alle operazioni con esso), ma non capisco l'algoritmo.

Gradirei se qualcuno potesse fornire un esempio con alcuni numeri e come funziona. Mi aiuterebbe molto perché avrebbe:

  • Dammi idee per migliorare il mio algoritmo futuro
  • Aiutami a capire intuitivamente quando un algoritmo è pseudo-polionomiale invece di NP.



2
Qual'è la domanda? Inizialmente pensavo che chiedessi un esempio di come funziona l'algoritmo a cui colleghi, ma ho seguito il collegamento e c'è già un esempio lì.
rgrig,

2
Ho anche difficoltà a capire i post, non è chiaro cosa mi viene chiesto. a proposito, ogni problema in P è anche in NP. Immagino che intendi NP-complete anziché NP in diversi punti del tuo post. Infine, non ha senso dire che un algoritmo è in NP, NP è una classe di linguaggi non algoritmi. La mia ipotesi è che tu abbia il malinteso comune che NP significa algoritmo di tempo non polinomiale (o tempo esponenziale).
Kaveh,

2
Se si associano le dimensioni ai valori nell'input (il numero di bit per ogni valore deve essere logaritmico nel numero totale di bit dell'ingresso), il problema può essere risolto in tempo polinomiale utilizzando la programmazione dinamica. Se non sono limitati, possono avere valori esponenzialmente grandi e la dimensione della tabella per la programmazione dinamica sarebbe esponenziale.
Kaveh,

Risposte:


5

Sostituendo il commento di Kaveh come risposta:

Se si associano le dimensioni ai valori nell'input (il numero di bit per ogni valore deve essere logaritmico nel numero totale di bit dell'ingresso), il problema può essere risolto in tempo polinomiale utilizzando la programmazione dinamica. Se non sono limitati, possono avere valori esponenzialmente grandi e la dimensione della tabella per la programmazione dinamica sarebbe esponenziale.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.