in

Estructuras de datos: conceptos básicos de algoritmos

problem solutions

El algoritmo es un procedimiento paso a paso, que define un conjunto de instrucciones que se ejecutarán en un orden determinado para obtener la salida deseada. Los algoritmos generalmente se crean independientemente de los lenguajes subyacentes, es decir, un algoritmo se puede implementar en más de un lenguaje de programación.

Desde el punto de vista de la estructura de datos, las siguientes son algunas categorías importantes de algoritmos:

  • Buscar – Algoritmo para buscar un elemento en una estructura de datos.

  • Clasificar – Algoritmo para clasificar elementos en un orden determinado.

  • Insertar – Algoritmo para insertar elementos en una estructura de datos.

  • Actualizar – Algoritmo para actualizar un elemento existente en una estructura de datos.

  • Borrar – Algoritmo para eliminar un elemento existente de una estructura de datos.

Características de un algoritmo

No todos los procedimientos pueden denominarse algoritmos. Un algoritmo debe tener las siguientes características:

  • Inequívoco – El algoritmo debe ser claro e inequívoco. Cada uno de sus pasos (o fases), y sus entradas / salidas deben ser claros y deben conducir a un solo significado.

  • Aporte – Un algoritmo debe tener 0 o más entradas bien definidas.

  • Producción – Un algoritmo debe tener 1 o más salidas bien definidas y debe coincidir con la salida deseada.

  • Finitud – Los algoritmos deben terminar después de un número finito de pasos.

  • Factibilidad – Debe ser factible con los recursos disponibles.

  • Independiente – Un algoritmo debe tener instrucciones paso a paso, que deben ser independientes de cualquier código de programación.

¿Cómo escribir un algoritmo?

No existen estándares bien definidos para escribir algoritmos. Más bien, depende del problema y de los recursos. Los algoritmos nunca se escriben para admitir un código de programación en particular.

Como sabemos, todos los lenguajes de programación comparten construcciones de código básicas como bucles (do, for, while), control de flujo (if-else), etc. Estas construcciones comunes pueden usarse para escribir un algoritmo.

Escribimos algoritmos paso a paso, pero no siempre es así. La escritura de algoritmos es un proceso y se ejecuta después de que el dominio del problema esté bien definido. Es decir, debemos conocer el dominio del problema para el que estamos diseñando una solución.

Ejemplo

Intentemos aprender a escribir algoritmos usando un ejemplo.

Problema – Diseñar un algoritmo para sumar dos números y mostrar el resultado.

Step 1 − START
Step 2 − declare three integers a, b & c
Step 3 − define values of a & b
Step 4 − add values of a & b
Step 5 − store output of step 4 to c
Step 6 − print c
Step 7 − STOP

Los algoritmos les dicen a los programadores cómo codificar el programa. Alternativamente, el algoritmo se puede escribir como:

Step 1 − START ADD
Step 2 − get values of a & b
Step 3 − c ← a + b
Step 4 − display c
Step 5 − STOP

En el diseño y análisis de algoritmos, generalmente se utiliza el segundo método para describir un algoritmo. Facilita al analista analizar el algoritmo ignorando todas las definiciones no deseadas. Puede observar qué operaciones se están utilizando y cómo fluye el proceso.

Escribiendo números de paso, es opcional.

Diseñamos un algoritmo para obtener la solución de un problema determinado. Un problema se puede resolver de más de una forma.

un problema muchas soluciones

Por tanto, se pueden derivar muchos algoritmos de solución para un problema dado. El siguiente paso es analizar los algoritmos de solución propuestos e implementar la solución más adecuada.

Análisis de algoritmos

La eficiencia de un algoritmo se puede analizar en dos etapas diferentes, antes de la implementación y después de la implementación. Son los siguientes:

  • A priori Análisis – Este es un análisis teórico de un algoritmo. La eficiencia de un algoritmo se mide asumiendo que todos los demás factores, por ejemplo, la velocidad del procesador, son constantes y no tienen ningún efecto en la implementación.

  • A posterior Análisis – Este es un análisis empírico de un algoritmo. El algoritmo seleccionado se implementa mediante lenguaje de programación. Esto luego se ejecuta en la máquina de la computadora de destino. En este análisis, se recopilan estadísticas reales como el tiempo de ejecución y el espacio requerido.

Aprenderemos sobre a priori análisis de algoritmos. El análisis de algoritmos se ocupa de la ejecución o el tiempo de ejecución de varias operaciones involucradas. El tiempo de ejecución de una operación se puede definir como el número de instrucciones de computadora ejecutadas por operación.

Complejidad del algoritmo

Suponer X es un algoritmo y norte es el tamaño de los datos de entrada, el tiempo y el espacio utilizados por el algoritmo X son los dos factores principales que deciden la eficiencia de X.

  • Factor de tiempo – El tiempo se mide contando el número de operaciones clave, como comparaciones, en el algoritmo de clasificación.

  • Factor de espacio – El espacio se mide contando el espacio de memoria máximo requerido por el algoritmo.

La complejidad de un algoritmo f (n) da el tiempo de ejecución y / o el espacio de almacenamiento requerido por el algoritmo en términos de norte como el tamaño de los datos de entrada.

Complejidad espacial

La complejidad espacial de un algoritmo representa la cantidad de espacio de memoria que requiere el algoritmo en su ciclo de vida. El espacio requerido por un algoritmo es igual a la suma de los siguientes dos componentes:

  • Una parte fija que es un espacio requerido para almacenar ciertos datos y variables, que son independientes del tamaño del problema. Por ejemplo, variables simples y constantes utilizadas, tamaño del programa, etc.

  • Una parte variable es un espacio requerido por variables, cuyo tamaño depende del tamaño del problema. Por ejemplo, asignación de memoria dinámica, espacio de pila de recursividad, etc.

La complejidad espacial S (P) de cualquier algoritmo P es S (P) = C & plus; SP (I), donde C es la parte fija y S (I) es la parte variable del algoritmo, que depende de la característica de la instancia I. A continuación, se muestra un ejemplo simple que intenta explicar el concepto:

Algorithm: SUM(A, B)
Step 1 -  START
Step 2 -  C ← A + B + 10
Step 3 -  Stop

Aquí tenemos tres variables A, B y C y una constante. Por tanto, S (P) = 1 & plus; 3. Ahora, el espacio depende de los tipos de datos de las variables dadas y los tipos de constantes y se multiplicará en consecuencia.

Complejidad del tiempo

La complejidad temporal de un algoritmo representa la cantidad de tiempo que necesita el algoritmo para ejecutarse hasta su finalización. Los requisitos de tiempo se pueden definir como una función numérica T (n), donde T (n) se puede medir como el número de pasos, siempre que cada paso consuma un tiempo constante.

Por ejemplo, la suma de dos enteros de n bits toma norte pasos. En consecuencia, el tiempo de cálculo total es T (n) = c ∗ n, donde c es el tiempo necesario para la suma de dos bits. Aquí, observamos que T (n) crece linealmente a medida que aumenta el tamaño de entrada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Número Armstrong en Java – Javatpoint

apple touch icon@2

Ejecución asíncrona vs síncrona, ¿cuál es la principal diferencia?