Ci sono problemi il cui algoritmo più noto ha tempo di esecuzione


18

Non ho mai visto un algoritmo con un registro nel denominatore prima e mi chiedo se ci sono algoritmi effettivamente utili con questo modulo?

Comprendo molte cose che potrebbero causare la moltiplicazione di un fattore di registro in fase di esecuzione, ad esempio ordinamento o algoritmi basati su albero, ma cosa potrebbe farti dividere per un fattore di registro?


24
Mergesort, con . f(n)=nlog2n
Jeffε

12
@ Jɛ ff E snarky Mcsnarkster
Suresh Venkat

5
Ordinamento Radix: è davvero . Quello che sta succedendo è che a causa dell'accesso casuale, puoi salvare un fattore di registro ....O(nlogn/logn)
Sariel Har-Peled,

Mi chiedo se il teorema della gerarchia DTIME possa essere usato come argomento per l'esistenza di tali algoritmi, dato che si può fare un simile trucco per risparmiare spazio nel modello RAM.
Chazisop,

Risposte:


41

La solita risposta a "cosa potrebbe farti dividere per un registro?" è una combinazione di due cose:

  1. un modello di calcolo in cui sono consentite operazioni aritmetiche a tempo costante su numeri interi di dimensioni di parole, ma in cui si desidera essere prudenti su quanto sono lunghe le parole, quindi si assumono bit per parola (perché meno di quello e non potevi nemmeno occuparti di tutta la memoria, e anche perché gli algoritmi che usano le ricerche delle tabelle richiederebbero troppo tempo per impostare le tabelle se le parole fossero più lunghe), eO(logn)
  2. un algoritmo che comprime i dati comprimendo i bit in parole e quindi opera sulle parole.

Penso che ci siano molti esempi, ma l'esempio classico è l' algoritmo dei Quattro Russi per le sottosequenze comuni più lunghe ecc. In realtà finisce per essere , perché usa l'idea del bit-pack ma poi salva un secondo fattore di log usando un'altra idea: sostituire i blocchi di operazioni di bit con una singola ricerca di tabella.O ( log 2 n )O(n2/log2n)O(log2n)


35

Il cubo di Rubik è un esempio molto naturale (e per me inaspettato). Un cubo n×n×n richiede Θ(n2/logn) passaggi per risolvere. (Nota che questa è una notazione theta, quindi è un limite superiore e inferiore stretto).

Questo è mostrato in questo documento [1].

Vale la pena ricordare che la complessità della risoluzione di istanze specifiche del cubo di Rubik è aperta, ma ipotizzata NP-difficile (discussa qui per esempio) NP difficile [2]. L' algoritmo Θ(n2/logn) garantisce una soluzione e garantisce che tutte le soluzioni siano asintoticamente ottimali, ma potrebbe non risolvere istanze specifiche in modo ottimale. La tua definizione di utile può o non può essere applicata qui, poiché i cubi di Rubik non vengono generalmente risolti con questo algoritmo ( l'algoritmo di Kociemba viene generalmente utilizzato per cubetti di piccole dimensioni in quanto offre soluzioni rapide e ottimali nella pratica).

[1] Erik D. Demaine, Martin L. Demaine, Sarah Eisenstat, Anna Lubiw e Andrew Winslow. Algoritmi per la risoluzione dei cubi di Rubik. Atti del 19 ° Simposio europeo annuale sugli algoritmi (SEC 2011), 5-9 settembre 2011, pagine 689-700

[2] Erik D. Demaine, Sarah Eisenstat e Mikhail Rudoy. Risolvere il cubo di Rubik in modo ottimale è NP-completo. Atti del 35 ° Simposio internazionale sugli aspetti teorici dell'informatica (STACS 2018), 28 febbraio-3 marzo 2018, pagine 24: 1-24: 13.


16

Un esempio di che appare nel denominatore senza trucchi per l'imballaggio dei bit è un recente articolo di Agarwal, Ben Avraham, Kaplan e Sharir sul calcolo della distanza discreta di Fréchet tra due catene poligonali nel tempo O ( n 2 log log n / log n ) . Anche se non ho familiarità con i dettagli dell'algoritmo, un trucco generale è quello di suddividere l'input in pezzi relativamente piccoli e quindi combinare le risposte in modo intelligente (ovviamente questo sembra dividere e conquistare, ma non si ottiene il registro n nel denominatore con alcuni trucchi intelligenti)lognO(n2loglogn/logn)


5
Questa è un'istanza più complessa della tecnica dei "Quattro russi" descritta nella risposta di David.
Jeffε

13

Non esattamente quello che hai chiesto, ma una situazione "allo stato brado" in cui un fattore di registro appare nel denominatore è il documento " Pebbles and Branching Programs for Tree Assessment " di Stephen Cook, Pierre McKenzie, Dustin Wehr, Mark Braverman e Rahul Santhanam.

Il problema di valutazione dell'albero (TEP) è: dato un albero -ary annotato con i valori in { 1 , ... , k } sulle foglie e le funzioni { 1 , ... , k } d{ 1 , ... , k } sui nodi interni , valuta l'albero. Qui ogni nodo interno ottiene il valore della sua funzione annotata sui valori dei suoi figli. Questo è un problema facile e il punto è mostrare che non può essere risolto nello spazio logaritmico (quando l'altezza dell'albero fa parte dell'input). A tal fine, siamo interessati alla dimensione dei programmi di diramazione che risolvono la TEP.d{1,...,K}{1,...,K}d{1,...,K}

Nella sezione 5, vengono presentati limiti stretti per alberi di altezza 3, sia per TEP che per il relativo problema BEP, in cui l'output viene compresso a in modo arbitrario. Per TEP il limite è Θ ( k 2 d - 1 ) , mentre per BEP il limite è Θ ( k 2 d - 1 / log k ) , ovvero si ottiene un salvataggio del log k .{0,1}Θ(K2d-1)Θ(K2d-1/logK)logK


12

Anche se non si tratta di runtime, ho pensato che valesse la pena menzionare il risultato classico di Hopcroft, Paul e Valiant: [1], poiché è ancora in lo spirito di "cosa potrebbe farti salvare un fattore log."TioME[t]SPUNCE[t/logt]

Ciò fornisce molti esempi di problemi il cui limite superiore più noto alla complessità dello spazio ha un registro nel denominatore. (A seconda del tuo punto di vista, penso che o renda questo esempio molto interessante - che straordinario teorema! - o molto poco interessante - probabilmente non è "realmente utile".)

[1] Hopcroft, Paul e Valiant. In tempo contro spazio . J. ACM 24 (2): 332-337, 1977.



8

L'algoritmo più noto per calcolare la distanza di modifica (nota anche come Levenshtein) tra due stringhe di lunghezza richiede il tempo O ( ( n / log n ) 2 ) :nO((n/logn)2)

William J. Masek, Mike Paterson: un algoritmo di calcolo più veloce Modifica le distanze. J. Comput. Syst. Sci. 20 (1): 18-31 (1980).


4
Ancora una volta, questa è una variante dell'algoritmo dei Quattro Russi, credo.
David Eppstein,

7

appare come il limite corretto per un problema considerato da Greg e Paul Valiant (nessuna connessione ai trucchi dei bit):Θ(n/logn)

Gregory Valiant e Paul Valiant, Il potere degli stimatori lineari, 2011. Nel 52 ° Simposio annuale IEEE sulle basi dell'informatica, FOCS 2011.


7

Ecco un altro esempio di limite stretto con un fattore di registro. (Questo è il Teorema 6.17 di Boolean Function Complexity: Advances and Frontiers di Stasys Jukna.)

Θ(n2/logn)n

mpoly(m)n:=O(mlogm)O(logm)mΘ(m2logm)Θ(n2/logn)nn


2

θ(nlog(n))θ(nlog(n))


3
2n/lognn

-2

O(f(n))O(f(n)logf(n))f(n)=nO(nlogn)


2
DTioME(n/logn)

?? c'è ancora teoria per gli algoritmi del tempo sublineare ...
vzn

3
gli algoritmi sublineari hanno senso nei modelli Oracle e di accesso casuale. DTIME è definito in modo standard wrt multitape TM, e questa è la definizione utilizzata nel teorema della gerarchia per DTIME.
Sasho Nikolov,

1
DTioME(n/logn)n/lgnn/lgn

5
n/lgnO(n/logn)nnf(n)<nDTioME(f(n))KK
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.