DAA - Introducción

Un algoritmo es un conjunto de pasos de operaciones para resolver un problema realizando tareas de cálculo, procesamiento de datos y razonamiento automatizado. Un algoritmo es un método eficiente que se puede expresar en una cantidad finita de tiempo y espacio.

Un algoritmo es la mejor manera de representar la solución de un problema en particular de una manera muy simple y eficiente. Si tenemos un algoritmo para un problema específico, entonces podemos implementarlo en cualquier lenguaje de programación, lo que significa que elalgorithm is independent from any programming languages.

Diseño de algoritmos

Los aspectos importantes del diseño de algoritmos incluyen la creación de un algoritmo eficiente para resolver un problema de una manera eficiente utilizando el mínimo de tiempo y espacio.

Para resolver un problema, se pueden seguir diferentes enfoques. Algunos de ellos pueden ser eficientes con respecto al consumo de tiempo, mientras que otros enfoques pueden ser eficientes en memoria. Sin embargo, hay que tener en cuenta que tanto el consumo de tiempo como el uso de memoria no se pueden optimizar simultáneamente. Si necesitamos que un algoritmo se ejecute en menos tiempo, tenemos que invertir en más memoria y si necesitamos que un algoritmo se ejecute con menos memoria, necesitamos tener más tiempo.

Pasos para el desarrollo del problema

Los siguientes pasos están involucrados en la resolución de problemas computacionales.

  • Definición del problema
  • Desarrollo de un modelo
  • Especificación de un algoritmo
  • Diseñar un algoritmo
  • Comprobación de la corrección de un algoritmo
  • Análisis de un algoritmo
  • Implementación de un algoritmo
  • Prueba del programa
  • Documentation

Características de los algoritmos

Las principales características de los algoritmos son las siguientes:

  • Los algoritmos deben tener un nombre único

  • Los algoritmos deben tener un conjunto definido explícitamente de entradas y salidas

  • Los algoritmos están bien ordenados con operaciones inequívocas

  • Los algoritmos se detienen en un período de tiempo finito. Los algoritmos no deben ejecutarse hasta el infinito, es decir, un algoritmo debe terminar en algún punto

Pseudocódigo

El pseudocódigo proporciona una descripción de alto nivel de un algoritmo sin la ambigüedad asociada con el texto plano, pero también sin la necesidad de conocer la sintaxis de un lenguaje de programación en particular.

El tiempo de ejecución se puede estimar de una manera más general utilizando pseudocódigo para representar el algoritmo como un conjunto de operaciones fundamentales que luego se pueden contar.

Diferencia entre algoritmo y pseudocódigo

Un algoritmo es una definición formal con algunas características específicas que describe un proceso, que podría ser ejecutado por una computadora completa de Turing para realizar una tarea específica. Generalmente, la palabra "algoritmo" se puede utilizar para describir cualquier tarea de alto nivel en informática.

Por otro lado, el pseudocódigo es una descripción informal y (a menudo rudimentaria) legible por humanos de un algoritmo que deja muchos detalles granulares del mismo. Escribir un pseudocódigo no tiene restricciones de estilos y su único objetivo es describir los pasos de alto nivel del algoritmo de una manera muy realista en lenguaje natural.

Por ejemplo, a continuación se muestra un algoritmo para la ordenación por inserción.

Algorithm: Insertion-Sort 
Input: A list L of integers of length n  
Output: A sorted list L1 containing those integers present in L 
Step 1: Keep a sorted list L1 which starts off empty  
Step 2: Perform Step 3 for each element in the original list L  
Step 3: Insert it into the correct position in the sorted list L1.  
Step 4: Return the sorted list 
Step 5: Stop

Aquí hay un pseudocódigo que describe cómo el proceso abstracto de alto nivel mencionado anteriormente en el algoritmo Insertion-Sort podría describirse de una manera más realista.

for i <- 1 to length(A) 
   x <- A[i] 
   j <- i 
   while j > 0 and A[j-1] > x 
      A[j] <- A[j-1] 
      j <- j - 1 
   A[j] <- x

En este tutorial, los algoritmos se presentarán en forma de pseudocódigo, que es similar en muchos aspectos a C, C ++, Java, Python y otros lenguajes de programación.