Problemi non banali risolvibili in tempo costante?


14

Il tempo costante è la complessità assoluta della fine dei tempi. Ci si potrebbe chiedere: c'è qualcosa di non banale che può essere calcolato in tempo costante? Se ci atteniamo al modello della macchina di Turing, allora non si può fare molto, poiché la risposta può dipendere solo da un segmento iniziale di lunghezza costante dell'input, poiché parti più lontane dell'input non possono nemmeno essere raggiunte in tempo costante.

D'altra parte, se adottiamo il modello RAM a costo unitario un po 'più potente (e più realistico), in cui le operazioni elementari sui numeri di bit vengono conteggiate come singole fasi, allora potremmo essere in grado di risolvere non banali compiti, anche a tempo costante. Ecco un esempio:O(logn)

Istanza: numeri interi , ciascuno dato in formato binario da bit O ( log n ) .n,k,l,dO(logn)

Domanda: esiste un grafico -vertex, tale che la sua connettività vertice è k , la connettività del bordo è l e il suo grado minimo è d ?nkld

Si noti che dalla definizione non è nemmeno ovvio che il problema sia in NP . Il motivo è che il testimone naturale (il grafico) potrebbe aver bisogno di una descrizione lunga a , mentre l'ingresso è dato solo da bit O ( log n ) . D'altra parte, il seguente teorema (vedi Extremal Graph Theory di B. Bollobas) viene in soccorso.Ω(n2)O(logn)

Teorema: Sia numeri interi. Esiste un grafico n -vertex con connettività del vertice k , connettività del bordo l e grado minimo d , se e solo se è soddisfatta una delle seguenti condizioni:n,k,l,dnkld

  • , 0kld<n/2
  • 12d+2nkl=d<n1
  • k=l=d=n1.

Poiché queste condizioni possono essere verificate in tempo costante (nel modello RAM a costo unitario), il teorema conduce a un algoritmo a tempo costante in questo modello.

Domanda: quali sono alcuni altri esempi non banali di algoritmi a tempo costante?


6
La verifica di una prova probabilisticamente verificabile conta?
David Eppstein,

6
Non pensare che il tuo esempio sia volta. Il tuo input ha lunghezza m = O ( log n ) , nel qual caso la tipica parola RAM consentirebbe le operazioni O ( log m ) -bit in un solo passaggio. (L'alternativa è consentire un dimensionamento proporzionale alla lunghezza dell'input, ma in tal caso si possono nominare molti algoritmi "a tempo costante" ...) Si potrebbe provare ad aggiungere una stringa di lunghezza n dopo quei numeri, ma poi I non vedo come il controllo di quel formato verrebbe eseguito in O ( 1O(1)m=O(logn)O(logm)nO(1) time: sembra che devi controllare (tramite la ricerca binaria, diciamo) che la lunghezza totale della stringa sia , che richiede log n time. Ω(logn)logn
Ryan Williams,

4
Penso che il suggerimento di David Eppstein indichi una direzione più interessante: considerare gli algoritmi randomizzati O-1-time. Almeno in quel caso, puoi sperare che ogni bit di input sia accessibile in almeno una possibile esecuzione dell'algoritmo.
Ryan Williams,

4
Un semplice esempio di algoritmi randomizzati O (1) è la mediana approssimativa (approssimativa nel senso che dividerà l'input circa 50-50). Basta selezionare 1000000 elementi dall'input in modo uniforme a caso, calcolare la loro mediana e produrlo.
Jukka Suomela,

5
Mi piace la tua domanda, ma lo svantaggio del tuo esempio è che si basa su un teorema matematico. Spingendolo al limite si potrebbe dire: Istanza Intero positivo . Domanda Esiste un numero intero n > 2 tale che x n + y n = z n (la risposta è vera o falsa). Bene, esiste davvero un algoritmo a tempo costante perché la risposta è sempre falsa, ma questo chiaramente non è il tipo di esempi che desideri. x,y,zn>2xn+yn=zn
J.-E.

Risposte:



5

Esistono molti esempi di giochi studiati nella teoria dei giochi combinatori in cui lo stato di un gioco può essere descritto da un numero costante di valori interi. Per alcuni di questi, una strategia vincente per il gioco può essere calcolata in tempo costante. Ma sollevano anche domande su quale sia esattamente il tuo modello di calcolo.

Uno dei giochi combinatori più semplici e basilari è nim: uno ha un numero costante di pile di fagioli, e in una sola mossa puoi rimuovere qualsiasi numero di fagioli da una pila, vincendo o perdendo (a seconda della tua scelta di regole) se prendi l'ultimo fagiolo. La strategia ottimale può essere calcolata in tempo costante se si consentono operazioni xor booleane bit a bit (ovvero l'operatore ^ in linguaggi di programmazione come C / C ++ / Java / ecc.) È un algoritmo a tempo costante nel modello?

Eccone uno in cui è noto che esiste un algoritmo deterministico esatto a tempo costante (in un modello di calcolo esteso forse irrealistico che consente di testare la primalità di un numero in tempo costante) ma non si sa quale sia quell'algoritmo: dato un inizio mossa nel gioco del conio Sylver , determinare se si tratta di una mossa vincente o perdente. Un diagramma di flusso per questo problema è riportato in Berlecamp, Conway e Guy, Winning Ways , ma dipende da una serie finita di controesempi per una caratterizzazione generale delle mosse vincenti, e non si sa quale sia quell'insieme (o anche se lo sia vuoto).

Un altro esempio interessante della teoria del gioco combinatorio è il gioco di Wythoff. Ogni posizione di gioco può essere descritta da una coppia di numeri interi (ovvero, spazio costante, nel tuo modello di calcolo), le mosse nel gioco comportano la riduzione di uno di questi due numeri interi a un valore inferiore e la strategia vincente prevede il passaggio a una posizione in cui il rapporto tra questi due numeri interi è il più vicino possibile al rapporto aureo. Ma in molte posizioni di gioco c'è una scelta: puoi ridurre il più grande dei due numeri interi fino al punto in cui è (quasi) il numero intero più piccolo per il rapporto aureo, o il numero intero più piccolo diviso per il rapporto aureo. Solo una di queste due scelte sarà una mossa vincente. Quindi la strategia ottimale può essere definita in termini di un numero costante di operazioni aritmetiche, ma queste operazioni comportano un numero irrazionale, il rapporto aureo. È un algoritmo a tempo costante nel tuo modello? Forse è'n (un'approssimazione al rapporto aureo accurato a logn bit) ma non tempo costante utilizzando solo operazioni aritmetiche (senza radici quadrate) e valori di costanti interi fissi?


Grazie, questi sono tutti esempi interessanti. Hanno anche chiarito il fatto che il concetto di "tempo costante" è meno chiaro di quanto pensassi inizialmente ...
Andras Farago,

1

Se la scomposizione primaria dell'ordine |sol| di un gruppo sol è dato e un numero primo p, Che unire teorema di Cauchy e teorema di Lagrange , che si può verificare nel tempom, dove m sono il numero di divisori primi distinti di |sol|, Se sol ha un elemento di ordine p. Ora è chiaro che questo non è un tempo costante sem è variabile, ma se si tenta di trovare un tale elemento in modo ingenuo, ad esempio provando tutti gli elementi di sol, allora il tempo sarà almeno |sol|. Sem è fisso di quanto sia il tempo costante, vale a dire il tempo m, che è costante perché mè aggiustato. D'altra parte, se uno è pedante, di quanto si possa sostenere, non esiste un algoritmo a tempo costante se l'algoritmo deve prima leggere un input di lunghezza variabile per prendere una decisione.

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.