Esempio di un algoritmo in cui un termine di ordine inferiore domina il runtime per qualsiasi input pratico?


10

La notazione Big-O nasconde fattori costanti, quindi esistono alcuni algoritmi che non sono fattibili per qualsiasi dimensione di input ragionevole perché il coefficiente sul termine è così grande.nO(n)n

Esistono algoritmi noti il ​​cui runtime è ma con un termine di ordine inferiore che è così enorme che per dimensioni di input ragionevoli domina completamente il runtime? Vorrei usare un algoritmo come questo un esempio in un corso di algoritmi, in quanto fornisce una buona ragione per cui la notazione big-O non è nulla.o ( f ( n ) )O(f(n))o(f(n))

Grazie!


Algoritmi che hanno prima impostato una tabella di grandi dimensioni e quindi eseguono ricerche rapide nella tabella per ciascun elemento di input? Se la tabella è abbastanza grande, il numero di elementi deve essere enorme per compensare il costo di creazione della tabella. I motori di ricerca ne sono un esempio, se è il numero di query. n
András Salamon,

Ho sentito che la programmazione lineare è così. Il simplex è esponenziale ma più veloce degli algoritmi polinomiali nella pratica.
jmite,

1
Non conosco alcun algoritmo adatto alle tue esigenze, ma cercherei qualcosa che abbia al massimo un tempo di esecuzione lineare, poiché oltre a ciò dubiterei molto che i termini più piccoli possano dominare il termine principale per input più ragionevoli. Ma forse k-way mergesort soddisfa le tue esigenze, se utilizzato per ordinare i big data? Il problema è quello di ridurre al minimo gli accessi alla memoria secondaria poiché costano enormi quantità di tempo, anche se non sono del tutto sicuro che sarebbe un esempio appropriato per quello che vuoi dimostrare, e non penso davvero che sia abbastanza semplice essere illustrativo.
G. Bach,

un po 'simile ai potenti algoritmi troppo complessi da implementare , vedi anche il blog di rjlipton sugli algoritmi galattici
vzn

Risposte:


2

La crittografia è un esempio, se degenerato. Ad esempio, infrangere la crittografia AES è - tutto ciò che devi fare è trovare la chiave giusta tra un numero finito, 2 128 o 2 192 o 2 256 a seconda della dimensione della chiave (supponi che sia noto abbastanza del testo in chiaro determinare la chiave in modo univoco). Tuttavia, anche 2 128 operazioni richiederebbero tutti i computer oggi (un miliardo o più circa, ciascuno eseguendo circa un miliardo di operazioni al secondo) in più rispetto alla vita dell'universo (circa un miliardo di miliardi di secondi).O(1)2128219222562128


Un modo leggermente diverso per illustrare perché big-O non è tutto è quello di osservare che a volte utilizziamo un algoritmo diverso per input di piccole dimensioni. Ad esempio, prendi quicksort. Con la giusta scelta di pivot (che è un affare complicato!), È . Quicksort opera per divisione e conquista: ogni istanza comporta un sacco di ordinamento di piccoli array. Per array di piccole dimensioni, i metodi quadratici come l'ordinamento per inserzione funzionano meglio. Quindi, per prestazioni ottimali, un quicksort di un array di grandi dimensioni comporta molte esecuzioni di inserimenti per piccole dimensioni.O(nlgn)


Non credo che rompere la crittografia sia un esempio ragionevole qui; una cosa è che per analizzare il problema di trovare la chiave corretta in modo asintotico, dovremmo considerare le versioni teoricamente disponibili di Rijndael con dimensioni della chiave non costanti, ovvero rompere la chiave per chiavi della dimensione . Altrimenti potremmo anche dire che qualsiasi algoritmo che termina funziona in O ( 1 ) per input di dimensioni fisse. nO(1)
G. Bach,

@ G.Bach Il punto di questo esempio è che è impossibile (che la teoria della complessità associa ad alta complessità) anche se è a tempo costante (in termini di dimensioni del testo cifrato).
Gilles 'SO- smetti di essere malvagio' il

2
Non credo che il tuo primo esempio funzioni. Dato che ci sono solo molte opzioni finite da controllare, il runtime dell'algoritmo è , quindi non esiste un termine o ( 1 ) di basso ordine che spieghi l'intero runtime. O(1)o(1)
templatetypedef

1
@templatetypedef La violazione della crittografia di un messaggio crittografato con AES è in termini di lunghezza del messaggio . O(1)
Gilles 'SO- smetti di essere malvagio' il

1

Due esempi vengono in mente dal campo della complessità parametrizzata e degli algoritmi FPT. Questo potrebbe non essere esattamente quello che stai cercando, ma qui va.

Prendi in considerazione un problema grafico, come 3-COLORING o HAM-CYCLE. Entrambi i problemi possono essere espressi nella logica monadica del secondo ordine e quindi possono essere decisi in tempo lineare di grafici con larghezza dell'albero limitata. Questo è il risultato di Bruno Courcelle , ma l'algoritmo risultante è tutt'altro che pratico.

O(p9p/2)LO(p2pL)pL


2
O(n)o(n)

0

in qualche modo correlati alla tua domanda sono gli algoritmi che sono noti per avere buone prestazioni teoricamente ma non sono usati su problemi reali a causa della impraticabilità in casi più piccoli. in altre parole come da lei richiesto, la "performance pubblicizzata" è possibile solo per grandi input in teoria, non visti in applicazioni pratiche. questo a volte si riflette nelle stime di Big-Oh, altre volte non esattamente. alcuni algoritmi hanno buone "prestazioni" teoriche ma sono molto logicamente complessi e non sono mai stati implementati da nessuno, e quindi le "prestazioni" su dimensioni di istanze pratiche non sono nemmeno note, ad esempio come nel caso del problema del flusso massimo .


Ma sono impraticabili perché dominano i termini di ordine inferiore o perché le costanti sui termini di ordine superiore sono cattive?
David Richerby,

o, o una combinazione, sarebbe difficile isolare in ciascun caso. effettivamente / praticamente è lo stesso effetto.
vzn

-1

Questo è uno scherzo, ma ha un lato serio ...

O(nlogn)O(n2)


1
No, è diverso. Quicksort è utile in pratica perché non esiste un termine quadratico per l'input tipico, indipendentemente dalle dimensioni. Se la scelta del pivot è errata per un layout di dati, quicksort mostra un comportamento quadratico anche per input di piccole dimensioni.
Gilles 'SO- smetti di essere malvagio' il
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.