Gli algoritmi randomizzati (tempo polinomiale, risultato booleano) fanno parte della classe di complessità computazionale di RP, che è un sottoinsieme di NP in cui risiedono algoritmi non deterministici (tempo polinomiale, risultato booleano) e un superset di P dove deterministico (tempo polinomiale, risultato booleano) gli algoritmi risiedono.
La complessità della sottoimpostazione riguarda la riduzione dei problemi in un set in un altro set. Pertanto RP ⊆ NP esclude la possibilità di algoritmi randomizzati che sono anche non deterministici perché, in definitiva, un superset contiene il sottoinsieme. Sottoinsieme significa che ogni algoritmo RP (o qualsiasi algoritmo completo RP) può essere ridotto a qualche algoritmo NP (o qualsiasi algoritmo NP completo). P è un sottoinsieme di RP perché ogni problema in P può essere ridotto a un problema in RP in cui la quantità di entropia non controllata è 0.
Tangenzialmente, questo è analogo al modo in cui ogni problema in NC (calcolo parallelo) può essere ridotto a un problema in P simulando il calcolo parallelo in una riduzione a un problema seriale in P ma non è ancora dimostrato che il contrario sia vero, cioè che ogni problema in P è riducibile a un problema in NC, né dimostrato non vero, vale a dire la prova non plausibile che un problema P-completo non è riducibile a un problema in NC. Potrebbe essere possibile che vi siano problemi intrinsecamente seriali che non possono essere calcolati in parallelo, ma per dimostrare che la prova P ≠ NC sembra non essere plausibile (per ragioni troppo tangenziali per discutere in questa risposta).
Più in generale (cioè non limitato ai tipi di risultati booleani), gli algoritmi randomizzati si distinguono dagli algoritmi deterministici in quanto parte dell'entropia proviene esternamente . Gli algoritmi randomizzati si distinguono dagli algoritmi non deterministici perché l'entropia è limitata , e pertanto è possibile dimostrare che gli algoritmi randomizzati (e non non deterministici) terminano sempre.
L'imprevedibilità degli algoritmi non deterministici è dovuta all'incapacità di enumerare tutte le possibili permutazioni dell'entropia di input (che si traduce in imprevedibilità della terminazione). L'imprevedibilità di un algoritmo randomizzato è dovuta all'incapacità di controllaretutta l'entropia di input (che si traduce in un'imprevedibilità di un risultato indeterminato, sebbene sia possibile prevedere il tasso di imprevedibilità). Nessuna di queste sono affermazioni sull'imprevedibilità della risposta corretta al problema, ma piuttosto l'imprevedibilità si manifesta rispettivamente nel canale laterale di terminazione e nel risultato indeterminato. Sembra che molti lettori stiano combinando l'imprevedibilità in un'area con l'imprevedibilità del risultato corretto, che è una conflazione che non ho mai scritto (rivedere la cronologia delle modifiche).
È fondamentale capire che il non determinismo è sempre (in ogni scienza o uso del termine) l'incapacità di enumerare l'entropia universale (cioè illimitata). Considerando che, la randomizzazione si riferisce all'accesso ad un'altra fonte di entropia (nei programmi entropia diversa e quindi non sotto il controllo delle variabili di input) che può o meno essere illimitata.
Ho aggiunto il seguente commento sotto la risposta attualmente più popolare all'altro thread che pone una domanda simile.
Tutte le scienze usano la stessa definizione di non determinismo unificata sul concetto di entropia illimitata. Risultati imprevedibili in tutte le scienze sono dovuti all'incapacità di enumerare a priori tutti i possibili output di un algoritmo (o sistema) perché accetta stati illimitati, cioè classe di complessità NP. Specificare un input particolare per osservare se si ferma e notare che il risultato è idempotente è equivalente in altre scienze a mantenere costante il resto dell'entropia dell'universo mentre si ripete lo stesso cambiamento di stato. Il calcolo consente questo isolamento entropico, mentre le scienze naturali no.
Aggiungendo alcuni dei migliori commenti per aggiungere un chiarimento del mio punto sull'unica distinzione saliente tra randomizzato e non deterministico.
È davvero abbastanza elegante e facile vedere la distinzione, una volta che tutti smettono di confonderla provando a descriverla da un punto di vista operativo anziché dal punto di vista dell'entropia saliente.
@reinierpost ognuno sta fondendo la differenza tra randomizzato e non deterministico. Questo fa confondere il tuo commento. L'algoritmo risponde all'interazione dell'entropia di input (variabile) e del suo entropy interno (invariante) del codice sorgente. Il non determinismo è entropia illimitata. L'entropia invariante può anche essere illimitata internamente come ad esempio l' espansione delle cifre di π . La randomizzazione è che parte dell'entropia non è accoppiata all'input come definito (ovvero potrebbe provenire da una chiamata di sistema /dev/random
o casualità simulata, ad esempio NFA o PRNG).
.
La definizione formale di Raffaello di automa finito non deterministico (NFA) è entropia di input finita (dati: la 5 tupla). Pertanto ogni NFA può funzionare su una macchina di Turing deterministica, cioè non richiede una macchina di Turing completa non deterministica. Pertanto gli NFA non rientrano nella classe dei problemi non deterministici. La nozione di "non determinismo" nella NFA è che il suo determinismo (sebbene chiaramente presente poiché ogni NFA può essere convertito in DFA) non è esplicitamente espanso - non è la stessa del non determinismo del calcolo
.
@Raphael il preteso "non determinismo" negli NFA è davvero la casualità è il senso della mia definizione della distinzione tra casualità e non determinismo. La mia definizione è che la casualità è dove parte dell'entropia che non è sotto il controllo, la conoscenza (o l'espansione non esplicita desiderata nel caso di un NFA) dell'input al programma o alla funzione. Considerando che il vero non determinismo è l'incapacità di conoscere l'entropia in ogni caso, perché è illimitata. Questo è esattamente ciò che distingue randomizzato dal non determinismo. Quindi NFA dovrebbe essere un esempio del primo, non del secondo come hai affermato.
.
@Raphael come ho già spiegato, la nozione di non determinismo negli NFA accoppia il non deterministico con l'entropia finita. Quindi il non determinismo è un concetto locale di non espandere il determinismo come una forma di compressione o convenienza, quindi non diciamo che gli NFA sono non deterministici, piuttosto possiedono l'apparenza di casualità a un oracolo che non è disposto a calcolare l'espansione deterministica. Ma è tutto un miraggio perché si chiama espandersi deterministicamente perché l'entropia non è illimitata, cioè finita.
I dizionari sono strumenti. Impara a usarli.
aggettivo casuale
Statistiche. o caratterizzante un processo di selezione in cui ogni elemento di un set ha la stessa probabilità di essere scelto.
essere o in relazione a un insieme o a un elemento di un insieme ciascuno dei cui elementi ha uguale probabilità di occorrenza
Pertanto la randomizzazione richiede solo che parte dell'entropia di input sia equiprobabile, il che è quindi congruente con la mia definizione che parte dell'entropia di input non è controllata dal chiamante della funzione. Si noti che la randomizzazione non richiede che l'entropia di input sia indecidibile fino alla fine.
In informatica, un algoritmo deterministico è un algoritmo che, dato un input particolare, produrrà sempre lo stesso output, con la macchina sottostante che passa sempre attraverso la stessa sequenza di stati.
Formalmente, un algoritmo deterministico calcola una funzione matematica; una funzione ha un valore univoco per qualsiasi input nel suo dominio e l'algoritmo è un processo che produce questo valore particolare come output.
Gli algoritmi deterministici possono essere definiti in termini di una macchina a stati: uno stato descrive cosa sta facendo una macchina in un determinato istante nel tempo. Le macchine a stati passano in modo discreto da uno stato a un altro. Subito dopo aver inserito l'input, la macchina è nel suo stato iniziale o iniziale. Se la macchina è deterministica, significa che da questo punto in poi, il suo stato corrente determina quale sarà il suo stato successivo; il suo corso attraverso l'insieme degli stati è predeterminato. Si noti che una macchina può essere deterministica e non fermarsi o finire mai, e quindi non riuscire a fornire un risultato.
Quindi questo ci sta dicendo che gli algoritmi deterministici devono essere completamente determinati dallo stato di input della funzione, vale a dire che dobbiamo essere in grado di dimostrare che la funzione terminerà (o non terminerà) e che non può essere indecidibile. Nonostante il tentativo confuso di Wikipedia di descrivere il non deterministico, l'unica antitesi al deterministico come definito sopra da Wikipedia, sono gli algoritmi il cui stato di input (entropia) è mal definito. E l'unico modo in cui lo stato di input può essere mal definito è quando è illimitato (quindi non può essere pre-determinato in modo deterministico). Questo è esattamente ciò che distingue una macchina di Turing non deterministica (e molti programmi del mondo reale che sono scritti in linguaggi completi di Turing comuni come C, Java, Javascript, ML, ecc.) Da TM deterministici e linguaggi di programmazione come HTML, formule di fogli di calcolo, Coq, Epigram,
Nella teoria della complessità computazionale, gli algoritmi non deterministici sono quelli che, in ogni possibile passo, possono consentire più continuazioni (immagina un uomo che cammina lungo un sentiero in una foresta e, ogni volta che si fa avanti, deve scegliere quale bivio sulla strada desidera prendere). Questi algoritmi non arrivano a una soluzione per ogni possibile percorso computazionale; tuttavia, sono garantiti per arrivare a una soluzione corretta per qualche percorso (cioè, l'uomo che cammina attraverso la foresta può trovare la sua cabina solo se sceglie una combinazione di percorsi "corretti"). Le scelte possono essere interpretate come ipotesi in un processo di ricerca.
Wikipedia e altri cercano di confondere la randomizzazione con il non determinismo, ma che senso ha avere i due concetti se non li distinguerai in modo eloquente?
Chiaramente il determinismo riguarda la capacità di determinare. Chiaramente la randomizzazione consiste nel rendere equiprobabile parte dell'entropia.
Includere entropia casuale nello stato di un algoritmo non è necessario per renderlo indeterminabile. Ad esempio un PRNG può avere la necessaria distribuzione statistica equiprobabile, ma anche essere del tutto deterministico.
Confondere concetti ortogonali è ciò che le persone a basso QI. Mi aspetto di meglio da questa community!