Algoritmi potenti troppo complessi da implementare


67

Quali sono alcuni algoritmi di utilità legittima che sono semplicemente troppo complessi da implementare?

Vorrei essere chiaro: non sto cercando algoritmi come l'attuale algoritmo di moltiplicazione della matrice ottimale asintotica (Coppersmith-Winograd), che è ragionevole da implementare ma ha una costante che lo rende inutile nella pratica. Sto cercando algoritmi che potrebbero plausibilmente avere un valore pratico, ma sono così difficili da codificare che non sono mai stati implementati, implementati solo in impostazioni estremamente artificiali o implementati solo per applicazioni straordinariamente speciali.

Inoltre sono benvenuti gli algoritmi quasi impossibili da implementare che hanno buoni asintotici ma che probabilmente avrebbero scarse prestazioni reali.


1
facendo questo CW, dal momento che potrebbe essere una lunga lista.
Suresh Venkat,

4
Esiste una metrica per "quasi impossibile da implementare"? C'è una teoria che la definisce?
Ritwik Bose,

@Mechko, forse un limite inferiore delle dimensioni della più piccola macchina di Turing che produce una descrizione di una macchina di Turing che è un'implementazione dell'algoritmo. :)
Radu GRIGore,

@Radu GRIGore è una metrica accettata o che dovrebbe essere sviluppata? Suppongo che (per ora) esiste una linea semplice e inamovibile che definisce "meh, non ne vale la pena" ...: D
Ritwik Bose,

4
Sono interessato al suggerimento che Coppersmith-Winograd è ragionevole da attuare. Qualcuno ha mai visto un'implementazione scritta anche in pseudo-codice di alto livello e qualcuno ha mai stimato le costanti?
Raphael,

Risposte:


33

Chazelle ha dato un algoritmo temporale lineare per triangolare un semplice poligono . Skiena ha scritto (p.575, Algorithm Design Manual) che è "sufficientemente disperato da implementare da qualificarsi più come una prova dell'esistenza"


3
L'algoritmo ha costanti ragionevoli?
jbapple,

È questo l'unico algoritmo di tempo lineare noto per il problema?
Thomas Ahle,

2
@ThomasAhle Credo che sia l'unico algoritmo di tempo lineare deterministico noto. Amato, Goodrich e Ramos ne hanno una più semplice randomizzata: cs.princeton.edu/courses/archive/fall05/cos528/handouts/…
Nikolov,

Il semplice algoritmo di triangolazione poligonale a tempo lineare di Chazelle, per quanto ne sappia, non è mai stato implementato e probabilmente non lo sarà mai a causa della sua complessità e anche perché le costanti sono alte, quindi non sarà in grado di competere con le alternative nella pratica. Importanti risultati teorici però. Ralph Boland
Ralph Boland,

Ti chiederò di nuovo: l'algoritmo ha costanti ragionevoli?
user1271772

29

L' algoritmo Risch per il calcolo di antiderivativi elementari. Secondo Wikipedia, nessun pacchetto software è noto per implementare l'algoritmo completo a causa della sua complessità.


3
Wikipedia sottolinea inoltre che questo non è un algoritmo ma un semi-algoritmo perché richiede euristica per risolvere il problema costante.
sclv,

Cos'è l'euristica? Puoi dare qualche link per saperne di più?
zygimantus,

22

Qualsiasi algoritmo che utilizza i risultati di Robertson-Seymour per inferire un algoritmo "polytime" per cose che coinvolgono grafici che escludono un minore fisso richiede problemi. La costante nascosta nel loro risultato è "galattica".


3
È anche difficile da implementare o ha solo un'enorme costante?
Lev Reyzin

5
Sì, questo non sembra un buon esempio. Se ho capito bene, la domanda riguarda gli algoritmi che potrebbero essere pratici (quindi probabilmente costanti "piccole") ma sono troppo complessi da implementare. Naturalmente, l'intera domanda è aperta a diverse interpretazioni :-)
Aryabhata,

5
Il problema è che la costante deriva dall'ampio elenco di minori che è necessario escludere per una determinata proprietà. Non conosco alcun modo per generare l'elenco desiderato di minori esclusi per una determinata proprietà, quindi non è solo un problema di scala.
Suresh Venkat,

2
Ad esempio, non conosciamo nemmeno l'elenco dei minori esclusi per i grafici incorporabili nel toro.
Derrick Stolee,

17
Il problema qui sembra più profondo: non esiste un modo efficace per generare l'elenco dei minori, quindi questo non produce affatto un algoritmo. La maggior parte delle proprietà chiuse da minori producono un elenco infinito di minori esclusi, se si traduce direttamente l'espressione logica. Il teorema di Robertson-Seymour (congettura di Wagner) ci dice che un elenco finito di minori esclusi si nasconde in quella lista infinita, ma il teorema non dà assolutamente alcun aiuto nel trovarli. Quindi Robertson-Seymour di solito porta quindi a una prova di pura esistenza.
András Salamon,

16

"Un algoritmo di controllo della densità di Dan Willard per eseguire inserimenti ed eliminazioni in un file ordinato in sequenza nel migliore dei casi" descrive un algoritmo per mantenere un set ordinato in un array di dimensioni con inserimento e cancellazione in O ( log 2 nO(n)caso peggiore, doveBè la dimensione della pagina.O(ceppo2nB)B

Il documento è lungo 55 pagine e la sua conclusione rileva numerosi miglioramenti alle costanti che l'autore non descrive per ragioni di spazio. Questo mi fa sospettare che forse le costanti non sono così galattiche e che questa struttura di dati sarebbe di "legittima utilità", soprattutto perché è stata citata molte volte.


12

L'algoritmo di unificazione dei modelli di ordine superiore a tempo lineare di Qian non è mai stato implementato a causa della sua complessità AFAIK.


Fortunatamente ci sono ancora algoritmi pratici. Il manuale del ragionamento automatico dice che può essere fatto in polytime (proprio accanto a dove cita l'algoritmo di Qian), quindi è davvero fantastico.
Jake,

11

Algoritmo a tempo lineare per verificare se un grafico può essere incorporato in una superficie fissa.

Ken-ichi Kawarabayashi, Bojan Mohar, Bruce A. Reed: un algoritmo di tempo lineare più semplice per l'incorporamento di grafici in una superficie arbitraria e il genere di grafici di larghezza d'albero limitata. FOCS 2008: 771-780.

Bojan Mohar: un algoritmo temporale lineare per incorporare grafici in una superficie arbitraria. SIAM J. Matematica discreta. 12 (1): 6-26 (1999)


1
È improbabile che ciò abbia valore pratico anche se attuato, a causa della grande dipendenza esponenziale (sic) dal genere.
Jeffε,

8

Non sono sicuro di quanto possa essere utile in pratica (anche se sto pensando al ripiegamento e al confronto delle proteine, nonché alla previsione della struttura secondaria dell'RNA), ma Wolfgang Haken ha dato il primo algoritmo del tempo polinomiale per decidere se un nodo è un ciclo semplice ( Theorie der Normalflächen. Acta Math. 105, 1961, pp. 245--375). Ricordo che è ancora troppo complicato per essere implementato tutti quei decenni dopo.

Se si deve credere a Wikipedia, in seguito sono stati forniti numerosi altri algoritmi e "Comprendere la complessità di questi algoritmi è un campo di studio attivo".


4
Haken ha dato il primo algoritmo, ma non funziona in tempo polinomiale; infatti, non è noto alcun algoritmo poly-time (o risultato di durezza NP). Lavori più recenti hanno ridotto la banalità dei nodi (tramite la formulazione di superficie normale di Haken) alla programmazione di numeri interi, che di solito è rapida da risolvere in pratica.
Jeffε,

3

Decomposizione degli alberi e forse mucchi di Fibonacci .


14
I cumuli di Fibonacci non sono certamente troppo complicati da implementare; sono stati implementati e testati. Il problema con loro è piuttosto che le loro prestazioni pratiche non sono buone come alcuni altri cumuli a causa di fattori costanti largamente nel loro tempo di esecuzione.
David Eppstein,

1
Ho scritto un pacchetto per trovare la decomposizione degli alberi e non credo sia difficile implementare yaroslavvb.blogspot.com/2011/01/building-junction-trees.html
Yaroslav Bulatov

2
Il mio codice è solo una scomposizione euristica dell'albero, non ottimale come gli approcci di programmazione dinamica e ramificata ... Immagino che tu intendessi "A Linear Time Algorithm ..."? Non ho visto alcuna implementazione di questo
Yaroslav Bulatov il

4
2O(K3)O(n)

3
Penso che questo sia il miglior sforzo di implementazione: hein.roehrig.name/dipl
Diego de Estrada,

1

La costruzione di hash perfetta ( https://en.wikipedia.org/wiki/Perfect_hash_function#Construction ) si applicherebbe a qualsiasi caso d'uso con chiavi statiche o che cambiano di rado (ad esempio nomi di dominio di primo livello su router, parole chiave nei compilatori o nomi di funzioni nelle librerie standard) ma l'ultima volta che ho guardato non sono riuscito a trovare nessuna implementazione.

La ricerca parametrica può risolvere molti difficili problemi di ottimizzazione, compresi alcuni che potrebbero sembrare NP-hard, in tempi polinomiali. Il ben noto documento Parametric search ha reso pratiche le implementazioni di una variante della ricerca parametrica, ma ancora non credo sia stata implementata in software pratici.

KnO(nceppon+K)O((n+K)ceppon)


1
Mi rifiuto di credere che la costruzione di FKS sia troppo complessa da implementare. In realtà è abbastanza semplice. Forse non pratico, ma certamente non troppo complesso da implementare.
Sasho Nikolov,
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.