Está en la página 1de 3

Análisis de eficiencia de

algoritmos
Un algoritmo es una secuencia de pasos a seguir para dar solución a un problema, y pueden
existir “n” cantidades de algoritmos capaces de resolver un solo problema, donde siempre
se tiene que implementar la mejor opción. ¿Cómo se define si un algoritmo es superior a
otro?
Un ejemplo de un algoritmo es realizar la sumatoria de 1 a n números, donde pondremos
como ejemplo sumar de 1 a 100, para el cual tomaremos 2 formas de resolverlo y dar a
comprender la respuesta de la pregunta anteriormente planteada. La primera manera de
resolverlo es mediante la sumatoria de cada uno de los elementos, es decir,
1+2+3+4+5+6+…+100=5050, sin embargo, realizar este procedimiento es demasiado largo
y demora mucho tiempo hacer el cálculo, mientras que con la segunda manera que fue
propuesta por Friedrich Gauss puede resolver este mismo problema en cuestión de
segundos.
La ecuación propuesta por este matemático es la siguiente, si tenemos que realizar la suma
de 1 a 100, existen 50 pares capaces de sumar 101, 100+1=101, 99+2=101, ya que hay
𝑛𝑛(𝑛𝑛+1)
n/2 pares en la suma de (n+1), finalmente expreso la ecuación de la siguiente manera .
2
Aquí podemos observar que al aplicar esta ecuación el tiempo que tarda en resolverse el
problema es mínimo a comparación de la primera forma.
Por lo tanto, algo que define que un algoritmo es superior a otro será el tiempo de ejecución
en dar una solución al problema.
1. Medición de la eficiencia
Un algoritmo tiene 2 cosas a considerar cuando se busca implementar, y es el tiempo de
ejecución y el espacio de memoria, donde:

• Tiempo de ejecución: Es el tiempo que un algoritmo tarda en solucionar un


problema.
• Espacio de memoria: Es la cantidad de almacenamiento que consume un
algoritmo en la computadora.
Una instancia son todos los elementos pertenecientes al algoritmo en su dominio de
definición. Donde este puede ser finito o infinito. Para considerar finito la instancia de un
algoritmo sucede cuando el usuario delimita la cantidad de datos que se tomaran en cuenta
para resolver el problema, en caso contrario la instancia será infinita. Para considerar que
el algoritmo propuesto es correcto deberá de cumplir con todas las instancias propuestas.
Si el algoritmo pide solucionar un pequeño numero de instancias se puede implementar el
algoritmo mas sencillo. Aunque al incrementar el numero de instancias se debe de analizar
cuidadosamente que algoritmo se deberá implementar.
1.1 Tiempo de ejecución
El tiempo de ejecución se define como el tiempo que tarda un algoritmo en resolver
un problema, y es considerada la característica mas importante para seleccionar un
algoritmo. Existen 2 tipos de enfoque.

• Enfoque empírico: Consiste en programar un algoritmo en un lenguaje


de programación y realizar numerosas pruebas con valores diferentes de
instancia, donde el algoritmo con los mejores resultados se implementará
para resolver el problema propuesto.
• Enfoque teórico: Consiste en resolver de manera matemática, cuantos
recursos consume la computadora para resolver el problema, tomando
en cuenta el tiempo de ejecución como la cantidad de operaciones
elementales que realizara.
o Operaciones elementales: Son cualquier operación que toma un
tiempo constante en resolverse, como la suma, resta, etc.
El orden de complejidad permite estimar cual es la eficiencia de un algoritmo, donde te
revela la cantidad de recursos y cantidad de tiempo que tarda la computadora en resolver
el problema.
1.2 Tiempo Constante O(1)
Los algoritmos con tiempo constante, siempre tendrán ese tiempo sin importar la
cantidad de operaciones elementales que resuelva o el tamaño de instancia de
entrada. Si tomamos el ejemplo anterior de la sumatoria de 1 a n con la ecuación de
Gauss, podemos observar que su tiempo es constante, ya que para resolver este
problema tiene que realizar una suma, multiplicación y una división.
1.3 Tiempo lineal O(n)
Para explicar el tiempo lineal de un algoritmo podemos tomar la primera forma de
solución para el ejemplo de la sumatoria de 1 a n, donde se tiene que realizar la
suma de cada uno de los elementos y si aumentamos cada vez mas a “n” entonces
el tiempo que tardara el algoritmo en tener una respuesta incrementara.
1.3.1 Búsqueda lineal
Este algoritmo es utilizado para encontrar un elemento en especifico de una lista, el
cual seguirá ejecutándose hasta encontrar dicho elemento. El cual es empleado
debido a su simplicidad para encontrar un elemento, pero la desventaja de este
algoritmo es que el proceso es lento para la computadora, ya que su tiempo de
ejecución es demasiado alto al tener una lista de elementos muy grande.
1.4 Tiempo polinómico O(n^c)
Los algoritmos con tiempo algorítmico, son de los más utilizados ya que al contrario
de los que tienen un tiempo exponencial, o factorial, los cuales se vuelven ineficaces
al incrementar “n”, para el tiempo polinómico, si “c” toma un valor numérico por
ejemplo 3 se tomara como un tiempo cubico.
1.4.1 Ordenamiento por inserción
Los algoritmos para el reordenamiento de datos, son utilizados para organizar la
información, ya que al tener estos datos de manera desordenada se vuelve complejo
encontrar lo que el usuario desea. Este tipo de algoritmos de ordenamiento sirven
para comprender como funcionan otros tipos de algoritmos también utilizados para
ordenar la información.
Los pasos para realizar este tipo de ordenamientos, es tomar el primer elemento y
colocarlo en un nuevo conjunto y posteriormente tomar el próximo elemento y
colocarlo en el orden correcto, y repetir el proceso hasta que no queden elementos
en el primer conjunto.
1.5 Tiempo logarítmico (log n)
Los algoritmos logarítmicos, tienen un tiempo que crecen lentamente conforme se
incrementa n y son inversos al tiempo exponencial. Estos algoritmos al tener un
tiempo cercano al constante son más utilizados.
1.5.1 Búsqueda binaria
Estos algoritmos de búsqueda tienen como condición inicial que los datos se
encuentren previamente organizados, y sirven para comparar la búsqueda de un
elemento en especial con otro elemento que se ubica a la mitad de la lista. Este tipo
de algoritmo responde a un tiempo logarítmico.
1.5.2 Quicksort
Es un tipo de algoritmo de ordenamiento donde este permite utilizar mayor cantidad
de datos, que el algoritmo por inserción.
El funcionamiento de este algoritmo es tomar un elemento y ese mismo ocuparlo
como comparación entre el resto de los elementos restantes. Dividirlos en 2 grupos
y colocarlos a la izquierda o derecha del primer elemento que se elige como
comparador, hasta tener clasificados todos los elementos. En caso de que los
elementos no se ordenen en el primer intento, simplemente se debe repetir el
ordenamiento con los elementos restantes moviéndolos a su posición.

También podría gustarte