En las matemáticas, que computa, lingüística, y disciplinas relacionadas, un algoritmo es una lista definida de instrucciones bien definidas para terminar una tarea; eso dado un estado inicial, procederá con una serie bien definida de estados sucesivos, terminando eventual en un fin-estado. La transición a partir de un estado al siguiente no es necesario el determinista; algunos algoritmos, conocidos como algoritmos de probabilidad, aleatoriedad incorporada.

El concepto de un algoritmo originó como medio para los procedimientos de la grabación para solucionar problemas matemáticos tales como encontrar el divisor común de dos números o multiplicar dos números. Una formalización parcial del concepto comenzó con tentativas de solucionar el Entscheidungsproblem (el " problem" de la decisión;) ese David Hilbert presentó en 1928. Las formalizaciones subsecuentes fueron enmarcadas como tentativas de definir el " " eficaz del calculability ; (1943:274 de Kleene de los cf) o " method" eficaz; (1939:225 de Rosser de los cf); esas formalizaciones incluyeron las funciones recurrentes de Gödel-Herbrand-Kleene de 1930, 1934 y 1935, " de s del poste Emilio de la iglesia de Alonzo 'el cálculo de la lambda de s de 1936, '; Formulación I" máquinas de Turing de s de 1936, y de Turing Alan de las 'de 1936-7 y 1939.

Etimología

El al-Khwārizmī, el astrónomo persa y el matemático, escribieron un tratado en el árabe en 825 el ANUNCIO, en el cálculo con los números hindúes . (Véase la algoritmia ). Fue traducido al latino en el siglo XII como Algoritmi de numero Indorum, que el título fue pensado probablemente para significar el " por Algoritmus en los números del Indians", donde " Algoritmi" era la interpretación del traductor del nombre del autor en el caso de genitivo; pero la gente que entendía mal el título trató el Algoritmi como plural latino y éste llevó al " de la palabra; algorithm" (Algorismus latino del ) viniendo significar el " method" del cálculo;. El " intruso; th" es muy probablemente debido a un cognado falso con el " griego del significado αριθμος (arithmos del ); number". clear=all> del

Porqué los algoritmos son necesarios: una definición informal

Ninguna definición formal del generalmente aceptado del " algorithm" existe todavía. Podemos, sin embargo, derivar pistas a las ediciones implicadas y un significado informal de la palabra de la cita siguiente de Boolos y de Jeffrey (1974, 1999):

"Ningún ser humano puede escribir rápidamente bastante, o bastante tiempo, o bastante pequeño enumerar a todos los miembros de un sistema enumerably infinito poniendo sus nombres en escrito, uno tras otro, en alguna notación. Pero los seres humanos pueden hacer algo igualmente útil, en el caso de ciertos sistemas enumerably infinitos: Pueden dar a las instrucciones explícitas para determinar al nth miembro del sistema, para el N. Tales instrucciones deben ser dadas absolutamente explícitamente, en una forma en qué podrían ser seguidas por una máquina de computación, o por un ser humano del que es capaz de realizar solamente operaciones muy elementales en " de los símbolos ; (negrilla agregada, P.

El " de las palabras; enumerably infinite" " malo; contable usar los números enteros quizás que extienden al infinity". Así Boolos y Jeffrey están diciendo que un del algoritmo implica las instrucciones de para un proceso que " creates" hacer salir los números enteros de un " arbitrario del ; input" número entero o números enteros que, en teoría, se pueden elegir a partir de la 0 al infinito. Así puede ser que esperemos que un algoritmo sea una ecuación algebraica tal como y = m + n - " arbitrario dos; variables" de la entrada; m y n que producen un y de la salida. Como vemos en las caracterizaciones del algoritmo - el algoritmo de la palabra implica mucho más que esto, algo en la orden de (por nuestro ejemplo de la adición): instrucciones exactas del (en la lengua entendida por el " el computer") para un " rápido, eficiente, good" de proceso que especifica el " moves" del " el computer" (máquina o ser humano, equipado de la información y las capacidades interno-contenidas necesarias) para encontrar, descifrar, y después mascar el arbitrario m de los números enteros/de los símbolos de la entrada y el n, el de los símbolos + y = … y (confiablemente, correctamente, " effectively") producto, en un " reasonable" Tiempo, y del salida-número entero en un lugar especificado y en un formato especificado.

¡ El concepto del algoritmo del también se utiliza para definir la noción de la decidibilidad (lógica) . Esa noción es central para explicar cómo los sistemas formales entran en ser a partir de un pequeño sistema de los axiomas y de las reglas. En la lógica, el tiempo que un algoritmo requiere para terminar no puede ser medido, pues no se relaciona al parecer con nuestra dimensión física acostumbrada. De tales incertidumbres, eso caracteriza el trabajo en curso, vástagos la indisponibilidad de una definición del algoritmo del que se adapta al uso concreto (en un cierto sentido) y abstracto del término.

l para una presentación detallada de los varios puntos de vista alrededor de la definición del " algorithm" ver las caracterizaciones del algoritmo. Por ejemplos de los algoritmos simples de la adición especificados en la manera detallada descrita en las caracterizaciones del algoritmo, ver los ejemplos del algoritmo.

Formalización de algoritmos

Los algoritmos son esenciales para la información de proceso de las computadoras de la manera, porque un programa de computadora es esencialmente un algoritmo que dice a computadora qué específico camina para realizarse (en qué orden específica) para realizar una tarea especificada, tal como boletines de notas calculadores de los estudiantes de la impresión de los empleados' cheques o'. Así, un algoritmo se puede considerar para ser cualquier secuencia de operaciones que se puedan realizar por un sistema Turing-completo . Los autores que afirman esta tesis incluyen Savage (1987) y Gurevich (2000):

"… La discusión informal de Turing a favor de su tesis justifica una tesis más fuerte: cada algoritmo se puede simular por un machine" de Turing; (Gurevich 2000: 1)… según el salvaje, " un algoritmo es un proceso de cómputo definido por un Turing machine." (Gurevich 2000: 3)

Típicamente, cuando un algoritmo se asocia a la información de proceso, los datos se leen en una fuente o un dispositivo de entrada, se escriben a un fregadero o a un dispositivo de la salida, y/o se almacenan para la transformación posterior. Los datos almacenados se miran como parte del estado interno de la entidad que realiza el algoritmo. En la práctica, el estado se almacena en una estructura de datos, pero un algoritmo requiere los datos internos solamente para los sistemas de operación específicos llamados los tipos de datos abstractos

Para cualquier proceso de cómputo, el algoritmo debe riguroso ser definido: especificado en la manera se aplica en todas las circunstancias posibles que podrían presentarse. Es decir, cualquier paso condicional se debe tratar sistemáticamente de, para cada caso particular; los criterios para cada caso deben ser claros (y computables).

Porque un algoritmo es una lista exacta de pasos exactos, la orden del cómputo será casi siempre crítica al funcionamiento del algoritmo. Las instrucciones se asumen generalmente de ser enumerado explícitamente, y se describen como comenzar el " del top" y " que va; abajo al bottom", una idea que es descrita más formalmente por el flujo del control .

Hasta ahora, esta discusión de la formalización de un algoritmo ha asumido las premisas programado imprescindible. Éste es el concepto más común, e intenta describir una tarea en discreto, " mechanical" medios. Única a este concepto de algoritmos formalizados es la operación de la asignación, fijando el valor de una variable. Deriva de la intuición del " " de la memoria ; como cuadernillo de apuntes. Hay un ejemplo abajo de tal asignación.

Para algunos conceptos alternos de qué constituyen un algoritmo ver la programación funcional y la programación de lógica .

Terminación

Algunos escritores restringen la definición del algoritmo del a los procedimientos que acaban eventual. En tal categoría Kleene pone el " procedimiento de la decisión del o método de la decisión del o algoritmo del para el question" (1952:136 de Kleene). Otros, incluyendo Kleene, incluyen los procedimientos que podrían funcionar por siempre sin la detención; tal procedimiento se ha llamado un " method" de cómputo; (Knuth 1997: 5) o " procedimiento del cálculo del o " del algoritmo del ; (1952:137 de Kleene); sin embargo, Kleene observa que tal método debe exhibir eventual el " un cierto object" (1952:137 de Kleene).

Minsky hace la observación pertinente, en vista de la determinación de si un algoritmo terminará eventual (de un estado que comienza particular): " del ; Pero si la longitud del proceso no se sabe por adelantado, después “intentarlo” puede no ser decisivo, porque si se enciende el proceso por siempre - entonces estaremos nunca nunca seguros del answer" (1967:105 de Minsky)

Mientras que sucede, ningún otro método puede hacer para mejorar, al igual que fue demostrado por el Alan Turing con su resultado celebrado en el undecidability del problema el parar supuesto. No hay procedimiento algorítmico para determinar de algoritmos arbitrarios independientemente de si terminan de estados que comienzan dados. El análisis de los algoritmos para su probabilidad de la terminación se llama el análisis de la terminación.

En el caso de no-parar el éxito del método del cómputo (procedimiento del cálculo) se puede definir no más en términos de que para con una salida significativa. En lugar, los términos del éxito que permiten ilimitado hacer salir secuencias deben ser definidos. Por ejemplo, un algoritmo que verifica si hay más ceros que unos en una secuencia binaria al azar infinita debe funcionar por siempre para ser eficaz. Si se ejecuta correctamente, sin embargo, la salida del algoritmo será útil: para mientras examine la secuencia, el algoritmo dará una respuesta positiva mientras que el número de ceros examinados excede en número los, y una respuesta negativa de otra manera. El éxito para este algoritmo se podría entonces definir como eventual haciendo salir solamente respuestas positivas si hay realmente más ceros que unos en la secuencia, y en cualquier otro caso que hacía salir cualquier mezcla de respuestas positivas y negativas.

Ver los ejemplos del " (del im-); proper" substracción en la función parcial para más sobre qué puede suceder cuando un algoritmo falla para seguro de sus números de la entrada - e., (i) no-terminación, (ii) producción de " junk" (salida en el formato incorrecto que se considerará un número) o ningunos números en absoluto (el alto termina el cómputo sin salida), (iii) números incorrectos, o (iv) una combinación de éstos. Kleene propuso que la producción de " junk" o la falta de producir un número es solucionada teniendo el algoritmo detecta estos casos y produce e., un mensaje de error (él sugirió el " 0"), o preferiblemente, forzar el algoritmo en un lazo sin fin (1952:322 de Kleene). Davis hace esto a su algoritmo de la substracción - él fija su algoritmo en un segundo ejemplo de modo que sea substracción apropiada (1958:12 de Davis - 15). Junto con el " lógico de los resultados; true" y " false" Kleene también propone el uso de un tercer " del símbolo lógico; u" - indeciso (1952:326 de Kleene) - así un algoritmo producirá siempre el algo cuando está enfrentado con un " proposition". El problema de respuestas incorrectas se debe solucionar con un " independiente; proof" del algoritmo e., usar la inducción: " del ; Requerimos normalmente la evidencia auxiliar para esto (que el algoritmo defina correctamente una función recurrente de MU), e., bajo la forma de prueba inductiva que, para cada valor de la discusión, el cómputo termine con un value" único; (1967:186 de Minsky)

Expresión de algoritmos

Los algoritmos se pueden expresar en muchas clases de notación, incluyendo el Pseudocode de las idiomas naturales, los organigramas y las expresiones de lenguaje natural de programación de los lenguajes de algoritmos tienden a ser prolijos y ambiguos, y se utilizan raramente para los algoritmos complejos o técnicos. El Pseudocode y los organigramas son maneras estructuradas de expresar los algoritmos que evitan muchas de las ambigüedades comunes en declaraciones de lenguaje natural, mientras que independiente restante de una lengua de puesta en práctica particular. Los lenguajes de programación se piensan sobre todo para expresar algoritmos en una forma que se pueda ejecutar por una computadora, pero son de uso frecuente como manera de definir o de documentar algoritmos.

Hay una gran variedad de representaciones posibles y una puede expresar un programa dado de la máquina de Turing como secuencia de tablas de máquina (véase más en el autómata finito y la tabla de transición de estado ), como organigramas (véase más en el diagrama de estado ), o como una forma del código automático rudimentario o del código de la asamblea llamó el " sistemas de quadruples" (véase más en la máquina de Turing).

Es a veces provechoso en la descripción de un algoritmo complementar el pequeño " charts" del flujo; (diagramas de estado) con de lenguaje natural y/o las expresiones aritméticas escrita el " interior; Quot de bloque diagrama ; para resumir qué el " charts" del flujo; están logrando.

Las representaciones de algoritmos se clasifican generalmente en tres niveles aceptados de descripción de la máquina de Turing (2006:157 de Sipser):
Descripción de alto nivel 1: del
" de ; … prosa para describir un algoritmo, no haciendo caso de los detalles de puesta en práctica. A este nivel no necesitamos mencionar cómo la máquina maneja su cinta o head"

  • Descripción de la puesta en práctica del 2: del
    " de
; … la prosa usada para definir la manera la máquina de Turing utiliza su cabeza y la manera que almacena datos en su cinta. A este nivel no damos los detalles de estados o del function" de la transición;
  • Descripción formal 3: del
la mayoría del detallado, " el level" más bajo;, da el " de la máquina de Turing; table" del estado;.

l por un ejemplo del " simple del algoritmo; Agregar m+n" descrito en los tres niveles ver los ejemplos del algoritmo.

Puesta en práctica

La mayoría de los algoritmos se piensan para ser ejecutados como programas de computadora . Sin embargo, los algoritmos también son ejecutados por otros medios, tales como adentro una red de los nervios biológico (por ejemplo, el cerebro humano que ejecuta el aritmético o un insecto que busca el alimento), en un circuito eléctrico, o en un dispositivo mecánico.

Ejemplo

Uno de los algoritmos más simples es encontrar el número más grande de una lista (sin clasificar) de números. La solución requiere necesario la mirada de cada número en la lista, pero solamente una vez cada uno. De esto sigue un algoritmo simple, que se puede indicar en una prosa inglesa de alto nivel de la descripción, como:

Descripción de alto nivel del : de Asumir que el primer artículo es el más grande.

  • Mirar cada uno de los artículos restantes en la lista y si es más grande que el artículo más grande hasta ahora, anotar él.
  • El artículo conocido pasado es el más grande de la lista cuando el proceso es completo.

    Descripción formal (Quasi-) del : Escrito en prosa pero mucho más cercano al idioma de alto nivel de un programa de computadora, lo que sigue es la codificación más formal del algoritmo en el Pseudocode o el código del Pidgin:

    Entrada: Una lista no vacía del L de los números. Salida: El número más grande del del L de la lista. el más grande L 0 del ← del el para cada del artículo del de en el L≥1, de la lista hace si el artículo del > el más grande, entonces el ← más grande del el artículo del de vuelta el más grande del

    Para un ejemplo más complejo de un algoritmo, ver el algoritmo de Euclid para el divisor común más grande, uno de los algoritmos más tempranos sabidos.

    Análisis del algoritmo

    Pues sucede, es importante saber cuánto de un recurso particular (tal como tiempo o almacenaje) se requiere para un algoritmo dado. Los métodos se han desarrollado para el análisis de los algoritmos para obtener tales respuestas cuantitativas; por ejemplo, el algoritmo antedicho tiene un requisito del tiempo de O ( n ), usar la notación grande O con el n como la longitud de la lista. Siempre las necesidades del algoritmo solamente de recordar dos valores: el número más grande encontró hasta ahora, y su cargo actual en la lista de la entrada. Por lo tanto se dice para tener un requisito de espacio del O (1) . (Nota que el tamaño de las entradas no está contado como espacio usado por el algoritmo.)

    Diversos algoritmos pueden terminar la misma tarea con un diverso sistema de instrucciones adentro menos o más tiempo, espacio, o esfuerzo que otros. Por ejemplo, dado dos diversas recetas para hacer la ensalada de patata, una puede hacer que el pele la patata antes de la ebullición del la patata mientras que la otra presenta los pasos en la orden reversa, con todo ambos piden estos pasos que se repetirán para todas las patatas y extremo cuando la ensalada de patata está lista para ser comido. ¡

    El análisis y el estudio de los algoritmos es una disciplina de informática, y se practica a menudo abstracto sin el uso de un lenguaje de programación específico o de la puesta en práctica. En este sentido, el análisis del algoritmo se asemeja a otras disciplinas matemáticas en que se centra en las características subyacentes del algoritmo y no en los específicos de cualquier puesta en práctica particular. El pseudocode se utiliza generalmente para el análisis pues es la representación más simple y más general.

    Clases

    Hay varias maneras de clasificar los algoritmos, cada uno con sus propios méritos.

    Clasificación por la puesta en práctica

    Una forma para clasificar algoritmos está por medios de la puesta en práctica.
    repetición del

    o iteración : Un algoritmo recurrente es uno que invoca (hace la referencia a) sí mismo en varias ocasiones hasta que cierta condición empareje, que es un método común a la programación funcional . Los algoritmos iterativos utilizan construcciones repetidores como los lazos y las estructuras de datos a veces adicionales como apilan para solucionar los problemas dados. Algunos problemas se adaptan naturalmente para una puesta en práctica o la otra. Por ejemplo, las torres de Hanoi se entienden bien en la puesta en práctica recurrente. Cada versión recurrente tiene (pero posiblemente más o menos complejo) una versión iterativa equivalente, y viceversa.


  • lógico del

    : Un algoritmo se puede ver como deducción lógica controlado. Esta noción se puede expresar como: algoritmo = lógica + control de

    .
    el componente de la lógica expresa los axiomas que se pueden utilizar en el cómputo y el componente del control determina la manera de la cual la deducción se aplica a los axiomas. Ésta es la base para el paradigma de la programación de lógica . En lenguajes el de programación de lógica puros el componente del control es fijo y los algoritmos son especificados suministrando solamente el componente de la lógica. La súplica de este acercamiento es la semántica elegante : un cambio en los axiomas tiene un cambio bien definido en el algoritmo.
    el serial del

    o el paralelo o el distribuyeron : Los algoritmos se discuten generalmente con la asunción que las computadoras ejecutan una instrucción de un algoritmo a la vez. Esas computadoras a veces se llaman las computadoras seriales. Un algoritmo diseñó para tal ambiente se llama un algoritmo serial, en comparación con los algoritmos paralelos o los algoritmos distribuidos . Los algoritmos paralelos se aprovechan de las arquitecturas de computadora donde varios procesadores pueden trabajar en un problema al mismo tiempo, mientras que los algoritmos distribuidos utilizan las máquinas múltiples conectadas con una red . El paralelo o los algoritmos distribuidos divide el problema en subproblemas más simétricos o más asimétricos y recoge los resultados detrás juntos. La consumición del recurso en tales algoritmos es no sólo ciclos del procesador en cada procesador pero también la comunicación de arriba entre los procesadores. Los algoritmos de clasificación se pueden hacer parelelismo eficientemente, pero sus gastos indirectos de la comunicación son costosos. Los algoritmos iterativos son generalmente paralelizables. Algunos problemas no tienen ningún algoritmo paralelo, y se llaman los problemas intrínsecamente seriales.
    determinista del

    o no determinista: Los algoritmos deterministas solucionan el problema con la decisión exacta en cada paso del algoritmo mientras que el algoritmo no determinista soluciona problemas vía conjeturar aunque las conjeturas típicas se hagan más exactas con el uso de la heurística .
    exacto del

    o aproximado: Mientras que muchos algoritmos alcanzan una solución exacta, búsqueda de los algoritmos de la aproximación una aproximación que está cercana a la solución verdadera. La aproximación puede utilizar una estrategia determinista o al azar. Tales algoritmos tienen valor práctico para muchos problemas duros.

    Clasificación por paradigma del diseño

    Otra manera de clasificar algoritmos está por su metodología de diseño o paradigma. Hay algunos paradigmas, cada uno diferente del otro. Además, cada uno de estas categorías incluirá muchos diversos tipos de algoritmos. Algunos encontraron comúnmente paradigmas para incluir:
    la divisoria del del

    y conquista . Una divisoria y conquista el algoritmo reduce en varias ocasiones un caso de un problema a uno o más casos más pequeños del mismo problema (generalmente recurrentemente ), hasta que los casos sean bastante pequeños solucionar fácilmente. Un tal ejemplo de la divisoria y conquista es la clasificación de fusión . La clasificación se puede hacer en cada segmento de datos después de dividir datos en segmentos y la clasificación de datos enteros se puede obtener adentro conquista fase combinándolos. Una variante más simple de la divisoria y conquista se llama disminución del y conquista el algoritmo, ésa soluciona un subproblema idéntico y utiliza la solución de este subproblema para solucionar el problema más grande. Dividir y conquistar las divisorias el problema en subproblemas múltiples y así que conquistar la etapa será más complejo que y conquistan algoritmos. Un ejemplo de la disminución y conquista algoritmo es el algoritmo de búsqueda binaria .
    programación dinámica del . Cuando un problema demuestra a la subestructura óptima, significar la solución óptima a un problema se puede construir de soluciones óptimas a los subproblemas, y los subproblemas traslapados, significando los mismos subproblemas se utilizan para solucionar muchos diversos casos del problema, un acercamiento más rápido llamado que la programación dinámica evita recomputing las soluciones que se han computado ya. Por ejemplo, el Shortest-Path a una meta de una cima en un gráfico cargado puede ser encontrado usando el Shortest-Path a la meta de todas las cimas adyacentes. La programación dinámica y el Memoization van juntos. La diferencia principal entre la programación dinámica y la divisoria y conquista es que los subproblemas están más o menos independiente en divisoria y conquistan, mientras que los subproblemas se traslapan en la programación dinámica. La diferencia entre la programación dinámica y la repetición directa está en la puesta en antememoria o el memoization de llamadas recurrentes. Cuando los subproblemas son independientes y no hay repetición, el memoization no ayuda; por lo tanto la programación dinámica no es una solución para todos los problemas complejos. Usando el memoization o manteniendo una tabla de subproblemas solucionados ya, la programación dinámica reduce la naturaleza exponencial de muchos problemas a la complejidad polinómica.
    el método codicioso . Un algoritmo codicioso es similar a un algoritmo de la programación dinámica, pero la diferencia es que las soluciones a los subproblemas no tienen que ser sabidas en cada etapa; en lugar un " greedy" la decisión puede ser tomada de qué parece la mejor por el momento. El método codicioso extiende la solución con la decisión mejor (no todas las decisiones factibles) en una etapa algorítmica basada en el grado óptimo local actual y la mejor decisión (no todas las decisiones posibles) tomada en etapa anterior. No es exhaustivo, y no da respuesta exacta a muchos problemas. Pero cuando trabaja, será el método más rápido. El algoritmo codicioso más popular está encontrando atravesar mínimo - árbol según lo dado por el Kruskal .
    Programación linear . Al solucionar un problema usar la programación linear, las desigualdades específicas que implican las entradas se encuentran y entonces una tentativa se hace de maximizar (o reducir al mínimo) una cierta función linear de las entradas. Muchos problemas (tales como el flujo máximo para el dirigido representa gráficamente) se pueden indicar de una manera de la programación linear, y después sean solucionados por un algoritmo “genérico” tal como el algoritmo a una cara . Una variante más compleja de la programación linear se llama programación de número entero, donde el espacio de solución se restringe a los números enteros .
    reducción del . Esta técnica implica el solucionar de un problema difícil transformándolo en un problema más conocido para el cual tengamos (esperanzadamente) algoritmos óptimos asintótico . La meta es encontrar un algoritmo de reducción cuya complejidad no sea dominado por el algoritmo reducido resultante. Por ejemplo, un algoritmo de la selección para encontrar el punto medio en una lista sin clasificar implica primero el clasificar de la lista (la porción costosa) y en seguida el sacar del elemento medio en la lista clasificada (la porción barata). Esta técnica también se sabe mientras que el transforma y conquista .
    Búsqueda y enumeración . Muchos problemas (tales como jugar al ajedrez ) pueden ser modelados mientras que los problemas en representan gráficamente. Un algoritmo de la exploración del gráfico especifica las reglas para mover alrededor un gráfico y es útil para tales problemas. Esta categoría también incluye la rama de los algoritmos de búsqueda y la enumeración de y la vuelta hacia atrás encuadernadas .
    el paradigma de probabilidad y heurístico . Los algoritmos que pertenecían a esta clase cupieron la definición de un algoritmo más libremente. los algoritmos de probabilidad de son los que toman algunas decisiones aleatoriamente (o pseudo-al azar); para algunos problemas, puede de hecho ser probado que las soluciones más rápidas deben implicar una cierta aleatoriedad .

  • Tentativa genética de los algoritmos de encontrar soluciones a los problemas mímico procesos evolutivos biológico, con un ciclo de las mutaciones al azar que rinden las generaciones sucesivas de " solutions". Así, emulan a la reproducción y al " supervivencia del fittest". En el programado genético, este acercamiento es ampliado a los algoritmos, mirando el algoritmo sí mismo como " solution" a un problema.
  • Algoritmos heurísticos, cuyos fines generales no son encontrar una solución óptima, solamente una solución aproximada donde está limitados el tiempo o los recursos. No son prácticos encontrar soluciones perfectas. Un ejemplo de esto sería la búsqueda local, la búsqueda Tabu, o los algoritmos de recocido simulados, una clase de algoritmos de probabilidad heurísticos que varían la solución de un problema por una cantidad al azar. El " conocido; " de recocido simulado ; refiere al término metalúrgico significar la calefacción y el enfriamiento del metal para alcanzar la libertad de defectos. El propósito de la variación al azar es encontrar cerca de soluciones global óptimas algo que simplemente localmente las óptimas, la idea que es que el elemento al azar será disminuido como el algoritmo colocan abajo a una solución.

    Clasificación por el campo del estudio

    considera también: Lista de

    los algoritmos Cada campo de la ciencia tiene sus propios problemas y necesita algoritmos eficientes. Los problemas relacionados en un campo se estudian a menudo juntos. Algunas clases del ejemplo son los algoritmos numéricos de los algoritmos de la fusión de los algoritmos de clasificación de los algoritmos de búsqueda, los algoritmos de gráfico, los algoritmos de la secuencia, los algoritmos geométricos de cómputo, los algoritmos combinatorios, el aprendizaje de máquina, la criptografía, los algoritmos y las técnicas de la compresión de datos del análisis.

    Los campos tienden a traslaparse con uno a, y los avances del algoritmo en un campo pueden mejorar los de otro, a veces totalmente sin relación, campos. Por ejemplo, la programación dinámica fue inventada original para la optimización de la consumición del recurso en industria, pero ahora se utiliza en solucionar una gama amplia de problemas en muchos campos.

    Clasificación por complejidad

    Clase de la complejidad Los algoritmos se pueden clasificar por la cantidad de tiempo que necesitan terminar comparado a su tamaño de la entrada. Hay una gran variedad: algunos algoritmos terminan en tamaño en relación con de la entrada del tiempo linear, algunos hacen así que en una cantidad de tiempo exponencial o aún peor, y algunos nunca paran. Además, algunos problemas pueden tener algoritmos múltiples de la complejidad de diferenciación, mientras que otros problemas no pudieron tener ningún algoritmo o ningún algoritmo eficiente sabido. Hay también mappings de algunos problemas a otros problemas. Debido a esto, fue encontrado para ser más conveniente clasificar los problemas ellos mismos en vez de los algoritmos en las clases de equivalencia basadas en la complejidad de los algoritmos mejor para ellos.

    Cuestiones legales el del de

    considera también: El software patenta para una descripción general de la patentabilidad del software, incluyendo algoritmos computadora-ejecutados.

    Los algoritmos, solo, no son generalmente patentables. En el Estados Unidos, una demanda que consiste solamente en manipulaciones simples de conceptos abstractos, números, o señales no constituir el " processes" (USPTO 2006) y por lo tanto los algoritmos no son patentables (como en el Gottschalk v. Sin embargo, los usos prácticos de algoritmos son a veces patentables. Por ejemplo, en el diamante v. Diehr, el uso de un algoritmo simple de la regeneración a ayudar en el curado del caucho sintético era juzgado patentable. El patentar del software es alto polémico, y hay alto patentes criticadas que implican los algoritmos, especialmente algoritmos de la compresión de datos, tales como patente LZW de Unisys '.

    Además, algunos algoritmos criptográficos tienen limitaciones de exportación (véase la exportación de la criptografía ).

    Historia: Desarrollo de la noción del " algorithm"

    Origen de la palabra

    considera también: Cronología los algoritmos El algoritmo del de la palabra viene del nombre del al-Khwarizmi persa de Musa del ibn de Abu Abdullah Mohamed del matemático del siglo IX cuyos trabajos introdujeron números indios y conceptos algebraicos. Él trabajó en el Bagdad cuando era el centro de estudios y del comercio científicos. La algoritmia de la palabra se refirió solamente a las reglas de realizar el aritmético usar los números árabes pero se desarrolló original vía la traducción latina europea de nombre del al-Khwarizmi's en el algoritmo del por el siglo XVIII. La palabra se desarrolló para incluir todos los procedimientos definidos para solucionar problemas o realizar tareas.

    Símbolos discretos y distinguibles

    Marcar-marcas : Para no perder de vista a sus multitudes, sus sacos de grano y su dinero los ancients utilizaron la correspondencia: la acumulación de piedras o de marcas rasguñó en los palillos, o la fabricación de símbolos discretos en arcilla. Con el uso babilónico y egipcio de marcas y de símbolos, eventual los números romanos y el ábaco se desarrollaron.16-41) las marcas de la cuenta aparecen prominente en la aritmética singular del sistema de numeración usada en la máquina de Turing y cómputos de la máquina del Poste-Turing.

    Manipulación de símbolos como " poner el holders" para los números: álgebra

    El trabajo de los geómetras del griego clásico, al-Khwarizmi persa del matemático (considerado a menudo como el " padre del " de la álgebra ;), y matemáticos de Europa occidental culminados en noción de s de Leibniz 'del ratiocinator (Ca 1680) del cálculo: " del ; Un buen siglo y una mitad en anticipación de su tiempo, Leibniz propuso una álgebra de la lógica, de una álgebra que especificaría las reglas para manipular conceptos lógicos en la manera que la álgebra ordinaria especifica las reglas para el numbers" de manipulación; (2000:18 de Davis).

    Invenciones mecánicas con los estados discretos

    el reloj : La sierra acredita la invención del reloj peso-conducido como “la invención dominante Europa en el Ages" medio;, particularmente la fuga (1984:24 del borde de la sierra) que provee de nosotros la señal y el tock de un reloj mecánico. “La máquina automática exacta” (1984:26 de la sierra) llevó inmediatamente al " " mecánico de los autómatas ; el comenzar en el siglo XIII y finalmente “machines" de cómputo; - el motor de diferencia y motores analíticos de Ada Lovelace (sierra p.204-206) Charles Babbage y de la condesa.

    Telar de telar jacquar del, tarjetas de sacador de Hollerith, telegrafía y telefonía - el relais electromecánico : Bell y Newell (1971) indican que el telar de telar jacquar (1801), el precursor a las tarjetas de Hollerith (tarjetas de sacador, 1887), y “las tecnologías de la conmutación del teléfono” eran las raíces de un árbol que llevaba al desarrollo de las primeras computadoras (Bell y Newell diagram P. 39, cf Davis (2000)). Por el mid-1800s el telégrafo, el precursor del teléfono, era funcionando en el mundo entero, su codificación discreta y distinguible de letras como “puntos y rociadas” un sonido común. Por los a fines del 1800 la cinta de teletipo (1870s del Ca) era funcionando, al igual que el uso de las tarjetas de Hollerith en el censo de los 1890 E. Entonces vino el teletipo (Ca 1910) con su uso del perforar-papel del código de Baudot en la cinta.

    las redes de la Teléfono-conmutación de los relais electromecánicos (inventado 1835) estaban detrás del trabajo George Stibitz (1937), el inventor del dispositivo de adición digital. Mientras que él trabajó en los laboratorios de Bell, él observó uso “pesado el' de calculadoras mecánicas con los engranajes. " Él fue a casa una tarde en 1937 que se preponía probar su idea…. Cuando el ocuparse vanamente había terminado, Stibitz había construido un device" de adición binario; (Noticias del valle, P.

    Davis (2000) observa la importancia particular del relais electromecánico (con su " dos; states" binario; abierto y cerrado): estaba solamente con el desarrollo, comenzando en los años 30, de calculadoras electromecánicas usar los relais eléctricos, que las máquinas fueron construidas teniendo el alcance Babbage tenían envisioned. 148)

    Matemáticas durante los 1800s hasta el mid-1900s

    Símbolos y reglas : En la sucesión rápida las matemáticas George Boole (1847, 1854), Gottlob Frege (1879), y José Peano (1888-1889) redujeron aritmética a una secuencia de símbolos manipulados por reglas. El de Peano los principios de aritmética, presentados por un nuevo método (1888) era " la primera tentativa en una axiomatización de las matemáticas en un language" simbólico; (van Heijenoort: 81ff).

    Pero Heijenoort da a Frege (1879) estas alabanzas: Frege es " quizás el más importantes escogen el trabajo escrito nunca en lógica. … en cuál vemos un " la “lengua de la fórmula”, eso es un characterica, una lengua escrita con símbolos especiales, " de la lengua del ; para el thought" puro;, es decir, libre de adornos retóricos… construyó de los símbolos específicos que se manipulan según rules" definido; (van Heijenoort: 1). El trabajo de Frege fue simplificado y amplificado más a fondo por el Alfred Whitehead del norte y el Bertrand Russell en su Principia Mathematica (1910-1913).

    las paradojas : Al mismo tiempo un número de paradojas que disturbaban aparecieron en la literatura, particularmente la paradoja (1897) de Burali-Forti, la paradoja (1902-03) de Russell, y la paradoja (1905, Dixon 1906) de Richard, (el 1952:36 de Kleene de los cf - 40). Las consideraciones resultantes llevadas papel de s de Gödel Kurt a el' (1931) - él cita específicamente la paradoja del mentiroso - que reduce totalmente reglas de la repetición a los números.

    Calculability eficaz : En un esfuerzo para solucionar el Entscheidungsproblem definido exacto por Hilbert en 1928, los matemáticos primero fijaron alrededor para definir qué fue significada por un " method" eficaz; o " calculation" eficaz; o " calculability" eficaz; (es decir, un cálculo que tendría éxito). En la sucesión rápida el siguiente aparecido: Iglesia de Alonzo, Stephen Kleene y λ-cálculo (nota al pie de la página de s de Rosser J. 'de los cf en la iglesia 1936a de Alonzo: 90, 1936b: 110), una definición fino-afilada con piedra del " recursion" general; del trabajo de Gödel que actúa en sugerencias Jacques Herbrand (conferencias de Princeton de Gödel de los cf de 1934) y simplificaciones subsecuentes de Kleene (1935-6: 237ff, 1943:255 FF), prueba de la iglesia (1936:88 FF de la iglesia) que el Entscheidungsproblem era insoluble, definición de s del poste Emilio 'del calculability eficaz como trabajador despreocupado después de una lista de instrucciones de mover izquierdo o derecho con una secuencia de cuartos y mientras que allí o marca o borran un papel u observan el papel y toman una decisión sí-no sobre la instrucción siguiente (cf su " Formulación I" 1936:289 - 290), prueba de s de Turing Alan 'de eso el Entscheidungsproblem eran insolubles por medio de su " un machine" (Turing 1936-7: 116ff) -- en efecto casi idéntico al " del poste; formulation", definición de s de Rosser Barkley J. 'del " method" eficaz; en términos de " un machine" (1939:226 de Rosser), oferta de s de Kleene C. 'de un precursor al " " de la tesis de la iglesia; que él llamó el " Tesis I" (1943:273 de Kleene - 274)), y algunos años más tarde Kleene que retitula su " de la tesis; Thesis" de la iglesia; (1952:300 de Kleene, 317) y proponiendo el " Thesis" de Turing; (1952:376 de Kleene).

    Emilio Post (1936) y Alan Turing (1936-7, 1939)

    Aquí está una coincidencia notable de dos hombres que no se conocen sino que describen un proceso de las hombre-como-computadoras que trabajan en cómputos - y rinden definiciones virtualmente idénticas.

    El poste (1936) de Emilio describió las acciones de un " computer" (ser humano) como sigue: " del ; … dos conceptos están implicados: el de un espacio del símbolo del en el cual el trabajo que lleva de problema para contestar debe ser realizado, y un sistema inalterable fijo del de las direcciones .

    Su espacio del símbolo sería " del ; una secuencia infinita de dos vías de espacios o de cajas… El disolvente o el trabajador de problema debe moverse y trabajar en este espacio del símbolo, siendo capaz de estar adentro, y del funcionamiento en pero una caja a la vez…. una caja es admitir de solamente dos condiciones posibles, es decir, siendo vacío o no marcado, y teniendo una sola marca en ella, decir un movimiento vertical.

    "Una caja debe ser seleccionada y llamó el punto de partida. … un problema específico debe ser dado en forma simbólica por un número finito de marcado ENTRADO las cajas con un movimiento. Asimismo la SALIDA de la respuesta debe ser dada en forma simbólica por tal configuración de cajas marcadas….

    "Un sistema de direcciones aplicables a un problema general fijó un proceso determinista cuando estaba aplicado a cada problema específico. Este proceso terminará solamente cuando viene a la dirección del tipo (c) STOP. 289-290) ver más en la máquina del Poste-Turing

    trabajo de s de Turing Alan el' (1936-1937, 1939:160) precedió el de Stibitz (1937); es desconocido si Stibitz sabía del trabajo de Turing. El biógrafo de Turing creyó que el uso de Turing de un modelo typewriter-like derivó de un interés joven: “Alan había soñado con la invención de las máquinas de escribir como muchacho; Señora Turing tenía una máquina de escribir; y él habría podido comenzar bien por a preguntarse qué fue querida decir con llamar quot del mechanical'& de una máquina de escribir '; (Hodges, P. 96) dado el predominio del código Morse y de la telegrafía, las máquinas de cinta de teletipo, y Teletypes puede ser que conjeturemos que todas eran influencias.

    Turing - su modelo del cómputo ahora se llama una máquina de Turing - comienza, al igual que fijar, con un análisis de una computadora humana que él corte abajo a un sistema simple de movimientos y de " básicos; estados del mind". Pero él continúa un paso más lejos y crea una máquina como modelo del cómputo de los números (Turing 1936-7: 116):

    "La computación es hecha normalmente escribiendo ciertos símbolos en el papel. Podemos suponer que este papel está dividido en cuadrados como el libro aritmético de un niño….Asumo entonces que el cómputo está realizado en el documento unidimensional, es decir, sobre una cinta dividida en cuadrados. También supondré que el número de símbolos que puedan ser impresos es finito….

    "El comportamiento de la computadora en todo momento es determinado por los símbolos que él está observando, y su " estado del mind" en ese momento. Podemos suponer que hay un B encuadernado al número de símbolos o de cuadrados que la computadora pueda observar en un momento. Si él desea observar más, él debe utilizar observaciones sucesivas. También supondremos que el número de estado de ánimo que necesiten ser considerados es… finito

    "Imaginémosnos que las operaciones se realizaron por la computadora que se dividirá en las “operaciones simples” que son tan elementales que no es fácil imaginarse las más lejos divided" (Turing 1936-7: 136).

    La reducción de Turing rinde el siguiente:

    "Las operaciones simples deben por lo tanto incluir: " del ; (a) Cambia del símbolo en uno del " observado del
    de los cuadrados; (b) Cambios de uno de los cuadrados observados a otro cuadrado dentro de L cuadrados de uno de los cuadrados previamente observados. " Puede ser que algunos de estos cambio invoquen necesario un cambio del estado de ánimo. La sola operación más general se debe por lo tanto tomar para ser una del siguiente:


    "(a) Un cambio posible (a) del símbolo junto con un cambio posible del estado de ánimo. " del
    ; (b) Un cambio posible (b) de cuadrados observados, junto con un cambio del estado posible del mind"

    "Podemos ahora construir una máquina para hacer el trabajo de este computer." ((Turing 1936-7: 136).

    Algunos años más adelante, Turing amplió su análisis (tesis, definición) con esta expresión poderosa de él: " del ; Una función reputa el " calculable" del effectivey; si sus valores se pueden encontrar por un cierto proceso puramente mecánico. Aunque sea bastante fácil conseguir un asimiento intuitivo de esta idea, es deseable neverthessless tener más definición expresable definida, matemática… discute la historia de la definición bonita mucho según lo presentado arriba con respecto a Gödel, a Herbrand, a Kleene, iglesia, a Turing y al poste…. Podemos tomar esta declaración literalmente, entendiendo por un proceso puramente mecánico uno que se podría realizar por una máquina. Es posible dar una descripción matemática, en cierta forma normal, de las estructuras de estas máquinas. El desarrollo de estas ideas lleva a la definición del autor de una función computable, y a una identificación del † del computability con calculability eficaz…. " del ; † Utilizaremos el " de la expresión; function" computable; para significar una función calculable por una máquina, y nosotros dejó el " con eficacia calculabile" referir a la idea intuitiva sin la identificación particular con de estos definitions." (1939:160 de Turing). Kleene (1943)

    el J. Barkley Rosser definió audazmente un método eficaz del `' de la manera siguiente (negrilla agregada): " del ; El “método eficaz” se utiliza aquí en el sentido algo especial de un método cada paso cuyo es exacto resuelto y que produce seguramente la respuesta en un número finito de pasos. Con este significado especial, tres diversas definiciones exactas se han dado hasta la fecha. nota al pie de la página #5; ver la discusión inmediatamente abajo. El más simple de éstos indicar (debido fijar y Turing) dice esencialmente que existe el un método eficaz de solucionar ciertos sistemas de problemas si uno puede construir una máquina que entonces solucione cualquier problema del sistema sin la intervención humana más allá de insertar la pregunta y (más adelante) de leer la respuesta . Las tres definiciones son equivalentes, así que no importa se utiliza cuál. Por otra parte, el hecho de que los tres sean equivalentes es una discusión muy fuerte para la corrección de cualquier one." (1939:225 de Rosser - 6)

    La nota al pie de la página #5 de Rosser se refiere al trabajo (1) de la iglesia y de Kleene y a su definición del λ-definability, particularmente uso de la iglesia de ella en su un problema insoluble de la teoría de número elemental (1936); (2) Herbrand y Gödel y su uso del uso de Gödel de la repetición particularmente en su de papel famoso en formalmente los asuntos de Undecidable de Principia Mathematica y sistemas relacionados I (1931); y (3) Post (1936) y Turing (1936-7) en sus mecanismo-modelos del cómputo. Kleene definido como su " ahora-famoso; Tesis I" conocido como " el " de la tesis de la Iglesia-Turing;. Pero él hizo esto en el contexto siguiente (negrilla en original): " del ; 12. Las teorías algorítmicas … en la determinación de una teoría algorítmica completa, qué lo hacemos son describir un procedimiento, ejecutable para cada sistema de los valores de las variables independientes, que el procedimiento termina necesario y de tal manera que en el resultado poder leer una respuesta definida, " yes" o " no, " a la pregunta, " ¿es el valor del predicado verdad? ” " (1943:273 de Kleene)

    Historia después de 1950

    Un número de esfuerzos se han dirigido hacia el refinamiento adicional de la definición del " algorithm", y la actividad está en curso debido a las ediciones que rodean, particularmente, fundaciones de las matemáticas (especialmente la tesis de la Iglesia-Turing) y la filosofía de la mente (especialmente discusiones alrededor de la inteligencia artificial ). Para más, ver las caracterizaciones del algoritmo.

    Ver también

    style=" del
    Máquina abstracta
    Caracterizaciones del algoritmo
    Ejemplos del algoritmo
    Música algorítmica
    comercial algorítmico
    Teoría de Computability (de informática)
    Teoría de complejidad de cómputo
    Estructura de datos
    Heurística
    Publicaciones algoritmo-relacionadas importantes
    Lista de los algoritmos
    Lista de los asuntos generales del algoritmo
    Lista de términos referentes a las estructuras de los algoritmos y de datos
    Función parcial - una función parcial (algoritmo) o (i) para sin un número de la salida, o (ii) no para. Los algoritmos del tipo (i) se pueden enviar siempre en un lazo no-que para (Kleene (1952) P. Ver más en:
  • * l problema que para Análisis Run-time
    Teoría del cómputo
    Introducción a los algoritmos, libro

    .

  • Zenithic
  • Cumbe
    Random links:Organización de la Aviación Civil Internacional | Música de Carnatic | Mickey galés | Centro de la familia | Sumday

  • © 2007-2008 enciclopediaespana.com; article text available under the terms of GFDL, from en.wikipedia.org
    ="http://pagead2.googlesyndication.com/pagead/show_ads.js">