La complessità dei problemi fortemente NP-difficili o completi cambia quando il loro input è codificato unario?


12

La difficoltà di un problema fortemente NP-hard o NP-complete (come ad esempio definito qui ) cambia quando il suo input è unario anziché codificato binario?

Che differenza fa se l'ingresso di un problema fortemente NP-difficile è codificato unario? Voglio dire, se prendo ad esempio il problema debolmente completo di zaino NP, è NP completo quando è codificato binario ma può essere risolto in tempo polinomiale mediante programmazione dinamica quando codificato unario. Forse ha alcune implicazioni per la durezza dei livelli più alti dell'erarchia del tempo polinomiale?

La nozione di forte ...- dura anche per altre classi di complessità, ad esempio classi superiori della gerarchia temporale polinomiale?

In precedenza ho posto questa domanda su StackOverflow.com ma è stato sottolineato che qui è più appropriato.


Dovrei forse porre questa domanda meglio su cstheory.stackexchange.com ? Non sapevo che esistesse. Qui i rispondenti non vanno nella direzione che speravo.
user2145167

Perché non lo fanno? Sono (per quanto posso dire) corretti, quindi forse la tua domanda non è quella che vuoi porre? Inoltre, Theoretical Computer Science è per le domande TCS a livello di ricerca , cosa che sicuramente non lo è.
Raffaello

Risposte:


4

Una dimensione problematica di codificata in unario è la dimensione e se binaria. Se il tempo impiegato è , questo è nel primo caso e nel secondo caso. Quindi un algoritmo polinomiale per il primo caso sarà probabilmente esponenziale per il secondo. La codifica del problema può quindi cambiare radicalmente la complessità di un algoritmo.N log N F ( N ) F ( dimensione ) F ( 2 dimensioni )NNlogNF(N)F(size)F(2size)


3

No.

Se modifichi la codifica dell'input, hai modificato la definizione formale del problema, il che significa che si tratta di un problema diverso . La complessità del problema originale non cambia, per lo stesso motivo per cui indicare una luce diversa nel cielo non cambia la massa della luna.


2
Penso che la domanda sia se per qualsiasi problema NP-difficile la versione unaria non sia NP-difficile. P 1PP1
Raffaello

2

La risposta breve è che se l'input è codificato in modo unario, è più lungo . È esponenzialmente più lungo. Ora, un algoritmo che funziona in un tempo polinomiale delle dimensioni dell'input ha "abbastanza tempo" per risolvere il problema, solo perché l'input stesso è esponenzialmente più lungo rispetto al problema originale.


1

Vedendo oltre il problema della formulazione sottolineato nella risposta di JeffE, la risposta è sì.

Considera il problema dello zaino . Ha un algoritmo pseudo-polinomiale , ovvero uno con runtime limitato da un polinomio in un numero codificato nell'input. Poiché nella codifica unaria i valori corrispondono alla lunghezza, si tratta di un algoritmo a tempo polinomiale per la versione unaria.

In effetti, ogni problema debolmente completo di NP rientra in questa categoria.


Domanda a margine, ma non ho mai capito: come si fa a "codificare" qualcosa in unario? Non hai bisogno di un delimitatore di qualche tipo?
user541686

@Mehrdad Sì e no. Sì; i simboli di separazione in genere non vengono conteggiati in questo senso, cfr. anche input vs tape tape; qui consideriamo solo la dimensione dell'alfabeto di input. No; in linea di principio, un numero è sufficiente per codificare tuple e insiemi numerabili di numeri in modo da non aver bisogno di simboli di separazione. Questo chiaramente non è utile per "lavorare" con tali macchine, ma giustifica ignorare i simboli di separazione (e altri controlli).
Raffaello

Hmm ... Non sono sicuro di aver capito la tua parte "no"; come faresti a sapere dove finisce il numero se non avessi un separatore alla fine? A me sembra un po 'una logica circolare: se ignoriamo i separatori, allora effettivamente la domanda diventa "se forziamo l'input a occupare in modo esponenziale più spazio, ciò cambia il tempo di esecuzione di un algoritmo esponenziale rispetto alla dimensione dell'input ?" la cui risposta è banalmente sì ... per definizione. Non sta cambiando molto la codifica ma sta aggiungendo artificialmente bit ridondanti una volta presi in considerazione i separatori.
user541686

@Mehrdad Ok, stavo solo pensando di separare più numeri l'uno dall'altro. In ogni caso, hai bisogno di marcatori di fine resp. simboli "vuoti" su macchine Turing; di cui non puoi liberarti. Il resto è possibile codificare in un numero (ovviamente con una penalità di runtime).
Raffaello
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.