¿Qué es un algoritmo?

12

¿Qué es exactamente un algoritmo, como en qué significa Algoritmo? Lo poco que entiendo es que no es específico de un lenguaje en particular o patrón de diseño, sino que es uno de los principios más básicos (así que supongo que esta pregunta me hace ver estúpido).

Una de las "opciones" que tengo para entenderlo es que significa el método para hacer algo, que podría escribirse como una lista en pseudocódigo.

Cuando escribo un código más complicado, creo lo que hay que hacer, con qué y cómo llegaría allí (no en un lenguaje de programación), luego lo escribo en el código. ¿Es esa una buena manera de hacerlo, y tiene algo que ver con algoritmos?

(Quería preguntar aquí más bien sobre Stackoverflow, porque no se trata de un problema / idioma específico, además tengo la sensación de que la mayoría de las personas aquí saben el 'por qué', o al menos las respuestas aquí son más detalladas, en lugar de Stackoverflow donde es diferente, lo siento si debería haber preguntado allí)

Jonathan
fuente
55
Google? Wiki? google.com/search?q=algorithm
Maglob
1
@Apalala: No creo que se apliquen esas limitaciones.
Josh K
2
@Apalala: finita , no conocida .
Josh K
2
@ Jonathan: "palabras que tengo que buscar"? ¿Que palabras? Se específico . Este sitio no es mágico. No te conocemos No sabemos lo que lees. No sabemos qué te confundió. Por favor sea específico .
S.Lott
1
@Apalala: "Finito" significa "acotado", nada más. Se garantiza que un algoritmo se detendrá alguna vez. Es mucho más fácil demostrar la finitud cuando tienes algún tipo de predicción de que terminará, por lo que los algoritmos tienden a ser predecibles, pero la previsibilidad no está en la definición habitual de algoritmos.
David Thornley

Respuestas:

19

Un algoritmo es una secuencia finita de instrucciones bien definidas para calcular una función (o ejecutar un procedimiento) que termina en un estado final bien definido.

John Bode
fuente
1
+1. "Finito, bien definido y efectivo" son los tres criterios en la entrada de Wikipedia. Tienes los tres aquí, también.
S.Lott
Estoy preparado para ver los videos citados por @ Jörg, pero mi punto de vista actual es que no solo los pasos deben ser finitos. Si los recursos (incluido el tiempo) no están limitados, el procedimiento puede llamarse o etiquetarse como cualquier cosa, pero no como un algoritmo .
Apalala
@Apalala: he estado revisando mis libros de texto y no veo esa restricción en ningún lado. Es posible que para un determinado conjunto de datos o la entrada de un algoritmo no puede terminar (algoritmos como el método de Newton-Raphson para encontrar una raíz puede atascarse en un bucle sin fin), pero eso no significa que no es el algoritmo de un algoritmo.
John Bode
Las oscilaciones de @John pueden detectarse de manera rutinaria en Newton-Raphson.
Apalala
1
@Apalala: eso suena más como la definición de un programa que de un algoritmo. Esta idea de pasos discretos está presente en las máquinas de Turing, las máquinas de registro, las máquinas de acceso aleatorio y, por supuesto, en nuestras computadoras físicas reales, también en casi todos los lenguajes de programación e incluso, aunque de manera más implícita, en el cálculo lambda. Pero esa es una restricción arbitraria que no es inherente a los algoritmos. Analógicas algoritmos, por ejemplo, ¿ no tienen pasos discretos (de hecho, que es la definición de un algoritmo analógico), y pueden de hecho ser implementados con un ordenador analógico.
Jörg W Mittag
15

Esta es en realidad una pregunta bastante interesante, y de hecho sigue siendo una pregunta de investigación abierta.

Yuri Gurevich, uno de los gigantes de la teoría de algoritmos, actualmente está dando una serie de video conferencias en el sitio web de la comunidad de Microsoft Channel9:

Como puede ver, su pregunta es en realidad el título de la segunda conferencia. Sin embargo, te sugiero que los veas a los tres.

El primero, en particular, contiene un par de ejemplos de algoritmos que invalidan prácticamente todas las definiciones dadas en la mayoría de las otras respuestas aquí.

Jörg W Mittag
fuente
2
Gracias por los enlaces. Notará lo siguiente en el texto que acompaña al primer video, como parte de la definición de un algoritmo: "finalmente termina en un estado final final". La terminación es una parte esencial de la definición de un algoritmo. Es por eso que los sistemas operativos y los servidores sin terminación no son algoritmos.
LIProf
4

Un algoritmo es como una buena receta de cocina . Tiene algunas entradas, algunos pasos intermedios bien definidos y obtiene un resultado final.

Aplicado a la programación, es una descripción inequívoca de los pasos que necesita para resolver un problema en particular. Cualquier cosa que pueda escribir en el lenguaje de programación de su elección podría verse como un algoritmo, pero generalmente el término solo se usa para tareas lógicas o matemáticas comunes, como ordenar o buscar.

Alexander Gessler
fuente
Hay muchos algoritmos que no necesariamente dan un resultado final. Un sistema operativo o un servidor web, por ejemplo, es un algoritmo para el que dar un resultado final generalmente se considera un error.
Jörg W Mittag
@ JörgWMittag, pero ¿es un sistema operativo o un servidor web "un algoritmo"? Creo que no lo son, pueden resolver subproblemas de su dominio utilizando algoritmos, y en todos los casos, definitivamente necesitan un resultado final, pero también tienen partes que no son algoritmos, y en su conjunto no lo son. t algoritmos. (Es como dijiste en otro comentario: los sistemas operativos y los servidores web son programas pero no necesariamente algoritmos ).
Andrés F.
2

Un algoritmo es un conjunto de reglas o proceso (en un cálculo) utilizado para resolver problemas. Básicamente, hay un problema, quieres una solución, y el proceso para esta solución es un algoritmo. Un algoritmo tiene un conjunto finito de reglas / procesos para llegar a una solución.

Si eres como Edsger W. Dijkstra , escribirás tu algoritmo en una hoja de papel y trabajarás / perfeccionarás el algoritmo en papel hasta que estés satisfecho con tus algoritmos. De lo contrario (especialmente al escribir documentaciones), se usa un diagrama de flujo para representar esquemáticamente el flujo de un algoritmo / proceso. Esto permite que otros critiquen el diagrama de flujo y mejoren si es necesario (sin preocuparse por el lenguaje de programación que se necesita).

No sé si eso responde a tu pregunta.

Buhake Sindi
fuente
No me gusta el conjunto de palabras porque significa "no ordenado". Preferiría "secuencia" o tupla de evento para permanecer en el área de matemáticas
BenjaminB
@ Ubiquité, Set no significa necesariamente "no ordenado". Puede clasificar un conjunto en el orden que desee (por ejemplo, un orden aleatorio). Aún así, eso no requiere un voto negativo debido a la interpretación de la gente de la palabra "conjunto". Además, puede tener un conjunto compuesto, que es una agrupación de conjuntos, que también forma parte de los algoritmos. Por lo tanto, "conjunto" puede ser cualquier cosa, siempre que se utilice adecuadamente como solución algorítmica a un problema.
Buhake Sindi
¡No voté en contra!
BenjaminB
Lo siento, no quise culparte por el voto negativo. El votante negativo debe proporcionar explícitamente los motivos del voto negativo.
Buhake Sindi
1

Algoritmo: un conjunto de operaciones bien ordenadas que son 1) inequívocas y 2) efectivamente computables, de modo que la ejecución de las operaciones a partir de la primera produce un resultado después de un número finito de operaciones.

ThomasMcLeod
fuente
Ejemplo de contador: un sistema operativo. No produce un resultado en absoluto , de hecho, que por lo general se considera un error.
Jörg W Mittag el
@ Jörg, bueno, el sistema operativo produce muchos resultados que, en conjunto, producen el resultado general de proporcionar servicios del sistema a las aplicaciones.
ThomasMcLeod
@ JörgWMittag Como dije en otros comentarios, una conclusión a su observación sería que un sistema operativo no es, de hecho, un algoritmo;)
Andres F.
1

Algoritmo Es la combinación de pasos secuenciales (estos pasos pueden ser cálculos, procesamiento de datos y tareas de razonamiento) utilizados para resolver un problema de una manera muy simple y eficiente.

Está diseñado de manera más eficiente para que pueda expresarse en una cantidad finita de espacio y tiempo. podemos implementarlo en cualquier lenguaje de programación.

Propiedades de un algoritmo: las siguientes son las principales propiedades de un algoritmo: -

Un algoritmo debe tener un nombre único. Debería haber definido explícitamente conjuntos de entradas y salidas. Un algoritmo debe estar en orden secuencial con operaciones inequívocas. Debe tener algún punto final, es decir, se detiene en un tiempo finito. Haga clic aquí para aprender sobre Diseño y Análisis de Algoritmo

Mohd Junaid
fuente
0

Utilizo el término para describir una fórmula para resolver un problema específico. La fórmula no necesariamente debe escribirse en matemáticas o tener una relación 1: 1 con un método. En la escuela, los algoritmos y las estructuras de datos están estrechamente relacionados y pueden escribirse como fórmulas matemáticas o probarse utilizando pruebas.

P.Brian.Mackey
fuente
0

Un algoritmo es una abstracción de un programa de computadora y consta de un conjunto de instrucciones para lograr una tarea bien definida en un número finito de pasos, aunque el límite en el recuento de pasos puede ser muy grande y los pasos individuales pueden ser complejos ( finito) tareas por derecho propio. Si bien hay programas (correctos) que en general se conocen sin algoritmos, todos funcionan repitiendo piezas algorítmicas en algún patrón. (Más interesantes son los programas cuyo estado de terminación no se conoce, pero la mayoría de los programadores en realidad no se ocupan de esas cosas intencionalmente; ¡sé que no!)

Compañeros de Donal
fuente
0

En mi opinión, nadie lo sabe :) He visto el término aplicado solo a funciones de cálculo matemático, a cualquier función que recibe entrada y produce salida, y a todo lo que toma entrada y realiza algún tipo de operación en ella.

¿Considerarías que todo / lo siguiente es un algoritmo?

  1. Una función que calcula la tasa de interés de un préstamo durante un período de 20 años.
  2. Lógica empresarial que verifica si se ha ingresado toda la información en una solicitud de préstamo
  3. Una finderfunción que consulta una base de datos para un objeto Cliente
  4. Una función "auxiliar" que limpia y formatea la entrada de datos
  5. Una función que analiza un archivo XML y asigna datos a objetos comerciales
  6. Una clase que toma datos y los escribe en un archivo de texto.
Wayne Molina
fuente
0

Un algoritmo es una idea, un método, una técnica, "inteligencia" para el cálculo o la ejecución de una tarea de naturaleza abstracta, pero como se ejecuta en computadoras en el mundo real, aspiramos a que use la menor cantidad de recursos posible , que son, en el mundo informático, Tiempo y memoria.

JasonGenX
fuente
0

Un algoritmo es una secuencia de pasos bien definidos que producen un resultado en un tiempo finito.

Paso bien definido: eso es algo que puede hacer, o calcular, que está definido con precisión. Simplemente leyendo el paso ya sabes lo que tienes que hacer y cómo hacerlo. Específicamente, puede escribirlo en un lenguaje de programación que conozca y asegurarse de que el fragmento del programa coincida exactamente con el paso.

Secuencia: los pasos se ejecutan en un orden especificado. Los pasos pueden ejecutarse más de una vez dependiendo de los datos (bucles) o no ejecutarse en absoluto según los datos (si las declaraciones). Los algoritmos paralelos imponen solo un orden parcial en los pasos, por lo que estoy simplificando demasiado aquí. Sería más correcto describirlo como un conjunto parcialmente ordenado que como una secuencia, pero quería mantener las palabras un poco más simples. Además, es posible integrar fácilmente un conjunto parcialmente ordenado en un pedido completo.

Resultado: un estado o valor final. No tiene que ser predecible de antemano, pero sí tiene que ser un final definitivo que satisfaga alguna condición. Esto significa que un sistema operativo no es un algoritmo, aunque utiliza muchos de ellos.

Finito: se garantiza que un algoritmo se detendrá en algún momento, al menos en una máquina que pueda funcionar el tiempo suficiente. No se garantiza necesariamente que se detenga en un tiempo predecible, y no se garantiza que se detendrá antes de que el sol se expanda y se ponga rojo en cualquier máquina existente. Esto también significa que un sistema operativo no es un algoritmo, ya que idealmente se ejecutará para siempre. He visto la palabra "procedimiento" utilizada para describir algo que sería un algoritmo si estuviéramos seguros de que se detendría en algún momento. (Es posible tener un algoritmo que se detendrá en una cantidad de tiempo desconocida. Supongamos, digamos que la conjetura de Goldbach se demostró matemáticamente falsa, en una prueba no constructiva, por lo que hubo un número par> 2 que no era la suma de dos números primos Un algoritmo que simplemente probaba números pares eventualmente terminaría,

El algoritmo es un tipo de cosa intencionalmente abstracta, por lo que no consideramos preguntas como "¿Es físicamente posible ejecutar esto antes de la muerte por calor del Universo?". Serían demasiado difíciles de responder. Si se relaciona con las operaciones de la computadora, es fácil implementarlo en un lenguaje de programación.

David Thornley
fuente
-1

Si tuviera que dar una definición general, diría que un algoritmo es una fórmula para resolver un problema informático que es más complejo y termina siendo más eficiente que la solución de fuerza bruta / obvia.

Además, es importante tener en cuenta que un algoritmo no es un código fuente específico; Es la computación misma. Entre otras cosas, esto significa que cualquier lenguaje completo de Turing puede implementar cualquier algoritmo que cualquier otro lenguaje completo de Turing pueda implementar.

Mason Wheeler
fuente
Me gustó mucho esta respuesta, y creo que podríamos ir un poco más lejos y decir (aunque no está relacionado con la pregunta original): cualquier algoritmo es una optimización de una solución de búsqueda de fuerza bruta / árbol. Me preguntaba si se puede probar formalmente.
mojuba
-1 "Algoritmo" es un término matemático bien definido.
Apalala
1
@Apalala, entonces, ¿qué le impide redefinirlo en aras de la claridad o, por ejemplo, una mejor comprensión de su esencia? El algoritmo como un "conjunto de instrucciones" no me dice casi nada.
mojuba
1
@mojuba Realmente no me importa si el término se redefinirá, pero creo que la definición tradicional fue útil, porque al menos diferenciaba entre las formas de abordar los problemas: un algoritmo es una receta para resolver un problema utilizando recursos finitos . Cambie esa definición, y la consecuencia previsible es que tendremos que encontrar otra palabra que signifique lo mismo. ¡Maldito! ¡Todo el conocimiento adquirido en el siglo pasado sobre computabilidad y complejidad desaparece sin una definición sólida del algoritmo !
Apalala
1
Una búsqueda de fuerza bruta es un algoritmo. Generalmente no es un algoritmo bonito, y generalmente no vale la pena escribirlo. No veo ninguna utilidad real para excluir la fuerza bruta, y en muchos casos no está claro qué significa "mejor que la fuerza bruta".
David Thornley