Per le persone come me che studiano algoritmi per vivere, il modello di calcolo standard del 21 ° secolo è la RAM intera . Il modello intende riflettere il comportamento dei computer reali in modo più accurato rispetto al modello della macchina di Turing. I computer del mondo reale elaborano numeri interi a più bit in tempo costante utilizzando hardware parallelo; non interi arbitrari , ma (poiché le dimensioni delle parole crescono costantemente nel tempo) non sono neppure numeri interi fissi .
Il modello dipende da un singolo parametro , chiamato dimensione della parola . Ogni indirizzo di memoria contiene un singolo numero intero -bit, o parola . In questo modello, la dimensione di input è il numero di parole nell'input e il tempo di esecuzione di un algoritmo è il numero di operazioni sulle parole . Le operazioni aritmetiche standard (addizione, sottrazione, moltiplicazione, divisione di numeri interi, resto, confronto) e operazioni booleane (bit a bit e, o, xor, shift, rotazione) sulle parole richiedono tempo per definizione .w n O ( 1 )wwnO(1)
Formalmente, la dimensione della parola NON è una costantew ai fini dell'analisi degli algoritmi in questo modello. Per rendere il modello coerente con l'intuizione, abbiamo bisogno di , poiché altrimenti non possiamo nemmeno memorizzare l'intero in una sola parola. Tuttavia, per la maggior parte degli algoritmi non numerici, il tempo di esecuzione è in realtà indipendente da , poiché quegli algoritmi non si preoccupano della rappresentazione binaria sottostante del loro input. Mergesort e heapsort vengono eseguiti entrambi nel tempo ; median-of-3-quicksort viene eseguito nel tempo nel peggiore dei casi. Un'eccezione notevole è l'ordinamento binario radix, che viene eseguito nel tempo .n w O ( n log n ) O ( n 2 ) O ( n w )w≥log2nnwO(nlogn)O(n2)O(nw)
L'impostazione ci fornisce il tradizionale modello RAM a costo logaritmico. Ma alcuni algoritmi RAM interi sono progettati per dimensioni di parole più grandi, come l'algoritmo di ordinamento di numeri interi a tempo lineare di Andersson et al. , che richiede .w = Ω ( log 2 + ε n )w=Θ(logn)w=Ω(log2+εn)
Per molti algoritmi che sorgono in pratica, la dimensione della parola è semplicemente un problema e possiamo (e fare) ricadere sul modello RAM a costo uniforme molto più semplice. L'unica difficoltà seria viene dalla moltiplicazione nidificato, che può essere utilizzato per costruire molto grandi numeri interi molto rapidamente. Se potessimo eseguire l'aritmetica su interi arbitrari in tempo costante, potremmo risolvere qualsiasi problema in PSPACE in tempo polinomiale .w
Aggiornamento: dovrei anche menzionare che ci sono eccezioni al "modello standard", come l'algoritmo di moltiplicazione di numeri interi di Fürer , che utilizza macchine Turing multitape (o equivalentemente, il "bit RAM") e la maggior parte degli algoritmi geometrici, che sono analizzati in modo teorico modello "RAM reale" pulito ma idealizzato .
Sì, questa è una lattina di vermi.