Algoritmo determinístico

Algoritmo determinístico

Algoritmo determinístico

En Ciencias de la computación, un algoritmo determinístico es un algoritmo que, en términos informales, es completamente predictivo si se conocen sus entradas. Dicho de otra forma, si se conocen las entradas del algoritmo siempre producirá la misma salida, y la máquina interna pasará por la misma secuencia de estados. Este tipo de algoritmos ha sido el más estudiado durante la historia y por lo tanto resulta ser el tipo más familiar de los algoritmos, así como el más práctico ya que puede ejecutarse en las máquinas eficientemente.

Un modelo simple de algoritmo determinístico es la función matemática, de esta forma se puede establecer el siguiente paralelismo: la función extrae la misma salida para una entrada dada, al igual que los algoritmos determinísticos. La diferencia es que un algoritmo describe explícitamente como la salida se obtiene de la entrada, mientras que las funciones definen implícitamente su salida.

Contenido

Definición formal

Formalmente los algoritmos determinísticos se pueden definir en términos de una máquina de estado: un estado describe que está haciendo la máquina en un instante particular de tiempo. Justo cuando se produce la entrada, la máquina comienza en su estado inicial y, posteriormente, si la máquina es determinística, comenzará la ejecución de la secuencia de estados predeterminados. Una máquina puede ser determinística y no tener límite temporal para la ejecución o quedarse en un bucle de estados cíclicos eternamente.

Ejemplos de máquinas abstractas determinísticas son las máquinas de Turing determinísticas y los autómatas finitos determinísticos.

Qué hace a un algoritmo no determinístico

Una variedad de factores puede ser la causa de que un algoritmo determinístico se comporte como de una forma no determinística:

  • Si emplea en la ejecución de la secuencia de estados otro estado "externo" como entrada del proceso, como por ejemplo: una entrada de un usuario, una variable objetivo, un valor de un temporizador de hardware, un valor aleatorio, etc.
  • Si al operar se encuentra con concurrencia de estados, por ejemplo si tiene múltiples procesadores escribiendo al mismo tiempo en un fichero. En este caso el orden preciso en el que cada procesador escribe el dato puede afectar a la salida y no está pre-planificado su valor inicial.
  • Si un error (cuyo origen puede deberse al hardware o al software) causa un inesperado cambio en la secuencia de ejecución de estados.

Aunque los programas reales rara vez son puramente determinísticos, es más fácil que los seres humanos así como otros programas determinar sobre la esencia de lo que realmente son. Por esta razón, la mayoría de los lenguajes de programación y especialmente aquellos que entran dentro de la categoría de programación funcional son lenguajes que hacen un esfuerzo en prevenir eventos que se ejecutan sin control. Por esta razón este tipo de restricciones fuerzan el carácter determinístico, a los algoritmos deterministicos se les denomina purely functional.

Problemas con los algoritmos determinísticos

Para algunos problemas es muy difícil implementar un algoritmo determinístico. Por ejemplo, existen eficientes y simples algoritmos probabilísticos que pueden determinar si un número entero es primo o no, pero tienen una pequeña posibilidad de equivocarse. Algunos de ellos son muy conocidos desde 1970 (véase, por ejemplo, el Test de primalidad de Fermat); solamente tras otros 30 años de investigación focalizada en investigar se ha encontrado un algoritmo determinístico similar, pero mucho más lento.

Otro ejemplo puede encontrarse en los problemas NP-completos. Dentro de esta categoría puede encontrarse la mayoría de los problemas prácticos; este tipo de problemas puede resolverse rápidamente empleando de forma masiva y paralela una máquina de Turing no determinística, pero no se ha encontrado aún un algoritmo eficiente para esta tarea, al menos ahora sólo encuentran soluciones aproximadas en casos especiales.

Otro problema sobre el planteamiento de algoritmos determinísticos es que a veces no es "deseable" que los resultados sean completamente predecibles. Por ejemplo, si se es un jugador de blackjack, un algoritmo puede mezclar una serie de Generador de números seudoaleatorios y, de esta forma, un apostador espabilado podría averiguar los números del generador y determinar las cartas sobre la mesa de juego permitiendo engañar durante todo el tiempo al croupier (esto ocurre actualmente). Problemas similares pueden encontrarse en criptografía, donde las claves privadas a menudo se crean mediante uno de estos generadores. Este tipo de problemas se evita mediante el empleo de un generador criptográfico seguro de números seudoaleatorios.

Véase también

Obtenido de "Algoritmo determin%C3%ADstico"

Wikimedia foundation. 2010.

Игры ⚽ Нужна курсовая?

Mira otros diccionarios:

  • Algoritmo no determinístico — Saltar a navegación, búsqueda En Ciencias de la computación, un algoritmo no determinístico es un algoritmo que con la misma entrada ofrece muchos posibles resultados. No se puede saber de antemano cuál será el resultado de la ejecución de un… …   Wikipedia Español

  • Algoritmo no determinista — En Ciencias de la computación, un algoritmo no determinístico es un algoritmo que con la misma entrada ofrece muchos posibles resultados. No se puede saber de antemano cuál será el resultado de la ejecución de un algoritmo no determinístico. Uso… …   Wikipedia Español

  • Algoritmo de Thompson — El algoritmo Thompson (también conocido como método de Thompson) creado por Ken Thompson y Dennis Ritchie, sirve para obtener autómatas finitos no determinístico con transiciones vacías (AFND ε) a partir de expresiones regulares (ER). Algoritmo… …   Wikipedia Español

  • Algoritmo Quine–McCluskey — El Algoritmo Quine–McCluskey es un método de simplificación de funciones booleanas desarrollado por Willard Van Orman Quine y Edward J. McCluskey. Es funcionalmente idéntico a la utilización del mapa de Karnaugh, pero su forma tabular lo hace más …   Wikipedia Español

  • Algoritmo de Earley — El algoritmo de Earley[1] es un algoritmo no determinístico de análisis sintáctico para las gramáticas libres de contexto descrito originalmente por Jay Earley. Se ordena, a los lados de los algoritmos CYK y GLR, entre los algoritmos que usan la… …   Wikipedia Español

  • Test de primalidad — El 39º número primo de Mersenne era el mayor conocido hasta la fecha de creación de este artículo. La cuestión de la determinación de si un número n …   Wikipedia Español

  • Número primo — Un número primo es un número natural mayor que 1, que tiene únicamente dos divisores distintos: él mismo y el 1. Se contraponen así a los números compuestos, que son aquellos que tienen algún divisor natural aparte de sí mismos y del 1. El número …   Wikipedia Español

  • Compuerta NOT — Se ha sugerido que este artículo o sección sea fusionado con Puerta NOT#Puerta NO (NOT) (discusión). Una vez que hayas realizado la fusión de artículos, pide la fusión de historiales aquí. INPUT OUTPUT A …   Wikipedia Español

  • ALOHAnet — (o simplemente ALOHA) fue un sistema de redes de ordenadores pionero desarrollado en la Universidad de Hawái. Fue desplegado por primera vez en 1970, y aunque la propia red ya no se usa, uno de los conceptos esenciales de esta red es la base para …   Wikipedia Español

  • Unidad de estado sólido — Este artículo o sección necesita referencias que aparezcan en una publicación acreditada, como revistas especializadas, monografías, prensa diaria o páginas de Internet fidedignas. Puedes añadirlas así o avisar …   Wikipedia Español

Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”