# data[].attributes.body
Las instrucciones y los pasos contenidos en un algoritmo deben ser precisos, es decir, no deben dejar margen para ningún tipo de ambigüedad.

Esto se debe a que sus instrucciones deben poder seguirse y comprenderse a cabalidad, o de lo contrario el diagrama de flujo en el que se inscribe no arrojará el resultado correcto.

# data[].attributes.body
Todo algoritmo debe estar perfectamente definido, es decir, se lo debe seguir cuantas veces sea necesario obteniendo cada vez siempre el mismo resultado.

De lo contrario, el algoritmo no será fiable y no servirá como guía en la toma de decisiones.

# data[].attributes.body
Los algoritmos deben ser finitos: deben terminar en algún momento o arrojar un resultado al final de sus pasos.

Si el algoritmo se prolonga indefinidamente, regresando a algún punto inicial sin poderse resolver jamás, estaremos en presencia de una paradoja o un “loop” de repeticiones.

# data[].attributes.body
La legibilidad de los algoritmos es clave, pues si su contenido es incomprensible no podrán seguirse las instrucciones adecuadas. Esto implica una redacción directa, clara y concisa del texto contenido en cada uno.

# data[].attributes.body
Todo algoritmo presenta tres partes distintas: entrada, proceso y salida.

Entrada. La instrucción inicial que da pie al algoritmo y que motiva su lectura. Puede llamarse también inicio, cabecera o punto de partida.

Proceso. Se trata de la elaboración puntual ofrecida por el algoritmo, el cuerpo de sus claves para formular una instrucción. También puede llamarse declaraciones.

Salida. Por último, están las instrucciones puntuales dictaminadas por el algoritmo, es decir, sus resoluciones o comandos. También puede llamarse cuerpo, pie o fin.

# data[].attributes.body
Existen diversas clasificaciones de los algoritmos, en base a distintas características. Algunos pueden ser:

# data[].attributes.body
Según sus funciones. De acuerdo a las funciones del algoritmo, podemos hablar de:

Algoritmos de ordenamiento. Establecen una secuencia de algún tipo para el ingreso de algún tipo de datos.

Algoritmos de búsqueda. Como su nombre lo indica, permite recuperar de una lista específica una serie de elementos determinados.

Algoritmos de encaminamiento. Determinan qué proceso seguirá una instrucción o cómo deberá transmitirse un conjunto de datos. Pueden ser adaptativos (se adaptan al problema) o estáticos (siempre operan igual).

# data[].attributes.body
Según su estrategia. Conforme al método empleado para arrojar sus resultados, podemos estar en presencia de:

Algoritmos probabilísticos. Ofrecen un margen de probabilidad como resultado, de modo que no hay total certeza de su precisión.

Algoritmos heurísticos. Se emplean cuando los métodos tradicionales fallan en arrojar una solución ya que abandonan algún objetivo para alcanzar un resultado posible.

Algoritmos cotidianos. Aquellos usados en la toma cotidiana de decisiones y que pertenecen al ámbito de los más sencillos.

Algoritmos de escalada. Modifican el proceso a medida que la solución es insatisfactoria (no cumple con la entrada y salida) hasta aproximarse a lo buscado.

Algoritmos deterministas. Operan de manera lineal, de modo que sus resultados pueden ser predichos y pueden aplicarse a procesos controlados.

# data[].attributes.body
Según su sistema de signos. Conforme a la manera en que describen los pasos a seguir, podemos hablar de:

Algoritmos cualitativos. Emplean texto y caracteres verbales para impartir sus instrucciones. Por ejemplo, una receta de cocina.

Algoritmos cuantitativos. Emplean cálculos numéricos y operaciones algebraicas. Por ejemplo, una multiplicación.

# data[].attributes.body
Ventajas. Permiten el ordenamiento secuencial de los procesos y disminuyen, por lo tanto, el rango posible de errores, ayudando a resolver más rápido y más fácil los problemas planteados. Además, son precisos y permiten ceñirse a una guía específica.

Desventajas. Suelen requerir de conocimiento previo y sobre todo técnico, ya que a menudo los algoritmos se expresan (excepto los más cotidianos y sencillos) en un lenguaje adaptado al caso en cuestión. Por otro lado, la confianza ciega en un método lógico para resolver los problemas puede obviar soluciones creativas más innovadoras pero impredecibles.

# data[].attributes.body
Para plantear un algoritmo adecuado es preciso seguir estos tres pasos:

Enunciar el problema. Esto es clave, ya que la manera en que planteemos el problema será el enfoque específico que nos servirá para alcanzar una solución. Se debe recopilar datos, abordar el problema desde una perspectiva amplia y a la vez puntual.

Analizar la solución general. Se debe cotejar los datos previos con las posibles soluciones y explorar las áreas de trabajo, fórmulas y otras herramientas posibles. Luego, aproximarse a diversas tentativas de solución.

Elaborar el algoritmo. Una vez elegido el camino a seguir, se debe elegir el tipo de algoritmo adecuado y plantearlo, para luego ponerlo a prueba y determinar si es exactamente la solución deseada.

# data[].attributes.body
Los algoritmos suelen representarse mediante lenguaje natural (verbal), códigos de todo tipo, diagramas de flujo, lenguajes de programación o simplemente operaciones matemáticas. Suele aplicarse también un diagrama visual.