Differenze e relazioni tra algoritmi randomizzati e non deterministici?


30

Quali differenze e relazioni sono tra algoritmi randomizzati e algoritmi non deterministici?

Da Wikipedia

Un algoritmo randomizzato è un algoritmo che impiega un grado di casualità come parte della sua logica. L'algoritmo utilizza tipicamente bit uniformemente casuali come input ausiliario per guidarne il comportamento, nella speranza di ottenere buone prestazioni nel "caso medio" su tutte le possibili scelte di bit casuali. Formalmente, le prestazioni dell'algoritmo saranno una variabile casuale determinata dai bit casuali; quindi il tempo di esecuzione o l'output (o entrambi) sono variabili casuali.

Un algoritmo non deterministico è un algoritmo che può esibire comportamenti diversi su corse diverse, al contrario di un algoritmo deterministico. Esistono diversi modi in cui un algoritmo può comportarsi diversamente da una corsa all'altra. Un algoritmo concorrente può funzionare in modo diverso su corse diverse a causa di una condizione di competizione. Un algoritmo probabilistico 's comportamenti dipende da un generatore di numeri casuali. Un algoritmo che risolve un problema nel tempo polinomiale non deterministico può essere eseguito nel tempo polinomiale o nel tempo esponenziale a seconda delle scelte fatte durante l'esecuzione.

Gli algoritmi randomizzati e gli algoritmi probabilistici sono lo stesso concetto?

Se sì, gli algoritmi randomizzati sono solo una sorta di algoritmi non deterministici?


Penso che parte della confusione derivi dal fatto che "non deterministico" e "non deterministico" suonano come se dovessero significare la stessa cosa, ma non lo fanno: "deterministico" implica "non casuale" e "non non deterministico". Quindi "casuale" e "non deterministico" sono entrambi modi in cui un algoritmo potrebbe essere "non deterministico", ma "non deterministico" ha una definizione tecnica specifica e non è semplicemente un antonimo per "deterministico".
Joe,

Risposte:


24

Gli algoritmi non deterministici sono molto diversi dagli algoritmi probabilistici.

Gli algoritmi probabilistici sono quelli che usano lanci di monete e funzionano "il più delle volte". Ad esempio, le varianti casuali di quicksort funzionano in tempo nell'aspettativa (e con alta probabilità), ma se sei sfortunato, potresti prendere quanto . Gli algoritmi probabilistici sono pratici e vengono utilizzati ad esempio dal computer durante la generazione di chiavi RSA (per verificare che i due fattori della chiave segreta siano primi). L'algoritmo probabilistico che non utilizza lanci di monete viene talvolta chiamato "deterministico".Θ ( n 2 )Θ(nlogn)Θ(n2)

Gli algoritmi non deterministici sono quelli che "hanno bisogno di un suggerimento" ma sono sempre corretti: non possono essere ingannati se viene dato un suggerimento sbagliato. Ad esempio, ecco un algoritmo non deterministico che calcola un numero intero : indovina una fattorizzazione di e verifica che tutti i fattori siano primi (esiste un algoritmo deterministico "veloce in teoria" per farlo). Questo algoritmo è molto veloce e rifiuta i falsi suggerimenti. La maggior parte delle persone pensa che gli algoritmi randomizzati non possano fatturare numeri interi così rapidamente. Chiaramente questo modello di calcolo non è realistico.nnn

Perché ci preoccupiamo degli algoritmi non deterministici? Esiste una classe di problemi, nota come NP, che consiste in problemi di decisione che hanno algoritmi efficienti non deterministici. Molte persone pensano che i problemi più difficili in quella classe, i cosiddetti problemi NP-completi, non abbiano algoritmi deterministici (o addirittura randomizzati) efficienti; questa è nota come domanda P vs NP. Poiché molti problemi naturali sono NP-completi, è interessante sapere se in realtà non sono risolvibili in modo efficiente, nel peggiore dei casi (in pratica, spesso i casi che si presentano in pratica sono risolvibili in tempi ragionevoli).


Grazie! (1) Ricordo che i problemi NP sono quelli che possono essere risolti da un algoritmo su una macchina di Turing non deterministica in tempo polinomiale. Quindi "un algoritmo su una macchina di Turing non deterministica" e "un algoritmo non deterministico su una macchina di Turing deterministica" sono equivalenti in un certo senso? (2) Pensi che l'algoritmo probabalistico e l'algoritmo randomizzato siano lo stesso concetto? (3) Pensi anche che Wikipedia affermi che l'algoritmo simultaneo e l'algoritmo probabalistico sono due tipi di algoritmi non deterministici sbagliati?
Tim

1
Non credo che il sapore certificato del non determinismo serva a chiarire la differenza con la randomizzazione.
Raffaello

(1) Sì, i due sono uguali. (2) Questi sono due nomi per lo stesso concetto. (3) Wikipedia fornisce alcuni esempi di altri tipi di algoritmi, sebbene la presentazione possa essere fuorviante. Gli algoritmi paralleli e probabilistici non sono non deterministici.
Yuval Filmus,

4
@ShelbyMooreIII Il non determinismo ha un significato tecnico molto specifico nella teoria della ricorsione e nell'informatica teorica.
Yuval Filmus,

1
Yuval, contrassegna i commenti che ritieni non siano costruttivi o obsoleti; li rimuoveremo quindi.
Raffaello

15

Un algoritmo specifica un metodo per passare da un determinato input a un output desiderato che ha una certa relazione con l'input. Diciamo che questo algoritmo è deterministico se, in qualsiasi momento, viene specificato esattamente e senza ambiguità quale sarà il prossimo passo dell'algoritmo che deve essere eseguito come parte di quel metodo, potenzialmente dipendente dall'input o dai dati parziali calcolati finora, ma sempre identificato in modo univoco.

Non determinismo significa che una parte dell'algoritmo viene lasciata sotto o addirittura non specificata. Ad esempio, "int i = un numero pari compreso tra 0 e n" non è specificato. Ciò significa che non esiste un comportamento univoco specificato a questo punto.

Perché questa distinzione sia utile, è necessario il (solito) concetto di "correttezza" per gli algoritmi (deterministici), che informalmente è che "l'algoritmo calcola sempre ciò che voglio che calcoli". Diventa quindi interessante pensare a cosa significherebbe la correttezza per gli algoritmi non deterministici, che devono tener conto delle scelte possibili nelle istruzioni non specificate.

Esistono due modi per definire la correttezza del non determinismo. Il primo è piuttosto semplice e meno interessante, per cui correttezza significa "l'algoritmo calcola sempre ciò che voglio che calcoli, per tutte le sequenze di scelte che mi è permesso di fare". Questo a volte si verifica se un autore di un po 'di pseudocodice è troppo pigro per scegliere un numero e dice "scegli qualsiasi numero pari tra 0 e n", quando "scegli 0" avrebbe reso l'algoritmo deterministico. In sostanza, sostituendo tutto il non determinismo con il risultato di qualche scelta è possibile rendere l'algoritmo deterministico.

Questo è anche il "non determinismo" di cui al secondo paragrafo. Questo è anche il non determinismo negli algoritmi paralleli: in questi algoritmi non sei del tutto sicuro di come appaia esattamente l'esecuzione, ma sai che funzionerà sempre, qualunque cosa accada esattamente (altrimenti il ​​tuo algoritmo parallelo sarebbe errato).

L'interessante definizione di correttezza per algoritmo non deterministico è "l'algoritmo calcola sempre ciò che voglio che calcoli, per alcune sequenze di scelte che mi è permesso di fare". Ciò significa che potrebbero esserci delle scelte sbagliate, nel senso che fanno sì che l'algoritmo produca la risposta sbagliata o addirittura vada in un ciclo infinito. Nell'esempio "scegli qualsiasi numero pari tra 0 e n", forse 4 e 16 sono scelte giuste, ma tutti gli altri numeri sono sbagliati e questi numeri possono variare a seconda dell'input, dei risultati parziali e delle scelte fatte finora.

Se utilizzato nell'informatica, il non determinismo è di solito limitato alla scelta non deterministica di uno 0 o di un 1. Tuttavia, se si scelgono molti di questi bit in modo non deterministico, è possibile generare lunghi numeri non deterministici o altri oggetti, nonché fare scelte non deterministiche, quindi difficilmente (se mai) limita la sua applicabilità - se l'applicabilità è limitata, il non determinismo era troppo potente in primo luogo.

Il non determinismo è uno strumento esattamente potente quanto un algoritmo deterministico basato su certificato, ovvero un algoritmo che controlla una proprietà data un'istanza e un certificato per quella proprietà. Puoi semplicemente indovinare non deterministicamente il certificato per una direzione e puoi dare un certificato che contiene tutte le risposte "giuste" per le ipotesi non deterministiche di 0 e 1 del tuo programma per l'altra direzione.

Se aggiungiamo tempo nel mix, le cose diventano ancora più interessanti. Il tempo di esecuzione di un algoritmo non deterministico viene generalmente considerato il minimo rispetto a tutte le scelte (giuste). Tuttavia, altre scelte possono portare a un tempo di esecuzione drammaticamente peggiore (che può essere asintoticamente peggiore o persino arbitrariamente peggiore del minimo) o persino a un ciclo infinito. Questo è il motivo per cui prendiamo il minimo: non ci importa di questi strani casi.

Ora arriviamo agli algoritmi randomizzati. Gli algoritmi randomizzati sono come algoritmi non deterministici, ma invece di "consentire" la scelta tra 0 e 1 in determinati punti, questa scelta è determinata da un lancio casuale di monete nel momento in cui deve essere effettuata la scelta (che può differire da corsa a corsa o quando la stessa scelta deve essere effettuata nuovamente in seguito durante l'esecuzione dell'algoritmo). Ciò significa che il risultato è 0 o 1 con uguale probabilità. La correttezza ora diventa "l'algoritmo calcola quasi sempre ciò che voglio che calcoli" o "l'algoritmo calcola sempre ciò che voglio che calcoli" (solo la versione deterministica). Nel secondo caso il tempo necessario all'algoritmo per calcolare la sua risposta è di solito "quasi sempre veloce", in contrasto con un deterministico "sempre veloce".

Contrastando i tre: gli algoritmi deterministici specificano esattamente la risposta alla scelta, il non determinismo la lascia completamente aperta, ma ti dice che esiste una risposta "giusta" e la randomizzazione lascia la risposta al caso. Nota che puoi solo indovinare i lanci di monete giusti, che danno origine a una gerarchia tra questi tre: il non determinismo è potente quanto la randomizzazione, che a sua volta è potente come il determinismo o, rispetto al tempo polinomiale, . In questa impostazione, non sono note prove del fatto che una sia strettamente più potente di un'altra.PZPPNP


1
"Il tempo di esecuzione di un algoritmo non deterministico è di solito considerato il minimo rispetto a tutte le scelte (giuste)." - Lo pensavo anch'io, ma a quanto pare è sbagliato . (Consentirebbe algoritmi per tutti i problemi, dove è la soluzione, dopo tutto.)sO(|S|)S
Raffaello

14

In breve: non determinismo significa avere più scelte ugualmente valide su come continuare un calcolo. La randomizzazione significa utilizzare una fonte esterna di bit (casuali) per guidare il calcolo.


Per capire il non determinismo, ti suggerisco di guardare gli automi finiti (FA). Per un FA deterministico (DFA), la funzione di transizione è, beh, una funzione. Dato lo stato corrente e il simbolo di input successivo, lo stato successivo viene definito in modo univoco.

(ab)(ac)*

NFA
[ fonte ]

un'(un'B)*(un'c)*un'

Il punto chiave qui è che l'accettazione è definita come "accetta se esiste una corsa di accettazione" per NFA. Questo criterio di esistenza può essere interpretato come "indovinando sempre bene", anche se non esiste un'ipotesi effettiva.

Si noti che non ci sono probabilità qui, ovunque. Se dovessi tradurre il non determinismo in linguaggi di programmazione, avresti delle affermazioni che possono causare salti su diverse altre affermazioni dato lo stesso stato . Una cosa del genere non esiste, tranne forse nei linguaggi di programmazione esoterici progettati per schivare la tua mente.


La randomizzazione è abbastanza diversa. Se lo analizziamo, l'automa / programma non ha più scelte per continuare l'esecuzione. Una volta disegnati i bit casuali, l'istruzione successiva viene definita in modo univoco:

if ( rand() > 5 )
  do_stuff();
else
  do_other_stuff();

In termini di automi finiti, considerare questo:

PFA
[ fonte ]

{un',B,c}*10

Σ×ΠΠ


Un'ultima nota: possiamo vedere che il non determinismo è un concetto puramente teorico, non può essere implementato! Quindi perché lo usiamo?

  1. Spesso consente rappresentazioni più piccole. Potresti sapere che esistono NFA per i quali il DFA più piccolo è esponenzialmente grande come¹. L'uso di quelli più piccoli è solo una questione di semplificazione del design dell'automa e prove tecniche.

  2. La traduzione tra modelli è spesso più semplice se il non determinismo è consentito nel modello target. Considera, ad esempio, la conversione di espressioni regolari in DFA: il solito (e semplice) modo è di tradurlo in un NFA e determinarlo. Non sono a conoscenza di una costruzione diretta.

  3. Questo può essere un problema accademico, ma è interessante notare che il non determinismo può aumentare la potenza di un dispositivo. Questo non è il caso degli automi finiti e delle macchine di Turing, discutibili i dispositivi dei modelli di macchine più popolari, ma ad esempio automi pushdown deterministici, automi Büchi e automi albero top-down possono accettare lingue meno rigorose rispetto ai loro fratelli non deterministici².


  1. Vedi questa domanda su cstheory.SE per un esempio.
  2. Vedi qui , qui e qui (proposta 1.6.2) , rispettivamente.

Quindi, dal momento che in programmazione, non possiamo creare più "if else" con la stessa condizione, è per questo che probabilità / peso sono talvolta incorporati nella condizione?
Kate,

@kate Non so cosa intendi con questo. Linguaggi di programmazione - diamine, computer! - sono intrinsecamente deterministici. Possiamo creare l'illusione della casualità usando PRNG e trule input casuali (qualunque cosa ciò significhi).
Raffaello

14

Dovresti essere consapevole che ci sono due diverse definizioni di non determinismo che vengono gettate qui intorno.

  1. Come lo definisce Wikipedia, praticamente "non determinismo", cioè qualsiasi algoritmo che non ha sempre lo stesso comportamento sugli stessi input. Gli algoritmi randomizzati sono un caso speciale di algoritmi "non deterministici", perché si adattano alla definizione come ho appena dato.

  2. I modelli di calcolo non deterministici (come le macchine di turing non deterministici) sono modelli teorici di calcolo. Possono avere più possibili percorsi di esecuzione e "accettano" se uno di questi percorsi accetta. Dovresti notare che non sono reali. Non c'è modo di eseguire fisicamente un algoritmo non deterministico in questo senso, sebbene sia possibile simularlo con uno randomizzato o deterministico.

In CS, il non determinismo di solito significa (2), quindi la definizione di Wikipedia che hai dato (che è (1)) è fuorviante. La maggior parte delle risposte fornite finora spiega (2), non (1).


Secondo 1), Quicksort randomizzato è un algoritmo deterministico; Non sono sicuro che sia una terminologia utile. Immagino che 1) possa essere descritto come vista "scatola nera" mentre 2) controlla effettivamente l'algoritmo / la macchina a portata di mano. Probabilmente, CS è tutto circa 2); Assegnerei il punto di vista 1) all'ingegneria del software (modulare).
Raffaello

@Raphael, buon punto, dovrei correggere (1) per dire "hanno lo stesso comportamento sugli stessi input". Concordato di preferire (2) a (1).
usul

Il "comportamento" è ambiguo, esattamente nel modo in cui la scatola è nera o bianca. :)
Raffaello

Certo, ma, immagino di vedere l'importante distinzione tra una Turing Machine formale non definita deterministica (2) e un "non determinismo" vago / ambiguo (1), che potrebbe includere casualità (mentre un NTM non lo fa). Quindi è tutto ciò che volevo dire ....
usul

Non c'è nulla di "irreale" nell'esecuzione di un algoritmo non deterministico, significa solo che durante l'esecuzione, devono essere fatte delle scelte per le quali il risultato non è determinato dall'algoritmo. L'unica differenza tra 1 e 2 è che in 1 non hai detto quando l'algoritmo è considerato "riuscito", mentre in 2 l'algoritmo deve essere del tipo che dice sempre "sì" o "no" alla fine di una corsa e si ha un problema decisionale e si definisce la risposta dell'algoritmo al problema come "sì" se e solo se una delle sue possibili corse risponde "sì". Quindi 2 è solo un caso speciale di 1.
reinierpost

1

Rivisitare questo a causa di alcune ricerche correlate che sto facendo, il disaccordo tra me e alcuni degli altri che hanno risposto, può essere assimilato in una comprensione olistica in cui tutti noi eravamo corretti. Ma l'IMO adottata dalla terminologia informatica "non determinismo limitato" è un ossimoro errato (che prima era il mio punto).

Il loro punto chiave è di distinguere tra non determinismo limitato e illimitato. [1]

Le macchine di Turing non deterministiche (dette anche "NTM") hanno limitato il non determinismo in quanto ogni transizione di stato ha un numero limitato di possibilità, cioè il numero di programmi (dette "configurazioni") è finito. Il nastro rimane illimitato, quindi la prova della risoluzione rimane indecidibile. Ma per ogni dato input che si ferma, l'output è deterministico e limitato nel tempo in vale a dire per qualsiasi input il risultato è deterministico o non termina. Inoltre, le NTM eseguono tutte le possibili configurazioni in parallelo, quindi eseguono esponenzialmente più velocemente dell'emulazione di NTM su macchine Turing deterministiche (dette anche "DTM"). [2]

In realtà non esiste alcuna relazione non deterministica tra input e risultati negli NTM perché il risultato è sempre lo stesso per qualsiasi input o stato iniziale, il che è evidente perché possono essere emulati dai DTM senza alcuna casualità aggiunta. [2] Indecidibile non è l'antitesi del deterministico, perché anche il non fermarsi è un risultato deterministico. Le macchine deterministiche hanno sempre lo stesso risultato per un dato input, anche quando tale risultato non si ferma. Il non determinismo localizzato degli NTM è in ogni transizione di stato dell'algoritmo di esecuzione. È indecidibile a priori quale percorso dell'albero potrebbe terminare fornendo lo stato di output. Ma l'indecidibilità non è non determinismo. Pertanto, il termine "non determinismo limitato" intende descrivere l'indeterminatezza localizzata all'interno della macchina a stati ma non la relazione degli input con i risultati, da qui il concetto di "limitato". Penso ancora che il termine "non determinismo limitato" sia un ossimoro e avrebbe potuto essere descritto più accuratamente come una macchina di Turing "transizione di stato parallelizzata".

Considerando che, per ogni dato input o stato iniziale, il non determinismo illimitato (aka "indeterminismo") ha un numero illimitato di possibili stati. Il non determinismo illimitato implica non solo il numero di possibili configurazioni di programmi, ma anche uno stato esterno illimitato che non fa parte dell'input o dello stato iniziale, come ritardi illimitati. E così i risultati possono variare su esecuzioni ripetute per lo stesso input o condizione iniziale; quindi non è una relazione deterministica tra input e risultati. [3]

Gli algoritmi randomizzati e probabilistici impiegano un po 'di non determinismo, vale a dire la selezione casuale di possibili configurazioni probabilmente limitate nel numero di configurazioni, ma non eseguono tutte le possibili configurazioni come fanno le NTM. Pertanto non sono deterministici a meno che la casualità non sia deterministica (ad esempio PRNG) e lo stato iniziale dell'entropia per la casualità sia considerato parte dell'input.

[1] https://en.wikipedia.org/w/index.php?title=Unbounded_nondeterminism&oldid=710628370#Nondeterministic_automata

[2] https://en.wikipedia.org/w/index.php?title=Non-deterministic_Turing_machine&oldid=754212081#Equivalence_with_DTMs

[3] Hewitt, Meijer e Szyperski: The Actor Model (tutto quello che volevi sapere ...) . Vai al segno 17:44 minuti.


1
Non vedo come questo risponda alla domanda.
adrianN,

1
@adrianN la risposta fornisce la spiegazione di cosa sia veramente il non determinismo. E poi spiega come si collegano gli algoritmi randomizzati. La domanda chiede di mettere in relazione i due. Bingo. Domanda risposta.
Shelby Moore III,

0

Oltre a tutte le risposte che spiegano la differenza, ho un esempio che può aiutarti a ottenere ciò che vogliono dire.
Si consideri un lancio della moneta, potrete trovare o un H o un T . Se il lancio della moneta è casuale, è molto probabile che su 1000 lanci di moneta, 500 sarebbe H ed è abbastanza improbabile che 999 di loro sarebbe H . Ma se il lancio della moneta non è deterministico, non possiamo dire che ottenere 999 H sarebbe altamente improbabile.


Penso che il tuo post serva da commento, inoltre non tenta di risolvere la domanda principale in modo casuale rispetto agli algoritmi non deterministici e inoltre ci riporta a diversi tipi di non determinismo.
Evil

-6

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/randomo 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!


4
Non è questo che significa il non determinismo nell'informatica. Gli algoritmi non deterministici non sono "imprevedibili".
David Richerby,

4
Rispondo non ha nulla a che fare con il modo in cui il non determinismo è definito in automi resp. teoria della computabilità. Shelby, dovresti smettere di fiammeggiare e prendere un libro di testo. Se non capisci le altre risposte, non credo che possiamo aiutarti in un commento.
Raffaello

3
@ShelbyMooreIII Hai completamente frainteso il significato del non determinismo nell'informatica. Non ha nulla a che fare con l'entropia. Non significa che cosa pensi significhi: ecco perché pensi che tutte le altre risposte siano sbagliate. Forse il nome è stato scelto male ma non è questo il punto. Ha un significato particolare nell'informatica, che è diverso dal significato che ha in altre scienze. Stai cercando di usare la definizione sbagliata, ed è per questo che tutto ti sembra completamente sbagliato.
David Richerby,

4
"L'uso del termine non determinismo quando si parla di teoria della complessità computazionale [...] è chiaramente tutto sull'entropia" - no, non lo è.
Raffaello

3
Siamo d'accordo: smettila di provare a "insegnarci", non aiuta nessuno.
Raffaello
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.