Quale modello di calcolo è "il migliore"?


41

Nel 1937 Turing descrisse una macchina Turing. Da allora molti modelli di calcolo sono stati descritti nel tentativo di trovare un modello che sia come un vero computer ma comunque abbastanza semplice da progettare e analizzare algoritmi.

Di conseguenza, abbiamo dozzine di algoritmi per, ad esempio, il problema SORT per diversi modelli di calcolo. Sfortunatamente, non possiamo nemmeno essere sicuri che un'implementazione di un algoritmo con tempo di esecuzione O (n) in una parola RAM con operazioni bit-vector consentite verrà eseguita più velocemente di un'implementazione di un algoritmo con tempo di esecuzione O (n⋅logn) in una parola RAM (sto parlando solo di implementazioni "buone", ovviamente).

Quindi, voglio capire quale dei modelli esistenti è "il migliore" per la progettazione di algoritmi e sto cercando un sondaggio aggiornato e dettagliato sui modelli di calcolo, che offra vantaggi e svantaggi dei modelli e della loro vicinanza alla realtà.


1
Pubblicazione incrociata su MathOverflow ( mathoverflow.net/questions/44558/… ), sebbene reindirizzata qui.
Dave Clarke,

@Tatiana, bella domanda, cosa intendi con "il migliore"? Intendi un modello con runtime teorico vicino al runtime "reale"?
Mohammad Al-Turkistany,

8
Se stai cercando di modellare accuratamente i tempi di esecuzione "reali", allora potrebbe essere importante modellare accuratamente le cache. In particolare, il computing moderno ha molti livelli di cache (CPU, RAM, Disk, ecc ...) con alcuni livelli di ordini di grandezza più lenti di altri; non è fuori questione che il runtime "reale" di un algoritmo sia determinato dal numero di errori nella cache. Aneddoticamente, ho sentito che una delle ragioni per cui i metodi barriera nella programmazione lineare funzionano così bene nonostante le loro scarse garanzie teoriche è perché sono spesso abbastanza efficienti nella cache.
mum

4
Per quanto posso dire, come dice mhum, le maggiori discrepanze tra i tempi di esecuzione previsti nella parola modello RAM e i tempi di esecuzione reali generalmente sorgono a causa del recupero dei dati ... le variabili errate si trovano nella memoria cache e il tempo di recupero rallenta giù enormemente per questo. Ci sono stati diversi tentativi di modellarlo con un modello teorico di memoria gerarchica e non credo che nessuno di questi tentativi abbia avuto molto successo, perché i modelli finiscono per essere troppo complicati per funzionare facilmente.
Peter Shor,

2
Se hai un algoritmo che ritieni possa essere utile in pratica e vuoi vederlo effettivamente utilizzato, la cosa migliore che puoi fare per assicurarti che sia implementarlo o convincerlo qualcun altro (anche se non è un buon implementazione sufficiente per essere incorporata nel software pratico). Per un caso di studio in questo, guarda la storia dell'algoritmo di compressione dei dati LZW. In effetti, probabilmente non ha senso cercare di capire in che modo la cache influisce sull'algoritmo a meno che non sia quello che le persone sono interessate a implementare; altrimenti nessuno presterà attenzione ai tuoi risultati.
Peter Shor,

Risposte:


30

Ho sempre considerato il modello standard di RAM di Word come "il migliore" nel tuo senso. Tutti coloro che hanno imparato a programmare in un linguaggio come C (o qualsiasi equivalente approssimativo come Java, ecc.) Hanno in mente esattamente questo modello quando pensano a un computer.

Certo, a volte hai bisogno di generalizzazioni a seconda dei regimi in cui lavori. Il modello di memoria esterna è importante da tenere a mente. Si applica non solo quando lavori con i dischi, ma anche nella comprensione (costringendoti a preoccuparti) della cache. Naturalmente, trattarlo troppo sul serio può anche portare a risultati insensati, poiché il modello di memoria esterna pura non conta il calcolo. Un'altra generalizzazione della RAM di Word è il parallelismo, ma al momento siamo tutti un po 'confusi :)

Un algoritmo con un tempo di esecuzione funzionerà sicuramente più velocemente di uno con un tempo di esecuzione O ( n lg n ) . È un fatto matematico che il primo è più veloce per grandi n :) La dimensione del tuo problema potrebbe non essere abbastanza grande da importare. Dato che fai apparire l'ordinamento, ti assicuro che sarà molto difficile battere l'ordinamento radix con un algoritmo basato sul confronto per un ragionevole n .O(n)O(nlgn)nn

Un'ultima osservazione sugli algoritmi e sulla "realtà": tieni sempre presente ciò che stai cercando di ottenere. Quando lavoriamo in algoritmi, stiamo cercando di risolvere i problemi più difficili (ad es. SAT su 50 variabili o ordinamento di un miliardo di numeri). Se stai cercando di ordinare 200 numeri o risolvere SAT su 20 variabili, non hai bisogno di alcun algoritmo elaborato. Ecco perché la maggior parte degli algoritmi nella realtà sono in qualche modo banali. Questo non dice nulla di negativo sulla ricerca algoritmica - ci capita solo di interessarci a quell'insolito 1/1000 dei problemi reali che sembrano essere difficili ...


Grazie per la tua risposta Voglio capire quali valgono le generalizzazioni da aggiungere alla parola RAM. Possiamo descrivere un modello, che includerà tutti questi trucchi come operazioni bit-vector, parallelismo, cache, e sarà ancora semplice?
Tatiana Starikovskaya,

10

Non esiste un modello computazionale del tutto soddisfacente in cui analizzare tristemente gli algoritmi, anche in quello che si potrebbe considerare un'impostazione tradizionale. Ciò presuppone che tutti i dati siano facilmente accessibili e che lo spazio di lavoro sia effettivamente illimitato.

La macchina Turing multi-nastro è certamente teoricamente ben specificata e molti algoritmi sono stati progettati e analizzati in questo modello nel corso degli anni. Tuttavia, per alcuni non è abbastanza vicino a come funzionano i computer reali per essere davvero un buon modello da usare nel 21 ° secolo. D'altro canto, il modello word-RAM è diventato popolare e sembra catturare in modo più accurato il funzionamento dei computer moderni (operazioni su parole non bit, accesso costante ai luoghi di memoria). Tuttavia, ci sono aspetti tutt'altro che ideali. Ad esempio, non esiste un modello RAM a una parola. Bisogna prima specificare quali operazioni sulle parole devono essere permesse in tempo costante. Ci sono molte opzioni per questo senza una singola risposta accettata. Secondo, la dimensione della parola w è normalmente impostata per aumentare con la dimensione dell'input (che è almeno veloce come log (n)) per consentire a qualsiasi elemento in memoria di essere indirizzato usando un numero costante di parole. Ciò significa che si deve immaginare una classe infinita di macchine su cui viene eseguito l'algoritmo o, peggio ancora, che la macchina cambi man mano che si alimentano più dati. Questo è almeno un pensiero sconcertante per i più puri tra i miei studenti. Infine, si ottengono risultati di complessità alquanto sorprendenti con il modello word-RAM che potrebbe non corrispondere a quelli appresi da studente. Ad esempio, la moltiplicazione di due numeri n-bit è il tempo O (n) in questo modello e la semplice lettura in una stringa n-bit è un'operazione di tempo sublineare all'improvviso. Ciò significa che si deve immaginare una classe infinita di macchine su cui viene eseguito l'algoritmo o, peggio ancora, che la macchina cambi man mano che si alimentano più dati. Questo è almeno un pensiero sconcertante per i più puri tra i miei studenti. Infine, si ottengono risultati di complessità alquanto sorprendenti con il modello word-RAM che potrebbe non corrispondere a quelli appresi da studente. Ad esempio, la moltiplicazione di due numeri n-bit è il tempo O (n) in questo modello e la semplice lettura in una stringa n-bit è un'operazione di tempo sublineare all'improvviso. Ciò significa che si deve immaginare una classe infinita di macchine su cui viene eseguito l'algoritmo o, peggio ancora, che la macchina cambi man mano che si alimentano più dati. Questo è almeno un pensiero sconcertante per i più puri tra i miei studenti. Infine, si ottengono risultati di complessità alquanto sorprendenti con il modello word-RAM che potrebbe non corrispondere a quelli appresi da studente. Ad esempio, la moltiplicazione di due numeri n-bit è il tempo O (n) in questo modello e la semplice lettura in una stringa n-bit è un'operazione di tempo sublineare all'improvviso.

Detto questo, se vuoi solo sapere se è probabile che il tuo algoritmo funzioni velocemente, entrambi lo faranno molto probabilmente :-)


2
Penso che se stai evitando le operazioni aritmetiche bit a bit o del modello di parole nel tentativo di evitare il problema "la macchina cresce con le dimensioni dell'input", ma stai ancora usando una macchina RAM o un puntatore a costo uniforme, allora stai solo prendendo in giro te stesso: quegli altri modelli hanno lo stesso problema. Come indicizzano i loro input? La risposta è: i computer reali esauriscono la memoria, ma nonostante ciò è ancora più conveniente progettare algoritmi per loro supponendo che siano una RAM (o forse anche meglio usare un modello che tiene conto dei costi della gerarchia di memoria) che supporre che siano un DFA.
David Eppstein,

4
Un modello RAM di cui parla Knuth, ad esempio, costa w tempo per cercare un indirizzo con w bit e allo stesso modo w tempo per aggiungere due numeri w bit (è così che ottiene Theta (n log n) per il tempo che moltiplica due n -bit numeri in un modello RAM senza operazioni di tempo costante sulle parole). È interessante notare come siano cambiati i modelli più ampiamente accettati negli ultimi 20 anni e quanti modelli non siano mai più stati discussi.
Raffaello,

8

I modelli sono solo modelli. Non lo spingerei troppo lontano; dicono qualcosa su alcuni aspetti dei tuoi algoritmi, ma non tutta la verità.

Suggerirei di utilizzare semplicemente il modello di RAM standard di parole nelle tue analisi e implementare l'algoritmo e vedere come funziona in pratica.

(In realtà solo implementare il tuo algoritmo senza mai eseguirlo ti dice già molto su di esso ... Per prima cosa, è quindi dimostrabile implementabile.)


3
Bene, ho due obiezioni. Primo, non molti teorici implementano algoritmi e tuttavia dobbiamo confrontarli in qualche modo. In secondo luogo, voglio capire quali funzionalità di un computer possiamo aggiungere a un modello senza perdere la sua semplicità.
Tatiana Starikovskaya,

11
La soluzione proposta da David Johnson per questo è di avere più persone che implementano algoritmi - ha avviato ALENEX e le Sfide DIMACS per affrontare questo. Ho una certa esperienza anche con questo. Con Ken Clarkson, ho ideato un algoritmo randomizzato di scafo convesso che pensavamo avrebbe funzionato bene in pratica. Clarkson lo fece implementare da uno studente estivo presso i Bell Labs. Sulla base della promessa di questa implementazione, le idee sono state elaborate nel programma qhull (scritto al Geometry Center), ma con alcune accelerazioni euristiche ciò significa che l'algoritmo non ha più una garanzia teorica che funzioni rapidamente.
Peter Shor,

5

Se il tuo compito computazionale riguarda più lo spostamento di dati che l'esecuzione di operazioni (aritmetiche), (i set di dati sono enormi in modo da non rientrare nemmeno nella memoria principale), quindi il modello I / O (introdotto da Aggarwal e Vitter nel 1988 ) può essere molto preciso. Per attività come la permutazione di una vasta gamma di elementi nella memoria principale, può essere utile utilizzare gli algoritmi I / O-ottimali (in un'attenta implementazione).

Per i moderni computer multi-core, la variante parallela introdotta da Arge, Goodrich, Nelson e Sitchinava nel 2008 può essere un modello accurato.


5

Se intendi "il migliore" modello computazionale per rendere la tua vita più complicata, allora puoi usare la macchina turing universale a 2 stati e 3 simboli di Wolfram.

PRO : nessuno tranne la sensazione di camminare sulla linea sottile tra ragione e follia;

CONTRO : tonnellate ...

MrGreen (solo uno scherzo, concordo sostanzialmente con le risposte precedenti ...)


1

Su una nota più teorica: l'articolo Ultimi modelli teorici di nanocomputer sostiene che il modello di mesh 3D reversibile è il modello fisico ottimale di calcolo, nel senso che nessun altro modello fisico potrebbe essere asintoticamente più veloce. Vengono discusse considerazioni fisiche come la velocità della luce, il principio di Landauer e il limite di Bekenstein .

Per citare dall'abstract:

Scopriamo che usando la tecnologia attuale, una macchina reversibile contenente solo poche centinaia di strati di circuiti potrebbe superare qualsiasi macchina esistente e che un computer reversibile basato sulla nanotecnologia dovrebbe avere solo pochi micron per superare qualsiasi possibile tecnologia irreversibile.

Sosteniamo che un'implementazione di silicio della mesh 3D reversibile potrebbe essere preziosa oggi per accelerare alcuni calcoli scientifici e ingegneristici e proponiamo che il modello dovrebbe diventare un centro di studi futuri nella teoria degli algoritmi paralleli per una vasta gamma di problemi.

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.