Quali sono alcuni problemi non banali in cui sappiamo che l'algoritmo attuale che abbiamo è quello asintoticamente ottimale? (Per macchine turing)
E come è dimostrato?
Quali sono alcuni problemi non banali in cui sappiamo che l'algoritmo attuale che abbiamo è quello asintoticamente ottimale? (Per macchine turing)
E come è dimostrato?
Risposte:
Qualsiasi algoritmo che richiede tempo lineare e deve leggere l'intero input deve essere asintoticamente ottimale. Allo stesso modo, come commenta Raphael, qualsiasi algoritmo il cui runtime è dello stesso ordine delle dimensioni dell'output è ottimale.
Se la misura della complessità che si sta prendendo in considerazione è la complessità della query, ovvero il numero di volte in cui la macchina deve guardare l'input per risolvere un problema specifico, allora ci sono molti problemi per i quali abbiamo algoritmi ottimali. La ragione di ciò è che limiti più bassi per la complessità della query sono più facili da raggiungere rispetto a limiti inferiori per la complessità del tempo o dello spazio, grazie ad alcune tecniche popolari tra cui il metodo avversario .
Il rovescio della medaglia, tuttavia, è che questa misura di complessità è usata quasi in modo quasi esclusivo nell'elaborazione delle informazioni quantistiche in quanto fornisce un modo semplice per dimostrare un divario tra potenza computazionale quantistica e classica. L'algoritmo quantistico più noto in questo framework è l'algoritmo di Grover . Data una stringa binaria per la quale esiste un singolo i tale che x i = n , è necessario trovare i . Classicamente (senza un computer quantistico), l'algoritmo più banale è ottimale: è necessario interrogare questa stringa n / 2 volte in media per trovare . Grover ha fornito un algoritmo quantico che lo fa in O ( √interroga la stringa. Anche questo è stato dimostrato ottimale.
L'ordinamento di confronto usando confronto (unisci ordinamento, per nominarne uno) è ottimale, la prova implica semplicemente il calcolo dell'altezza di un albero con n ! le foglie.
Supponendo la congettura dei giochi unici, Khot, Kindler, Mossel e O'donnell hanno dimostrato che è NP completo per approssimare Max-Cut meglio dell'algoritmo di Goemans e Williamson. Quindi in questo senso G&W è ottimale (supponendo anche che ).
Alcuni algoritmi distribuiti possono essere indicati come ottimali rispetto ad alcune condizioni (ad esempio, la proporzione di processori contraddittori), ma dal momento che hai menzionato le macchine Turing, immagino che non sia il tipo di esempi che stai cercando.
Supponiamo che si è data di ingresso e viene chiesto di decidere se la macchina RAM M termina sull'ingresso x dopo t passi. Secondo il teorema della gerarchia temporale, l'algoritmo ottimale per decidere ciò è simulare l'esecuzione di M ( x ) per i passaggi t , che può essere eseguita nel tempo O ( t ) .
(Nota: per le macchine Turing, la simulazione dell'esecuzione di richiede passi O ( t log t ) ; conosciamo solo un limite inferiore di Ω ( t ) . Pertanto, questo non è del tutto ottimale per le macchine Turing in particolare).
Esistono altri problemi che contengono la versione del problema di arresto come sotto-caso. Ad esempio, decidere se una frase è una conseguenza del WS1S richiede tempo 2 ↑ ↑ O ( | θ | ) e questo è ottimale.
Se consenti problemi di struttura dinamica dei dati, conosciamo alcuni algoritmi ottimali a tempo super-lineare. Questo è nel modello di sonda cellulare, che è forte come la parola RAM, cioè non si tratta di un modello limitato come alberi di decisione algebrici.
Un esempio è quello di mantenere le somme dei prefissi negli aggiornamenti dinamici. Iniziamo con una matrice di numeri e l'obiettivo è mantenere una struttura di dati che consenta le seguenti operazioni:
ci sono due algoritmi di ricerca in qualche modo simili che [la mia comprensione è] sono ottimali in base a particolari vincoli sull'ordinamento / distribuzione dell'input. tuttavia le presentazioni degli algoritmi in genere non enfatizzano questa ottimalità.
ricerca della sezione aurea per trovare il massimo o il minimo (estremo) di una funzione unimodale. presume che l'input sia una funzione unimodale. lo trova in tempo logaritmico in media. come ricordo, potrebbe esserci stata una prova di ottimalità nel libro Struttura e interpretazione dei programmi per computer di Abelson & Sussman.
la ricerca binaria trova in media un punto nel tempo logaritmico in un elenco ordinato, ma richiede che l'input sia ordinato.
sto citando Wikipedia sopra ma non ha le prove che sono ottimali, forse alcuni riferimenti che dimostrano l'ottimalità possono essere trovati dal pubblico.
Molti algoritmi di tempo sublineare hanno limiti superiori corrispondenti ai limiti inferiori.