¿Diferencias y relaciones entre algoritmos aleatorios y no deterministas?

30

¿Qué diferencias y relaciones hay entre los algoritmos aleatorios y los algoritmos no deterministas?

De Wikipedia

UNA algoritmo aleatorio es un algoritmo que emplea un grado de aleatoriedad como parte de su lógica. El algoritmo generalmente utiliza bits aleatorios uniformes como entrada auxiliar para guiar su comportamiento, con la esperanza de lograr un buen rendimiento en el "caso promedio" sobre todas las opciones posibles de bits aleatorios. Formalmente, el rendimiento del algoritmo será una variable aleatoria determinada por los bits aleatorios; por lo tanto, el tiempo de ejecución o la salida (o ambas) son variables aleatorias.

Un algoritmo no determinista es un algoritmo que puede exhibir diferentes comportamientos en diferentes ejecuciones, a diferencia de un algoritmo determinista. Hay varias formas en que un algoritmo puede comportarse de manera diferente de una ejecución a otra. Un algoritmo concurrente puede funcionar de manera diferente en diferentes carreras debido a una condición de carrera. El comportamiento de un algoritmo probabilístico depende de un generador de números aleatorios. Un algoritmo que resuelve un problema en tiempo polinomial no determinista puede ejecutarse en tiempo polinomial o exponencial dependiendo de las elecciones que realice durante la ejecución.

¿Son los algoritmos aleatorios y los algoritmos probabilísticos el mismo concepto?

En caso afirmativo, ¿los algoritmos aleatorios son solo una especie de algoritmos no deterministas?

Tim
fuente
Creo que parte de la confusión surge porque "no determinista" y "no determinista" parecen significar lo mismo, pero no lo hacen: "determinista" implica "no aleatorio" y "no no determinista". Entonces, "aleatorio" y "no determinista" son dos formas en que un algoritmo podría ser "no determinista", pero "no determinista" tiene una definición técnica específica, y no es simplemente un antónimo de "determinista".
Joe
3
Ver también ¿Cuál es la diferencia entre no determinismo y aleatoriedad?
Gilles 'SO- deja de ser malvado'

Respuestas:

24

Los algoritmos no deterministas son muy diferentes de los algoritmos probabilísticos.

Los algoritmos probabilísticos son los que utilizan el lanzamiento de monedas y funcionan "la mayor parte del tiempo". Como ejemplo, las variantes aleatorias de clasificación rápida funcionan en el tiempo en expectativa (y con alta probabilidad), pero si tiene mala suerte, podría tomar tanto como Θ ( n 2 )Θ(nlogn)Θ(n2) . Los algoritmos probabilísticos son prácticos y su computadora los utiliza, por ejemplo, cuando genera claves RSA (para probar que los dos factores de su clave secreta son primos). Algoritmo probabilístico que no utiliza ningún lanzamiento de monedas a veces se llama "determinista".

Los algoritmos no deterministas son aquellos que "necesitan una pista" pero siempre son correctos: no pueden ser engañados si se les da una pista incorrecta. Como ejemplo, aquí hay un algoritmo no determinista que factoriza un número entero : adivine una factorización de n , y verifique que todos los factores sean primos (hay un algoritmo determinista "rápido en teoría" para hacerlo). Este algoritmo es muy rápido y rechaza sugerencias falsas. La mayoría de la gente piensa que los algoritmos aleatorios no pueden factorizar números enteros tan rápido. Claramente, este modelo de cálculo no es realista.nn

¿Por qué nos importan los algoritmos no deterministas? Hay una clase de problemas, conocidos como NP, que consiste en problemas de decisión que tienen algoritmos no deterministas eficientes. La mayoría de la gente piensa que los problemas más difíciles en esa clase, los llamados problemas NP completos, no tienen algoritmos deterministas eficientes (o incluso aleatorizados) eficientes; Esto se conoce como la pregunta P vs NP. Dado que muchos problemas naturales son NP-completos, es interesante saber si en realidad no se pueden resolver de manera eficiente, en el peor de los casos (en la práctica, a menudo las instancias que surgen en la práctica se pueden resolver en un tiempo razonable).

Yuval Filmus
fuente
¡Gracias! (1) Recuerdo que los problemas de NP son aquellos que pueden resolverse mediante un algoritmo en una máquina de Turing no determinista en tiempo polinómico. Entonces, ¿son "un algoritmo en una máquina de Turing no determinista" y "un algoritmo no determinista en una máquina de Turing determinista" equivalente en algún sentido? (2) ¿Crees que el algoritmo probabalístico y el algoritmo aleatorio son el mismo concepto? (3) ¿Cree también que Wikipedia dice que el algoritmo concurrente y el algoritmo probabalístico son dos tipos de algoritmos no deterministas que están mal?
Tim
1
No creo que el sabor del certificado de no determinismo sirva para aclarar la diferencia con la aleatorización.
Raphael
(1) Sí, los dos son iguales. (2) Estos son dos nombres para el mismo concepto. (3) Wikipedia está dando algunos ejemplos de otros tipos de algoritmos, aunque la presentación puede ser engañosa. Los algoritmos paralelos y probabilísticos no son no deterministas.
Yuval Filmus
44
@ShelbyMooreIII El no determinismo tiene un significado técnico muy específico en la teoría de la recursión y la informática teórica.
Yuval Filmus
1
Yuval, marca los comentarios que creas que no son constructivos u obsoletos; los eliminaremos entonces.
Raphael
15

Un algoritmo especifica un método para pasar de una entrada dada a una salida deseada que tiene una cierta relación con la entrada. Decimos que este algoritmo es determinista si en algún momento se especifica de manera exacta e inequívoca cuál es el siguiente paso en el algoritmo que debe realizarse como parte de ese método, potencialmente dependiente de la entrada o los datos parciales calculados hasta ahora, pero siempre identificado de forma única.

El no determinismo significa que una parte del algoritmo se deja debajo o incluso sin especificar. Por ejemplo, "int i = un número par entre 0 yn" está subespecificado. Esto significa que no hay un comportamiento único que se especifique en este momento.

Para que esta distinción sea útil, necesita el concepto (habitual) de "corrección" para los algoritmos (deterministas), que informalmente es que "el algoritmo siempre calcula lo que quiero que calcule". Entonces se vuelve interesante pensar qué significaría la corrección para los algoritmos no deterministas, que deben tener en cuenta las opciones posibles en instrucciones poco especificadas.

Hay dos formas de definir la corrección para el no determinismo. El primero es bastante simple y menos interesante, para lo cual la corrección significa "el algoritmo siempre calcula lo que quiero que calcule, para todas las secuencias de elecciones que se me permite hacer". Esto a veces ocurre si un autor de un poco de pseudocódigo es demasiado vago para elegir un número y dice "elegir cualquier número par entre 0 y n", cuando "elegir 0" habría hecho que el algoritmo fuera determinista. Esencialmente, al reemplazar todo el no determinismo por el resultado de alguna elección, puede hacer que el algoritmo sea determinista.

Este es también el "no determinismo" mencionado en su segundo párrafo. Este es también el no determinismo en los algoritmos paralelos: en estos algoritmos no está muy seguro de cómo se ve la ejecución con precisión, pero sabe que siempre funcionará, sin importar lo que suceda exactamente (de lo contrario, su algoritmo paralelo sería incorrecto).

La definición interesante de corrección para el algoritmo no determinista es "el algoritmo siempre calcula lo que quiero que calcule, para alguna secuencia de elecciones que se me permite hacer". Esto significa que puede haber elecciones incorrectas, en el sentido de que hacen que el algoritmo produzca la respuesta incorrecta o incluso que entren en un ciclo infinito. En el ejemplo "elija cualquier número par entre 0 yn", quizás 4 y 16 son opciones correctas, pero todos los demás números son incorrectos, y estos números pueden variar dependiendo de la entrada, los resultados parciales y las elecciones realizadas hasta ahora.

Cuando se usa en ciencias de la computación, el no determinismo generalmente se limita a elegir de manera no determinista un 0 o un 1. Sin embargo, si elige muchos de estos bits de manera no determinista, puede generar números largos no deterministas u otros objetos, así como tomar decisiones no deterministas, por lo que esto difícilmente (si alguna vez) limita su aplicabilidad: si la aplicabilidad es limitada, el no determinismo era demasiado poderoso en primer lugar.

El no determinismo es una herramienta que es exactamente tan poderosa como un algoritmo determinista basado en certificados, es decir, un algoritmo que verifica una propiedad dada una instancia y un certificado para esa propiedad. Simplemente puede adivinar de forma no determinista el certificado para una dirección, y puede proporcionar un certificado que contenga todas las respuestas "correctas" para las suposiciones no deterministas de 0 y 1 de su programa para la otra dirección.

Si agregamos tiempo de ejecución a la mezcla, las cosas se vuelven aún más interesantes. El tiempo de ejecución de un algoritmo no determinista generalmente se considera el mínimo sobre todas las opciones (correctas). Sin embargo, otras opciones pueden conducir a un tiempo de ejecución dramáticamente peor (que puede ser asintóticamente peor o incluso arbitrariamente peor que el mínimo), o incluso un ciclo infinito. Es por eso que tomamos el mínimo: no nos importan estos casos extraños.

Ahora llegamos a algoritmos aleatorios. Los algoritmos aleatorios son como algoritmos no deterministas, pero en lugar de 'permitir' la elección entre 0 y 1 en ciertos puntos, esta elección se determina mediante un lanzamiento aleatorio de monedas en el momento en que debe hacerse la elección (que puede diferir de una carrera a otra) , o cuando la misma elección debe hacerse nuevamente más tarde durante la ejecución del algoritmo). Esto significa que el resultado es 0 o 1 con igual probabilidad. La corrección ahora se convierte en "el algoritmo casi siempre calcula lo que quiero que calcule" o "el algoritmo siempre calcula lo que quiero que calcule" (solo la versión determinista). En el segundo caso, el tiempo que el algoritmo necesita para calcular su respuesta suele ser "casi siempre rápido", en contraste con un determinista "siempre rápido".

PAGSZPAGSPAGSnortePAGS

Alex ten Brink
fuente
1
O(El |sEl |)s
14

En resumen: no determinismo significa tener múltiples opciones igualmente válidas de cómo continuar un cálculo. La aleatorización significa utilizar una fuente externa de bits (aleatorios) para guiar el cálculo.


Para entender el no determinismo, le sugiero que mire los autómatas finitos (FA). Para un FA determinista (DFA), la función de transición es, bueno, una función. Dado el estado actual y el siguiente símbolo de entrada, el siguiente estado se define de manera única.

(unasi)(unado)

NFA
[ fuente ]

una(unasi)(unado)una .

El punto clave aquí es que la aceptación se define como "aceptar si hay una ejecución de aceptación" para NFA. Este criterio de existencia puede interpretarse como "siempre acertando", a pesar de que no hay conjeturas reales.

Tenga en cuenta que no hay probabilidades aquí, en ningún lado. Si fuera a traducir el no determinismo a lenguajes de programación, tendría declaraciones que pueden causar saltos a otras declaraciones diferentes con el mismo estado . Tal cosa no existe, excepto tal vez en lenguajes de programación esotéricos diseñados para ignorarlo.


La aleatorización es bastante diferente. Si lo desglosamos, el autómata / programa no tiene múltiples opciones para continuar la ejecución. Una vez que se dibujan los bits aleatorios, la siguiente declaración se define de manera única:

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

En términos de autómatas finitos, considere esto:

PFA
[ fuente ]

{una,si,do}10 0 ).

Σ×ΠΠ es un alfabeto suficientemente grande utilizado por la fuente aleatoria.


Una nota final: podemos ver que el no determinismo es un concepto puramente teórico, ¡no se puede implementar! Entonces, ¿por qué lo usamos?

  1. A menudo permite representaciones más pequeñas. Es posible que sepa que hay NFA para los que el DFA más pequeño es exponencialmente tan grande¹. Usar los más pequeños es solo una cuestión de simplificar el diseño del autómata y las pruebas técnicas.

  2. La traducción entre modelos a menudo es más directa si se permite el no determinismo en el modelo de destino. Considere, por ejemplo, convertir expresiones regulares a DFA: la forma habitual (y simple) es traducirla a un NFA y determinar esta. No tengo conocimiento de una construcción directa.

  3. Esto puede ser una preocupación académica, pero es interesante que el no determinismo puede aumentar el poder de un dispositivo. Este no es el caso de los autómatas finitos y las máquinas de Turing, discutibles como los dispositivos de modelos de máquinas más populares, pero por ejemplo, los autómatas deterministas pushdown, los autómatas Büchi y los autómatas de árbol de arriba hacia abajo pueden aceptar estrictamente menos idiomas que sus hermanos no deterministas².


  1. Ver esta pregunta en cstheory.SE para ver un ejemplo.
  2. Ver aquí , aquí y aquí (Proposición 1.6.2) , respectivamente.
Rafael
fuente
Entonces, dado que en la programación, no podemos hacer múltiples "si no" con la misma condición, ¿es por eso que la probabilidad / peso a veces se incorpora a la condición?
Kate
@kate No sé a qué te refieres con eso. Lenguajes de programación: ¡diablos, computadoras! - son inherentemente deterministas. Podemos crear la ilusión de aleatoriedad utilizando PRNG y entradas aleatorias trule (lo que sea que eso signifique).
Raphael
14

Debe tener en cuenta que hay dos definiciones diferentes de no determinismo lanzadas por aquí.

  1. Como lo define Wikipedia, prácticamente "no es determinismo", es decir, cualquier algoritmo que no siempre tiene el mismo comportamiento en las mismas entradas. Los algoritmos aleatorios son un caso especial de algoritmos "no deterministas", porque se ajustan a la definición que acabo de dar.

  2. Los modelos de cómputo no deterministas (como las máquinas de Turing no deterministas) son modelos teóricos de cómputo. Pueden tener múltiples rutas posibles de ejecución y "aceptan" si alguna de esas rutas acepta. Debes tener en cuenta que no son reales. No hay forma de ejecutar físicamente un algoritmo que no sea determinista en este sentido, aunque puede simularlo con uno aleatorio o determinista.

En CS, el no determinismo generalmente significa (2), por lo que la definición de Wikipedia que dio (que es (1)) es engañosa. La mayoría de las respuestas dadas hasta ahora explican (2), no (1).

usul
fuente
Según 1), Quicksort aleatorizado es un algoritmo determinista; No estoy seguro de que sea una terminología útil. Supongo que 1) podría describirse como una vista de "recuadro negro", mientras que 2) realmente inspecciona el algoritmo / máquina en cuestión. Podría decirse que CS se trata de 2); Asignaría el punto de vista 1) a la ingeniería de software (modular).
Raphael
@Raphael, Buen punto, debería arreglar (1) para decir "tener el mismo comportamiento en las mismas entradas". Acordó preferir (2) sobre (1).
usul
El "comportamiento" es ambiguo, exactamente en la forma de caja negra versus caja blanca. :)
Raphael
Claro, pero supongo que veo la importante distinción entre una máquina de Turing formal no definida y precisa (2) y un "no determinismo" vago / ambiguo (1), que podría incluir aleatoriedad (mientras que una NTM no lo hace). Así que eso es todo lo que quería decir ...
usul
No hay nada 'irreal' en ejecutar un algoritmo no determinista, solo significa que, mientras se ejecuta, es necesario tomar decisiones para las cuales el algoritmo no determina el resultado. La única diferencia entre 1 y 2 es que en 1 no ha dicho cuándo se considera que el algoritmo "tiene éxito", mientras que en 2 el algoritmo debe ser del tipo que siempre dice "sí" o "no" al final de una ejecución y usted tiene un problema de decisión y define la respuesta del algoritmo al problema como "sí" si y solo si alguna de sus posibles ejecuciones responde "sí". Entonces 2 es solo un caso especial de 1.
reinierpost
1

Revisar esto debido a algunas investigaciones relacionadas que estoy haciendo, el desacuerdo entre mí y algunos de los otros que respondieron, puede asimilarse en una comprensión holística en la que todos estábamos en lo correcto. Pero en mi opinión, la terminología informática adoptada "no determinismo limitado" es un oxímoron incorrecto (que era mi punto antes).

El punto clave es distinguir entre el no determinismo acotado y no acotado. [1]

Las máquinas de Turing no deterministas (también conocidas como "NTM") tienen un no determinismo limitado en el sentido de que cada transición de estado tiene un límite número de posibilidades, es decir, el número de programas (también conocido como "configuraciones") es finito. La cinta permanece sin límites, por lo que la prueba de terminación permanece indecidible. Pero para cualquier entrada dada que se detenga, la salida es determinista y limitada en el tiempo, es decir, para cualquier entrada el resultado es determinista o no termina. Además, las NTM ejecutan todas las configuraciones posibles en paralelo, por lo que se ejecutan exponencialmente más rápido que la emulación de las NTM en máquinas de Turing deterministas (también conocidas como "DTM"). [2]

Realmente no hay ninguna relación no determinista entre las entradas y los resultados en las MNA porque el resultado es siempre el mismo para cualquier entrada o estado inicial, lo cual es evidente porque pueden ser emulados por las MTM sin ninguna aleatoriedad adicional. [2] Indecidible no es la antítesis de determinista, porque no detenerse es también un resultado determinista. Las máquinas deterministas siempre tienen el mismo resultado para una entrada dada, incluso cuando ese resultado no debe detenerse. El no determinismo localizado de las NTM está en cada transición de estado del algoritmo de ejecución. Es indecidible a priori qué ruta del árbol podría terminar proporcionando el estado de salida. Pero la indecidibilidad no es no determinismo. Por lo tanto, el término "no determinismo limitado" pretende describir la indeterminación localizada dentro de la máquina de estados, pero no la relación de las entradas con los resultados, de ahí el concepto de "acotado". Sigo pensando que el término "no determinismo limitado" es un oxímoron y podría haberse descrito con mayor precisión como una máquina de Turing de "transición de estado paralela".

Mientras que, para cualquier entrada o estado inicial, el no determinismo ilimitado (también conocido como "indeterminismo") tiene un número ilimitado de estados posibles. El no determinismo ilimitado implica no solo el número de configuraciones posibles de programas, sino también un estado externo ilimitado que no es parte de la entrada o el estado inicial, como retrasos ilimitados. Y, por lo tanto, los resultados pueden variar en ejecuciones repetidas para la misma entrada o condición inicial; por lo tanto, no es una relación determinista entre entradas y resultados. [3]

Los algoritmos aleatorios y probabilísticos emplean cierto no determinismo, es decir, la selección aleatoria de posibles configuraciones posiblemente limitadas en un número de configuraciones, pero no ejecutan todas las configuraciones posibles como lo hacen las NTM. Por lo tanto, no son deterministas a menos que la aleatoriedad sea determinista (por ejemplo, PRNG) y el estado inicial de la entropía para la aleatoriedad se considere parte de la entrada.

[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 y Szyperski: The Actor Model (todo lo que querías saber ...) . Salta a la marca de 17:44 minutos.

Shelby Moore III
fuente
1
No veo cómo esto responde la pregunta.
adrianN
1
@adrianN la respuesta expone la explicación de lo que realmente es el no determinismo. Y luego explica cómo se relacionan los algoritmos aleatorios. La pregunta pide relacionar los dos. Bingo. Pregunta respondida
Shelby Moore III
0

Además de todas las respuestas que explican la diferencia, tengo un ejemplo que puede ayudarlo a entender lo que quieren decir.
Considere una moneda al aire, o bien obtener un H o una camiseta . Si el lanzamiento de la moneda es aleatoria, es muy probable que de 1000 lanzamientos de moneda, 500 habría H y es muy poco probable que 999 fuera de ellos sería H . Pero si el lanzamiento de la moneda no es determinista, no podemos decir que obtener 999 H sería altamente improbable.

Priyanshu
fuente
Creo que su publicación sirve como un comentario, además de que no intenta resolver la pregunta principal de algoritmos aleatorios versus no deterministas y, además, nos arrastra a diferentes tipos de no determinismos.
Mal
-6

Los algoritmos aleatorizados (tiempo polinómico, resultado booleano) se encuentran en la clase de complejidad computacional RP, que es un subconjunto de NP donde residen los algoritmos no deterministas (tiempo polinómico, resultado booleano) y un superconjunto de P donde los deterministas (tiempo polinómico, resultado booleano) Los algoritmos residen.

La complejidad de los subconjuntos consiste en reducir los problemas de un conjunto a otro. Por lo tanto, RP ⊆ NP excluye la posibilidad de algoritmos aleatorios que también son no deterministas porque, de manera definitoria, un superconjunto contiene el subconjunto. Subconjunto significa que cada algoritmo RP (o cualquier algoritmo RP completo) puede reducirse a algún algoritmo NP (o cualquier algoritmo NP completo). P es un subconjunto de RP porque cada problema en P puede reducirse a un problema en RP donde la cantidad de entropía no controlada es 0.

Tangencialmente, esto es análogo a cómo cada problema en NC (cómputo paralelo) puede reducirse a un problema en P simulando el cómputo paralelo en una reducción a un problema en serie en P, pero aún no se ha demostrado que lo contrario sea cierto, es decir que cada problema en P es reducible a un problema en NC, ni demostrado que no sea cierto, es decir, la prueba inverosímil de que un problema P-completo no es reducible a un problema en NC. Puede ser posible que haya problemas que son inherentemente seriales y no pueden calcularse en paralelo, pero para probar que probar P ≠ NC parece ser inverosímil (por razones demasiado tangenciales para discutir en esta respuesta).

En términos más generales (es decir, sin limitarse a los tipos de resultados booleanos), los algoritmos aleatorios se distinguen de los algoritmos deterministas en el sentido de que parte de la entropía se origina externamente . Los algoritmos aleatorios se distinguen de los algoritmos no deterministas porque la entropía está limitada y, por lo tanto, se puede demostrar que los algoritmos aleatorios (y no no deterministas) siempre terminan.

La imprevisibilidad de los algoritmos no deterministas se debe a la incapacidad de enumerar todas las permutaciones posibles de la entropía de entrada (lo que resulta en la imprevisibilidad de la terminación). La imprevisibilidad de un algoritmo aleatorio se debe a la incapacidad de controlartoda la entropía de entrada (que da como resultado una imprevisibilidad de un resultado indeterminado, aunque se puede predecir la tasa de imprevisibilidad). Ninguna de estas son declaraciones sobre la imprevisibilidad de la respuesta correcta al problema, sino que la imprevisibilidad se manifiesta en el canal lateral de terminación y el resultado indeterminado, respectivamente. Parece que muchos lectores están combinando la imprevisibilidad en un área con la imprevisibilidad del resultado correcto, que es una combinación que nunca escribí (revise el historial de edición).

Es clave comprender que el no determinismo es siempre (en cualquier ciencia o uso del término) la incapacidad de enumerar la entropía universal (es decir, sin límites). Mientras que, la aleatorización se refiere al acceso a otra fuente de entropía (en programas de entropía diferentes y, por lo tanto, no bajo el control de las variables de entrada) que pueden o no estar ilimitadas.

Agregué el siguiente comentario debajo de la respuesta más popular actualmente al otro hilo que hace una pregunta similar.

Todas las ciencias usan la misma definición de no determinismo unificada en el concepto de entropía ilimitada. Los resultados impredecibles en todas las ciencias se deben a la incapacidad de enumerar a priori todas las salidas posibles de un algoritmo (o sistema) porque acepta estados ilimitados, es decir, clase de complejidad NP. Especificar una entrada particular para observar si se detiene y señalar que el resultado es idempotente es equivalente en otras ciencias a mantener constante el resto de la entropía del universo mientras se repite el mismo cambio de estado. La computación permite este aislamiento de entropía, mientras que las ciencias naturales no.

Agregando algunos de los mejores comentarios para aclarar mi punto sobre la única distinción sobresaliente entre aleatorizado y no determinista.

Es realmente bastante elegante y fácil ver la distinción, una vez que todos dejan de confundirlo al tratar de describirlo desde un punto de vista operativo en lugar de desde el punto de vista de la entropía más destacado.

@reinierpost todos están combinando la diferencia entre aleatorio y no determinista. Esto hace que su comentario se confunda. El algoritmo responde a la interacción de la entropía de entrada (variable) y su entropía interna de código fuente (invariante). El no determinismo es una entropía ilimitada. La entropía invariante puede incluso ser internamente ilimitada, como expandir los dígitos de π . Aleatorizado es que parte de la entropía no está acoplada a la entrada como se define (es decir, puede provenir de una llamada al sistema /dev/randomo una aleatoriedad simulada, por ejemplo, NFA o un PRNG).

.

La definición formal de @Raphael de autómata finito no determinista (NFA) es entropía de entrada finita (datos: la tupla de 5). Por lo tanto, cada NFA puede ejecutarse en una máquina de Turing determinista, es decir, no requiere una máquina completa de Turing no determinista. Por lo tanto, los NFA no están en la clase de problemas no deterministas. La noción de "no determinismo" en NFA es que su determinismo (aunque claramente presente ya que cada NFA se puede convertir en un DFA) no se expande explícitamente, no es lo mismo que el no determinismo de cómputo

.

@Raphael, el supuesto "no determinismo" en los NFA es realmente aleatoriedad, es el sentido de mi definición de la distinción entre aleatoriedad y no determinismo. Mi definición es que la aleatoriedad es donde parte de la entropía que no está bajo el control, el conocimiento (o la expansión no explícita deseada en el caso de un NFA) de la entrada al programa o función. Mientras que el verdadero no determinismo es la incapacidad de conocer la entropía en cualquier caso, porque no tiene límites. Esto es precisamente lo que distingue al azar del no determinismo. Por lo tanto, la NFA debería ser un ejemplo de lo primero, no lo último como usted afirmó.

.

@Raphael, como ya expliqué, la noción de no determinismo en los NFA combina lo no determinista con la entropía finita. Por lo tanto, el no determinismo es un concepto local de no expandir el determinismo como una forma de compresión o conveniencia, por lo tanto, no decimos que los NFA son no deterministas, sino que poseen apariencia de aleatoriedad a un oráculo que no está dispuesto a calcular la expansión determinista. Pero todo es un espejismo porque se llama expandirse determinísticamente porque la entropía no es ilimitada, es decir, finita.

Los diccionarios son herramientas. Aprende a usarlos.

adjetivo aleatorio

Estadística. o caracterizar un proceso de selección en el que cada elemento de un conjunto tiene la misma probabilidad de ser elegido.

ser o estar relacionado con un conjunto o con un elemento de un conjunto, cada uno de cuyos elementos tiene la misma probabilidad de ocurrencia

Por lo tanto, la aleatorización solo requiere que parte de la entropía de entrada sea equiprobable, lo que es congruente con mi definición de que parte de la entropía de entrada no puede ser controlada por el llamador de la función. Tenga en cuenta que la aleatorización no requiere que la entropía de entrada sea indecidible hasta la terminación.

En informática, un algoritmo determinista es un algoritmo que, dada una entrada particular, siempre producirá la misma salida, con la máquina subyacente siempre pasando por la misma secuencia de estados.

Formalmente, un algoritmo determinista calcula una función matemática; una función tiene un valor único para cualquier entrada en su dominio, y el algoritmo es un proceso que produce este valor particular como salida.

Los algoritmos deterministas se pueden definir en términos de una máquina de estados: un estado describe lo que una máquina está haciendo en un instante particular en el tiempo. Las máquinas de estado pasan de manera discreta de un estado a otro. Justo después de ingresar la entrada, la máquina está en su estado inicial o estado inicial. Si la máquina es determinista, esto significa que a partir de este momento, su estado actual determina cuál será su próximo estado; su curso a través del conjunto de estados está predeterminado. Tenga en cuenta que una máquina puede ser determinista y aún así nunca detenerse o terminar, y por lo tanto no puede entregar un resultado.

Esto nos dice que los algoritmos deterministas deben estar completamente determinados por el estado de entrada de la función, es decir, debemos ser capaces de demostrar que la función terminará (o no terminará) y eso no puede ser indecidible. A pesar del intento confuso de Wikipedia de describir no determinista, la única antítesis para determinista como se define anteriormente en Wikipedia, son los algoritmos cuyo estado de entrada (entropía) está mal definido. Y la única forma en que el estado de entrada puede estar mal definido es cuando no está acotado (por lo tanto, no se puede preanalizar determinísticamente). Esto es precisamente lo que distingue a una máquina de Turing no determinista (y muchos programas del mundo real que están escritos en lenguajes completos comunes de Turing como C, Java, Javascript, ML, etc.) de TM deterministas y lenguajes de programación como HTML, fórmulas de hojas de cálculo, Coq, Epigram,

En la teoría de la complejidad computacional, los algoritmos no deterministas son aquellos que, en cada paso posible, pueden permitir múltiples continuaciones (imagina a un hombre caminando por un sendero en un bosque y, cada vez que avanza, debe elegir qué bifurcación en el camino desea tomar). Estos algoritmos no llegan a una solución para cada ruta computacional posible; sin embargo, se garantiza que llegarán a una solución correcta para algún camino (es decir, el hombre que camina por el bosque solo puede encontrar su cabaña si elige alguna combinación de caminos "correctos"). Las elecciones pueden interpretarse como suposiciones en un proceso de búsqueda.

Wikipedia y otros intentan combinar la aleatorización con el no determinismo, pero ¿cuál es el punto de tener los dos conceptos si no los va a distinguir elocuentemente?

Claramente, el determinismo se trata de la capacidad de determinar. Claramente, la aleatorización se trata de hacer que parte de la entropía sea equiparable.

Incluir entropía aleatoria en el estado de un algoritmo no necesariamente lo hace indeterminable. Por ejemplo, un PRNG puede tener la distribución estadística equiprobable requerida, pero también puede ser completamente determinista.

La combinación de conceptos ortogonales es lo que las personas de bajo coeficiente intelectual. ¡Espero algo mejor que eso de esta comunidad!

Shelby Moore III
fuente
44
Eso no es lo que significa no determinismo en informática. Los algoritmos no deterministas no son "impredecibles".
David Richerby
44
Respondo que no tiene nada que ver con cómo se define el no determinismo en autómata resp. Teoría de la computabilidad. Shelby, deberías dejar de flamear y conseguir un libro de texto. Si no comprende las otras respuestas, no creo que podamos ayudarlo en un comentario.
Raphael
3
@ShelbyMooreIII Has entendido mal lo que significa no determinismo en informática. No tiene nada que ver con la entropía. No significa lo que crees que significa: por eso crees que todas las otras respuestas están equivocadas. Tal vez el nombre fue mal elegido, pero eso no viene al caso. Tiene un significado particular en informática, que es diferente del significado que tiene en otras ciencias. Estás tratando de usar la definición incorrecta, y es por eso que todo te parece completamente incorrecto.
David Richerby
44
"El uso del término no determinismo cuando se habla de la teoría de la complejidad computacional [...] se trata claramente de la entropía", no, no lo es.
Raphael
3
Podemos estar de acuerdo en eso: por favor, deja de intentar "enseñarnos", no está ayudando a nadie.
Raphael