Un algoritmo es una secuencia de instrucciones que se llevan a cabo en una secuencia predeterminada con el fin de resolver un problema o completar un trabajo. Una función es un bloque de código que se puede llamar y ejecutar desde otras partes del programa.
Conjunto de instrucciones para resolver un problema o realizar una determinada actividad. En informática, los algoritmos se utilizan para una amplia gama de operaciones, desde matemáticas fundamentales hasta procesamiento de datos complejos.
Uno de los algoritmos comunes utilizados en C es el algoritmo de clasificación. Un algoritmo de clasificación organiza una colección de elementos en un orden determinado, como numérica o alfabéticamente.
Existen muchos algoritmos de clasificación, cada uno con ventajas y desventajas. Los algoritmos de clasificación más comunes en C son clasificación rápida, combinación y clasificación.
Una de las características clave de C es la compatibilidad con punteros. Esto permite una manipulación eficiente de estructuras de datos como matrices, colas, etc. Esto lo hace adecuado para implementar algoritmos que requieren una manipulación de datos compleja, como la clasificación y la búsqueda algorítmica.
Uno de los ejemplos famosos de biblioteca de software implementada en C es la Biblioteca de plantillas estándar (STL). Esta biblioteca proporciona una amplia variedad de algoritmos para tareas como ordenar, buscar y manipular estructuras de datos.
Características del algoritmo.
Define varias características importantes del algoritmo, que incluyen:
Análisis de algoritmos
El análisis algorítmico es el proceso de evaluar el rendimiento de un algoritmo en términos de eficiencia, complejidad y otros criterios. Normalmente, esto se hace para evaluar muchos algoritmos y seleccionar la solución óptima para un determinado problema o software.
El análisis de algoritmos suele implicar medir su complejidad temporal y espacial.
Al igual que con la complejidad del espacio, que describe la cantidad de memoria o espacio en disco necesaria, la complejidad del tiempo describe cuánto tiempo determina un algoritmo para realizar una tarea.
Hay diferentes formas de analizar la complejidad temporal de los algoritmos, como la notación Big O y Omega. El símbolo Omega proporciona un límite superior para la complejidad temporal del algoritmo, mientras que el símbolo Omega proporciona un límite inferior.
Además de medir la complejidad temporal y espacial, el análisis de algoritmos también incluye otros criterios como estabilidad, paralelismo y escalabilidad.
Incluyen dos tipos de análisis.
ellos son:-
- Análisis previo.
- Análisis posterior.
Análisis previo
Prior es un método de análisis de algoritmos que se centra en estimar el rendimiento de un algoritmo en función de sus propiedades matemáticas sin ejecutar realmente el algoritmo.
Este enfoque le permite analizar la complejidad temporal y espacial de los algoritmos y otras métricas sin la necesidad de implementar y ejecutar los algoritmos.
Análisis posterior
El análisis posterior, por otro lado, es un método de análisis de algoritmos que realmente ejecuta el algoritmo y mide su rendimiento.
Este enfoque proporciona información más precisa y detallada sobre el rendimiento del algoritmo, pero requiere la implementación y ejecución del algoritmo.
Complejidad del algoritmo
La complejidad algorítmica es una medida para medir la eficiencia y el rendimiento del algoritmo. Los algoritmos suelen evaluarse en términos del tiempo y espacio necesarios para resolver un problema o lograr un objetivo específico.
Se utilizan dos factores en la complejidad del algoritmo.
ellos son:-
- Factor tiempo.
- Factor espacial.
factor tiempo
- La cantidad de tiempo que un algoritmo necesita para realizar una tarea se conoce como complejidad del tiempo y generalmente se mide por la cantidad de operaciones o pasos que debe realizar un algoritmo para resolver un problema.
- La complejidad temporal de un algoritmo es importante porque determina cuánto tiempo lleva ejecutarse y puede tener un impacto significativo en el rendimiento del programa y del sistema.
- La complejidad temporal de un algoritmo se puede expresar utilizando la notación O grande, una forma de expresar un límite superior de la complejidad temporal de un algoritmo.
- Un algoritmo con complejidad temporal O (n) significa que el tiempo necesario para ejecutar el algoritmo es directamente proporcional al tamaño de los datos de entrada (n).
- Otras complejidades de tiempo comunes son la complejidad cuadrática O (n ^ 2) y la complejidad logarítmica O (log n).
Análisis espacial
- Por otro lado, la complejidad espacial se refiere a la cantidad de memoria o espacio de almacenamiento necesario para ejecutar el algoritmo.
- Esto es importante porque determina la cantidad de recursos necesarios para ejecutar algoritmos que pueden afectar el rendimiento general de su aplicación o sistema.
- Si la complejidad espacial del algoritmo es O(n), utiliza una cantidad de memoria que crece linealmente con el tamaño de la entrada.
- Si el algoritmo tiene una complejidad espacial O(1), utiliza una cantidad fija de memoria independientemente del tamaño de la entrada.
Cómo escribir un algoritmo
1. Primero defina el problema que desea que resuelva el algoritmo.
Por ejemplo, supongamos que queremos escribir un algoritmo para encontrar el valor máximo de una lista de números.
2. Divida el problema en pasos más pequeños y manejables.
- Inicialice la variable 'max' con el primer valor de la lista.
- Para cada valor subsiguiente en la lista, compárelo con 'max'.
- Si el valor es mayor que 'max', establezca 'max' en ese valor.
- Continúe haciendo esto hasta que se hayan comparado todos los valores de la lista.
- Devuelve el valor 'máximo' final.
3. Escriba su algoritmo en pseudocódigo o en un lenguaje de programación.
Algoritmo escrito en pseudocódigo:
MAX (list) max = list[0] For i = 1 the length of the list list IF[i] > max max = list[i] End for Maximum return Maximum end
4. Pruebe su algoritmo para asegurarse de que sea correcto y eficiente.
Puede probar el algoritmo ingresando diferentes listas de números y verificando que devuelva el valor máximo correcto. También puede analizar la complejidad temporal de su algoritmo para determinar qué tan bien se adapta a entradas más grandes.
Ejemplo:-
Entrada: [1, 5, 2, 7, 3]
Salida: 7.
Explicación: 7 es el valor máximo en la lista.
5. Optimice el algoritmo.
Busque formas de optimizar los algoritmos para hacerlos más rápidos y eficientes. Esto puede implicar modificar el pseudocódigo o implementar estructuras de datos o algoritmos más eficientes.
cadena java en matriz
Escritura básica de algoritmos.
Ejemplo: - La suma de dos números enteros.
Paso 1 - Empezar
Paso 2 - Declarar tres números enteros a, b, c
Paso 3 - Definir los valores de a y b.
Etapa 4 - Sumar los valores de a y b.
Paso 5 - Guarde el resultado del paso 4 en c
Paso 6 - Imprimir c
Paso 7 - Detener
Tipo de algoritmos utilizados en lenguaje C.
1. Algoritmos de clasificación
C proporciona un amplio conjunto de tipos de datos y operadores que se pueden utilizar para implementar varios algoritmos de clasificación, como clasificación por burbujas, clasificación por inserción y clasificación rápida.
Estos algoritmos son útiles en muchas aplicaciones porque pueden usarse para ordenar datos de diferentes tamaños y tipos.
Existen diferentes algoritmos de clasificación.
ellos son:-
(i) Clasificación de burbujas: Un algoritmo de clasificación sencillo que compara repetidamente los componentes cercanos y los desactiva si no están en orden.
El algoritmo para ordenar burbujas es: -
- Comience con una lista desordenada de elementos.
- Compara los dos primeros elementos de la lista. Si el primer elemento es más grande que el segundo, cámbielos.
- Pase al siguiente par de elementos y repita el paso 2 hasta llegar al final de la lista.
- Para cada elemento de la lista, repita los pasos 2 y 3 una vez más. eso se conoce como pases.
- Repita los pasos 2 a 4 para toda la lista. A medida que repita las pasadas, los elementos 'aparecerán' hasta su posición correcta en la lista ordenada.
- Una vez que se completa un pase y no se realizan cambios, la lista se ordena y el algoritmo puede detenerse.
- Se devuelve la lista ordenada final.
(ii) Clasificación por inserción : un método de clasificación que crea una lista ordenada, un elemento individual a la vez, colocando cada uno en el lugar apropiado.
El algoritmo para la clasificación por inserción es: -
- Inicialice una lista ordenada vacía y una lista sin ordenar de los elementos a ordenar.
- Se debe tomar el primer miembro de la lista sin clasificar y colocarlo en la posición adecuada en la lista ordenada.
- Repita el paso 2 para cada elemento subsiguiente en la lista desordenada.
- Compare el elemento actual con los elementos de la lista ordenada, comenzando con el elemento inmediatamente a la izquierda.
- Intercambie los dos elementos si el elemento actual es más pequeño que el elemento a su izquierda.
- Si el elemento actual es más grande que el elemento a su izquierda, insértelo en su posición correcta en la lista ordenada.
- Repita los pasos 4 a 6 para cada elemento subsiguiente en la lista sin ordenar.
- Una vez que se hayan procesado todos los elementos, la lista ordenada contendrá todos los elementos en el orden correcto.
- El proceso de clasificación está completo.
(iii) Orden de selección : un método de clasificación que comienza consistentemente el listado ordenado con el detalle más pequeño del listado desordenado.
El algoritmo de clasificación de selección es: -
- Comience configurando el elemento principal de la lista como elemento mínimo.
- Repita los elementos restantes de la lista, comparando cada uno con el mínimo actual.
- Establezca un nuevo mínimo si se encuentra que un elemento es más pequeño que el existente.
- Cambie el mínimo actual al primer elemento de la lista cada vez que llegue a su conclusión.
- Para la parte restante sin clasificar de la lista, repita los pasos 2 a 4, pero comience con el segundo elemento de la lista (ya que el primer elemento ya está ordenado).
- Continúe ordenando la lista de esta manera hasta que esté todo ordenado.
(iv) Clasificación rápida : Un algoritmo de clasificación de divide y vencerás que elige un elemento pivote y divide la lista en sublistas dependiendo de si los elementos son menores o mayores que el pivote. Después de eso, las sublistas se ordenan repetidamente hasta que se ordena la lista completa.
El algoritmo para la clasificación rápida es: -
- Elija un elemento dinámico de la lista. Este suele ser el primer elemento, pero también puede ser un elemento aleatorio o la mediana de la lista.
- Divida la lista en dos sublistas: una que contenga elementos menores que el pivote y otra que contenga elementos mayores que el pivote.
- Ordene recursivamente la sublista que contiene elementos menores que el pivote utilizando el mismo proceso.
- Utilice el mismo procedimiento para ordenar recursivamente la sublista de entradas más grandes que el pivote.
- Concatene las sublistas ordenadas con el elemento pivote intermedio para formar una lista completamente ordenada.
- Devuelve la lista completamente ordenada.
(v) La suerte va : El algoritmo de clasificación divide y vencerás divide la lista en dos mitades, ordena cada mitad y luego fusiona las dos mitades en orden.
Algoritmo de ordenación por fusión:
- Haga dos sublistas a partir de la lista: una con elementos debajo del pivote y otra con elementos encima del pivote.
- Produce una nueva sublista ordenada fusionando sublistas de forma iterativa hasta que solo exista una sublista. Esta será tu lista ordenada.
- Pasos para fusionar dos subdirectorios: -
- Cree una lista vacía para contener los elementos ordenados.
- Compara el primer elemento de cada sublista.
- Agrega el elemento más pequeño a la nueva lista y lo elimina de la sublista principal.
- Repita los pasos 2 y 3 hasta que la lista esté completamente vacía.
- Agrega los elementos restantes de otras sublistas a una nueva lista.
- Reemplaza la sublista fusionada con la nueva lista ordenada.
- Repita este proceso hasta que todas las sublistas se combinen en una lista ordenada.
(vi) Clasificación del montón : Un algoritmo de clasificación que clasifica elementos utilizando una estructura de datos llamada montón.
Este es el algoritmo de clasificación:
- Apila el resto de elementos. Comenzando desde la raíz, cada nodo se compara con sus hijos, intercambiando nodos con sus hijos mayores hasta que se cumpla la propiedad del montón máximo.
- Repita los pasos 2 y 3 con los elementos recién apilados, excepto el último elemento en la posición correcta.
- Repita este proceso hasta que solo quede un elemento en la pila. Esto ya está solucionado.
(vii) Radix sort : Un algoritmo de clasificación que clasifica elementos según los dígitos o dígitos de su representación binaria.
El algoritmo para la clasificación de Radix es: -
- determine cuántos dígitos contiene el elemento más grande del listado de entrada.
- Inicialice una variable, digamos el lugar del dígito, en 1, que representa el lugar del dígito actual.
- Cree una lista vacía para cada valor de dígito posible del 0 al 9.
- Repita la lista de entrada y agregue cada elemento a la lista apropiada según el valor del lugar del dígito actual.
- Concatene todas las listas para formar la nueva lista en el orden de las listas de dígitos.
- Multiplique digitPlace por 10 para pasar al siguiente dígito.
- Repita los pasos 4 a 6 para cada lugar de dígito hasta que se hayan considerado todos los dígitos del elemento más grande.
- La lista final se ordenará en orden ascendente por los dígitos de los elementos.
- Devuelve la lista ordenada final.
2. Algoritmos de búsqueda
C también proporciona las herramientas necesarias para implementar una variedad de algoritmos de búsqueda, como la búsqueda lineal y la búsqueda binaria. Estos algoritmos pueden encontrar rápidamente elementos específicos en un conjunto de datos, lo que los hace útiles para una amplia gama de aplicaciones.
Hay muchos tipos de algoritmos de búsqueda.
Ellos son:-
(i) Búsqueda lineal : Un algoritmo de búsqueda básico que examina cada artículo del listado uno por uno hasta encontrar el artículo deseado.
Algoritmo de búsqueda lineal: -
- Defina la entrada para el algoritmo: la entrada para un algoritmo de búsqueda lineal es una lista de elementos (o una matriz) y un elemento de destino que estamos buscando.
- Inicialice una variable llamada 'índice' en -1: esta variable se utilizará para almacenar el índice del elemento de destino si se encuentra.
- Recorra la lista de elementos: comenzando desde el primer elemento, verifique cada elemento de la lista uno por uno.
- Compare el elemento actual con el elemento deseado para su evaluación: mantenga el índice del elemento actual en la variable de índice y salga del bucle si el elemento moderno y el elemento objetivo son idénticos.
- Devuelve el índice del elemento de destino: una vez que se completa el ciclo, devuelve el valor almacenado en la variable de índice. Si no se encuentra el elemento de destino, el valor del índice será -1.
(ii) Búsqueda binaria : Es más probable que un algoritmo de búsqueda que opera dividiendo el listado en mitades y busque dentro de esas mitades incluya el elemento.
Algoritmo de búsqueda binaria: -
- Entrada: una lista ordenada de n elementos y un elemento de destino x.
- Inicializar variables: establezca el índice bajo en 0, el índice alto en n-1 y el medio en (bajo+alto)/2.
- Inicie un bucle: mientras el índice bajo sea menor o igual que el índice alto, repita los siguientes pasos.
- Compare el elemento medio con x: si el elemento medio es igual a x, devuelva el índice medio.
- Actualice el índice bajo o alto: si x es mayor que el elemento medio, establezca el índice bajo en medio + 1. De lo contrario, establezca el índice alto en medio - 1.
- Actualizar el índice medio: Medio = (bajo+alto)/2.
- Fin del ciclo: si el índice bajo es mayor que el índice alto, entonces x no está en la lista y el algoritmo devuelve un error.
- Salida: el índice de x en la lista o mensaje de error.
(iii) Búsqueda en profundidad : Un algoritmo de búsqueda que examina cada rama en la medida de lo posible antes de dar la vuelta.
Las siguientes pautas se aplican a la búsqueda en profundidad:
- seleccione el vértice o nodo inicial del gráfico para comenzar.
- Agregue una marca de visita al primer vértice.
- Coloque directamente el vértice inicial en una pila.
- Hasta que la pila esté vacía, repita las siguientes acciones: -
- Elimina el vértice superior de la pila.
- Marque como visitado e inserte en la pila cada vecino no visitado del vértice emergente.
- Continúe este proceso hasta que se hayan visitado todos los vértices del gráfico.
- Una vez que se han visitado todos los vértices, el algoritmo se completa y se realiza una búsqueda en profundidad en el gráfico.
(iv) Búsqueda en amplitud : Un algoritmo de búsqueda que explora todos los vecinos de un nodo antes de pasar al siguiente nivel.
El algoritmo para la búsqueda en amplitud es: -
- Comience con el nodo raíz o el estado inicial.
- Agregue el nodo raíz a una cola.
- Compruebe si la cola está vacía; En caso afirmativo, finalice el algoritmo.
- Tome el primer elemento de la cola y márquelo como visitado.
- Amplíe el nodo contemporáneo agregando todos sus vecinos no visitados a la cola.
- Hasta que se ubique el nodo deseado o la cola esté vacía, repita los pasos 3 a 5.
- Devuelve la ruta desde el estado preliminar al estado objetivo si se encuentra el nodo objetivo.
- Termine el conjunto de reglas e informe que el estado objetivo no se identificó si la cola está vacía.
(v) Búsqueda por interpolación : Un algoritmo de búsqueda que utiliza los valores de los elementos buscados para estimar la posición en el índice.
Es importante que la matriz esté distribuida uniformemente. De lo contrario, es un algoritmo.
Funciona como se esperaba.
El algoritmo se puede resumir de la siguiente manera.
- Obtenga la lista de entrada y el valor clave para buscar.
- Inicialice las variables inferior y superior en el primer y último índice de la lista.
- Si el valor inferior es menor o igual que el valor superior, entonces:-
- Calcule la ubicación estimada usando la siguiente fórmula:
pos = bajo + ((alto - bajo) / (arr[alto] - arr[bajo])) * (x - arr[bajo]). - Devuelve la posición si el valor de posición estimado es un valor clave.
- c) Si el valor de posición estimado es menor que el valor clave, configúrelo más bajo.
Posición + 1. - d) Si el valor de la posición estimada es mayor que el valor establecido por clave, posición - 1 arriba.
- Calcule la ubicación estimada usando la siguiente fórmula:
- Si no se encuentra el valor clave, devuelve -1 para indicar que el valor no está en la lista.
(vi) Saltar búsqueda : método de búsqueda que recorre la lista en pasos de longitud constante hasta que encuentra el elemento relevante o determina que ya no está presente.
El algoritmo de búsqueda de salto es el siguiente:
- Primero, establezca el tamaño del salto en la raíz cuadrada del número de elementos de la matriz.
- Establece una variable denominada 'actual' en el primer elemento de la matriz.
- Itera sobre la matriz saltando por tamaño de salto mientras incrementa una variable llamada 'salto'.
- Continúe con el siguiente salto si el elemento existente es más pequeño que el elemento deseado.
- Si el elemento actual es más grande que el elemento de destino, realice una búsqueda lineal entre el elemento actual y el elemento de salto anterior para encontrar el elemento de destino.
- Si el elemento de destino no se encuentra en la matriz, devuelve -1 para indicar que no está en la matriz.
- Si se encuentra el elemento, devuelve el índice del elemento en la matriz.
3. Algoritmos gráficos
El soporte de C para punteros y estructuras de datos como matrices y listas enlazadas lo hace adecuado para implementar algoritmos que manipulen gráficos, como encontrar el camino más corto entre dos nodos en un gráfico.
Existen diferentes tipos de algoritmos gráficos.
ellos son:-
4. Algoritmos criptográficos
C admite operaciones de bajo nivel y manipulación eficiente de datos, lo que lo hace ideal para implementar algoritmos utilizados en criptografía, como algoritmos de cifrado y descifrado de datos.
Existen diferentes tipos de algoritmos de cifrado.
Ellos son:-
Ventajas del algoritmo
Los algoritmos tienen muchas ventajas.
ellos son:-
Desventajas del algoritmo.
Los algoritmos son muy útiles para la programación, pero tienen desventajas.
np.clip
ellos son:-