Análisis de complejidad y rendimiento algorítmico de estructuras programáticas orientadas a la optimi- zación del data mining
Complexity and algorithmic
performance analysis of programmatic structures aimed at data mining op- timization
David Galarza G.1 Carlos Tamayo-Ruiz 1,2 , Bryan Ortiz 1, Cristian Sánchez1.
1 Instituto Tecnológico Superior Quito Metropolitano. Carán N3-195 y Calle B (Nueva Tola 2) Quito, Ecuador., dgalarza@itsqmet.edu.ec, ctamayo@itsqmet.edu.ec, bortizs@itsqmet.edu.ec, cisanchez@itsqmet.edu.ec
2 Universidad Politécnica Salesiana del Ecuador, C. Vieja 12-30 y, Cuenca 010105, ctamayo@est.ups.edu.ec
ÉLITE 2020, VOL. (2). NÚM. (2)
ISSN: 2600-5875
Recibido: 26/05/2020 Revisado: 08/07/2020 Aceptado: 09/08/2020 Publicado: 10/09/2020
El presente articulo tiene el objetivo de realizar un análisis de complejidad y rendimiento a tres algoritmos de búsqueda: Burbu- ja, Burbuja mejorada y un algoritmo propuesto. Las variables me- dibles que servirán de indicadores serán:
· Para complejidad algorítmica: número de líneas de código, instancia y declaración de variables, implementación de es- tructuras de control y varianzas de declaración de variables dentro de las comparaciones en estructuras de control
· Para rendimiento algorítmico: tiempo que tarda el método programático en ordenar un arreglo de posiciones similares, utilizando el mismo compilador, así como el mismo IDE.
Los resultados que entregue el análisis de complejidad y rendi- miento algorítmico servirán para esquematizar la aplicabilidad y usabilidad de los algoritmos en situaciones puntuales con el fin de asegurar la transacción eficiente de la información a niveles ar- quitectónicos como en capas de controladores y secciones hibri- das.
Palabras clave: rendimiento, funcionalidad, algoritmo, ordena- miento, búsqueda.
ABSTRACT:This article aims to perform a complexity and performance analysis on three search algo- rithms: Bubble, Enhanced Bubble, and a propo- sed algorithm. The measurable variables that will serve as indicators will be:
· For algorithmic complexity: number of lines of code, instance and declaration of variables, implementation of control struc- tures and variance of declaration of varia- bles within comparisons in control structu- res
· For algorithmic performance: time it takes for the programmatic method to sort an array of similar positions, using the same compiler, as well as the same IDE.
The results delivered by the algorithmic perfor- mance and complexity analysis will serve to outline the applicability and usability of the al- gorithms in specific situations to ensure the effi- cient transaction of information at architectural levels such as controller layers and hybrid sec- tions.
Keywords: performance, functionality, algo- rithm, ordering, search.
Un algoritmo está estructuralmente diseñado para cumplir con una función en específico, teniendo entras, procesamiento y salidas como elementos necesarios y fundamentales para su ejecución. Para el presente estudio se procederá a evaluar el rendimiento y complejidad de tres algoritmos de ordenamiento, los cuales son:
· Burbuja
· Burbuja mejorada
· Algoritmo propuesto
Para los algoritmos mencionados se implementa- rá el seudocódigo genérico y base que es de co- nocimiento de la comunidad de desarrolladores, por lo que, únicamente ordenara números enteros.
Este estudio de rendimiento y complejidad algo- rítmica se lo realizará a cada algoritmo versus los restantes. Se utilizará el mismo IDE de desarrollo y el mismo compilador para garantizar la transpa- rencia del estudio.
Conceptos:
Arrancamos esta sección de conceptos definiendo los algoritmos que están presentes en este trabajo de investigación, los cuales son:
Es un procedimiento donde el algoritmo busca recopilar los datos y procede a ordenarlos si- guiendo un patrón específico -indicado al inicio-.
La ordenación, también conocida como clasifica- ción, es el proceso de organizar un conjunto de datos en algún orden y/o secuencia específica, tal como sucede en el creciente- decreciente para datos numéricos o el orden alfabético para datos
numéricos o el orden alfabético para datos compuestos por caracteres. “Los algoritmos de ordenación permutan los elementos del conjunto de datos hasta conseguir dicho or- den. Para ello se basan en dos operaciones básicas: la comparación y el intercam- bio” (Universidad CEU San Pablo, 2012, p. 15).
Este procedimiento busca recorrer todo el arreglo, generalmente del número mayor y menor o el índice de un determinado elemen- to.
La búsqueda del elemento dentro de un arre- glo es una de las operaciones más importantes en el procesamiento de la información, y a su vez, permite la recuperación de datos previa- mente almacenados. “El tipo de búsqueda se puede clasificar como interna o externa según el lugar en el que esté almacenada la informa- ción, tanto en memoria como dispositivos ex- ternos” (Díaz, 2006, párr. 2).
La sociedad como tal tiene entre sus funciones diarias muchas actividades que involucran la manipulación de datos, sin que se esté con- siente o no de que dicho procesamiento -de datos- es parte de un algoritmo, el mismo que busca ordenar de manera específica los reque- rimientos de información. Las empresas en su día a día manejan códigos con el objetivo de conseguir una entrega de información eficien- te hacia el usuario final; las facturas de consu- mo diario se ordenan por fecha para la corres- pondiente verificación de venta, las bases de
de datos muchas veces se ordenan de forma alfa- bética con el fin de encontrar fácilmente la infor- mación deseada. Por estas y más razones, una de las tareas más comunes de un computador es la ordenación en el procesamiento de datos.
Los diferentes métodos tanto de ordenación co- mo de búsqueda son desde un punto de vista teó- rico muy interesantes, pero para el patrón de vida diario es mucho más práctico. Para esto, a conti- nuación, veremos los diferentes algoritmos que existen para el ordenamiento y la búsqueda, los mismos reciben como argumento “un arreglo”, el cual pasa elementos y a su vez un entero, (este último representa la cantidad de elementos a bus- car y ordenar).
Existen diferentes algoritmos de ordenamiento elementales o básicos cuyos detalles de imple- mentación se pueden encontrar en diferentes li- bros algorítmicos. Los algoritmos presentan dife- rencias entre ellos que los convierten en más o menos eficientes y prácticos según sea la rapidez y eficiencia demostrada por cada uno de ellos.
Los algoritmos básicos de ordenamiento más simples y clásicos son:
· Ordenamiento por inserción.
Los métodos de ordenamiento más recomenda- dos son el de selección y el de inserción. Aunque se estudia el método de burbuja por ser el más sencillo al inicio de ciclo de formación para un programador, este es considerado como el más ineficiente; por esta causa no se recomienda su uso, pero si conocer su técnica.
El algoritmo de burbuja es uno de los métodos de ordenación más conocidos y uno de los pri- meros que aprenden los programadores.
Su ejecución comprende en comparar pares de elementos adyacentes en un arreglo y si están desordenados intercambiarlos hasta que estén todos ordenados. Esto funciona al revisar cada elemento del arreglo con el siguiente, para esto es necesario revisar varias veces todo el arreglo hasta que no existan más intercambios o lo que es lo mismo que el arreglo ya esté ordenado.
El algoritmo de burbuja recibe su nombre por la forma en cómo van emergiendo los elementos del arreglo al realizar los intercambios, como si fueran pequeñas “burbujas”.
Consideremos entonces:
Si A es el arreglo a ordenar, se realizan A.length-1 pasadas. Si la variable (i) es la que cuenta el número de pasadas, en cada pasada (i) se comprueban los elementos adyacentes desde el primero hasta A.length-i-1 ya que el resto hasta el final del “array” están ya ordenados. Si los elementos adyacentes están desordenados se intercambian.
El método de ordenación de la burbuja en Java es el siguiente:

Figura 1. Código de Ordenamiento Burbuja para Java.
![]() |
Figura 2. Ejemplo de Ejecución de Ordenamiento por Burbuja.
El algoritmo de ordenamiento por inserción es si- milar al proceso típico de ordenar tarjetas de nom- bres (cartas de una baraja) por orden alfabético. Consiste en insertar un nombre en su posición co- rrecta dentro de una lista que ya está ordenada. Re- quiere O(n^2) operaciones para ordenar una lista de n elementos.
Consiste en N − 1 pasadas. En las pasadas 2 a N se
cumplirá que los elementos de las posiciones 1 a P
están ordenados. En la pasada P movemos el elemento P a su lugar correcto, este lugar es encontrado en las posiciones de los elementos 1 a P.
Los pasos para entenderlo mejor se resumen así:
1. El primer elemento a[0] se considera ordenado; es decir, la lista inicial consta de un elemento.
2. Se inserta a[1] en la posición correcta; delante o detrás de a[0], dependiendo de si es menor o mayor.
3. Por cada bucle o iteración i (desde i=1 hasta n-1) se explora la sublista a[i-1] a
[0] buscando la posición correcta de inserción de a[i]; a la vez, se mueven hacia abajo (a la derecha en la sublista) desde una posición todos los elementos mayores que el elemento a insertar a[i], para dejar vacía esa posición.
4. Insertar el elemento a[i] a la posición correcta.
El método de ordenación de inserción en Java para ordenar un arreglo
es el siguiente:
Figura 3. Código de Ordenamiento Inserción
para Java.
Figura 4. Ejemplo de Ejecución de Ordenamiento por Inserción.
El algoritmo de ordenamiento por selección mejo- ra ligeramente al algoritmo -de ordenamiento- por burbuja, ya que este realiza muchas menos opera- ciones de intercambio, pero cuando se trata de or- denar un arreglo de datos más complejo, la opera- ción de intercambiar es más costosa, en este caso, refiriéndonos a términos de rendimiento en el computador.
Consideremos entonces:
Ordenar un arreglo a[] de enteros en orden as- cendente, es decir, si el -arreglo a[] tiene n ele- mentos, se tratan de ordenar los valores
del arre- glo de modo que a[0] sea
el valor más pequeño, el valor
almacenado en a[1] sea el más pequeño y
así hasta a[n-1] que ha de contener el elemento de mayor valor. El algoritmo se apoya en las pasadas que intercambian el elemento más
pe- queño, luego van en sucesión con
el elemento de la lista a[], el
cual ocupa la posición igual al or- den
de pasada (hay que considerar el índice 0). La
pasada inicial busca el elemento más peque- ño
de la lista y se intercambia con a[0], conside- rado como el primer
elemento de la lista.
Figura 5. Código de Ordenamiento Selección para Java.
Después de terminar esta primera pasada, el frente de la lista está ordenado y el resto de la lista a[1], a[2]...a[n-1] permanece desordenado. La siguiente pasada busca en esta lista desorde- nada y selecciona el elemento más pequeño, el cual se almacena en la posición a[1]. De este modo, los elementos a[0] y a[1] están ordenados y la sublista a[2], a[3]... a[n-1] desordenados; entonces, se selecciona el elemento más peque- ño y se intercambia con a[2].
El proceso continúa hasta realizar n-1 pasadas, en ese momento la lista desordenada se reduce a un elemento (el mayor de la lista) y el “array” completo queda ordenado. Un ejemplo práctico ayudará a la comprensión del algoritmo. El mé- todo de ordenación por selección en
Java es el siguiente:
Figura 6. Ejemplo de Ejecución de Ordena- miento por Selección.
Con el avance de la tecnología y en sí de las computadoras junto con todo su poderoso pro- ceso de cómputo, cada vez es más útil, senci- llo y seguro realizar búsqueda de información a través de nuestras computadoras de escrito- rio, portátiles o incluso nuestros smartphones.
La búsqueda de un elemento dentro de una colección de datos es sin duda algo común en nuestras operaciones diarias, y tal como se menciona al inicio de la presente investiga- ción, este es una de las operaciones más im- portantes en el procesamiento de información.
Los algoritmos de búsqueda que encontramos hoy en día son:
· Búsqueda Binaria.
Los algoritmos de búsqueda tienen dos
finalidades:
Con el avance de la tecnología y en sí de las computadoras junto con todo su poderoso pro- ceso de cómputo, cada vez es más útil, sencillo
y seguro realizar
búsqueda de información a través de nuestras
computadoras de escritorio, portátiles
o incluso nuestros smartphones.
La búsqueda de un elemento dentro de una co- lección de datos es sin duda algo común en nuestras operaciones diarias, y tal como se menciona al inicio de la presente investigación, este es una de las operaciones más importantes en el procesamiento de información.
Los algoritmos de búsqueda que encontramos hoy en día son:
· Búsqueda Binaria.
Los algoritmos de búsqueda tienen dos finalidades:
Determinar si el elemento buscado se encuentra en el conjunto en el que se busca.
Si el elemento está en el conjunto, hallar la po- sición en la que se encuentra.
Este es el método de búsqueda más lento, pero si la información se encuentra completamente desordenada es el único que podrá ayudar a en- contrar el dato que se busca. Este algoritmo compara uno a uno los elementos del arreglo hasta recorrerlo por completo indicando si el número buscado existe. En este caso no se orde- nará la lista de elementos a diferencia de otros algoritmos.
Su implementación es la siguiente:
Figura 7. Algoritmo de Búsqueda Lineal.
Este algoritmo permite buscar de una manera más eficiente un dato dentro de un arreglo. Para hacer esto se determina el elemento
central del arreglo y se compara con
el valor que se está buscando; si
coincide termina la búsqueda y en caso
de no ser así se determina si el dato es ma-
yor o menor que el elemento central, de esta for- ma se elimina una mitad del arreglo junto con el elemento central para repetir el proceso
hasta encontrar o tener sólo un elemento en el arreglo.
Figura 8. Algoritmo de Búsqueda Binaria.
En base a esto determinamos lo siguiente:
· Si el elemento buscado es menor que el ele- mento medio, entonces sabemos que el ele- mento está en la mitad inferior de la tabla.
· Si es mayor es porque el elemento está en la mitad superior.
· Si es igual se finaliza con éxito la búsqueda
ya que se ha encontrado el elemento.
Se puede aplicar tanto a datos en listas lineales (Vectores, Matrices, etc.) como en árboles bina- rios de búsqueda. Los prerrequisitos principales para la búsqueda binaria son:
· La lista debe estar ordenada en un orden específico de acuerdo al valor de la llave.
· Debe conocerse el número de registros. Su implementación es la siguiente:
registros “vistas”, emplean un proceso de bús- queda que implica cierto tiempo y esfuerzo. El método de transformación de claves nos per- mite encontrar directamente el registro busca- do en tablas o archivos que no se encuentran necesariamente ordenados -en un tiempo inde- pendiente de la cantidad de datos-.
Mediante cada elemento del arreglo índice se asocian grupos de elementos del arreglo ini- cial. Los elementos en el índice y en el
arreglo deben estar ordenados.
Figura 9. Algoritmo de Búsqueda Indexada.
El método consta de dos pasos: Primero, buscar en el arreglo índice el intervalo correspondiente al elemento buscado y restringir la búsqueda a los elementos del intervalo que se localizó pre- viamente. La ventaja es que la búsqueda se rea- liza en el arreglo de índices y no en el arreglo de elementos. Cuando se ha encontrado el intervalo correcto se hace una segunda búsqueda en una parte reducida del arreglo. Estas dos búsquedas pueden ser secuenciales o binarias y el tiempo de ejecución dependerá del tipo de búsqueda utilizado en cada uno de los arreglos.
Algoritmo que genera un índice basado en un archivo de texto y que busca los registros que pide el usuario en él.
Alcance del algoritmo propuesto
Dentro del criterio o performance algorítmicos, la propuesta funciona con n elementos dentro del arreglo que se desea ordenar entre números positi- vos, negativos -incluido el cero-; sin embargo, su alcance, en vista justamente de su proceso, busca ordenar la mitad del arreglo en mención, ya que este algoritmo divide en la mitad, desde un inicio, la longitud del arreglo para poder iniciar el orde- namiento.
Esta propuesta está pensada para arreglos que abarcan muchos
números y/o posiciones, dentro de los cuales
se busca filtrar el orden entre núme- ros
mayores o menores sin la necesidad de orde- nar
todo el arreglo, sea esta por razones de tiempo o de
Figura 10. Algoritmo de Ordenamiento: Burbuja Mejorado.
recursos disponibles para tal efecto. La propues- ta algorítmica puede ser aplicada para escenarios donde solo se necesiten filtrar los primeros 20 datos de un lote de números por -poner un ejem- plo-.
Este apartado de complejidad es básicamente el mismo, pues ambos algoritmos de ordenamiento se escriben en la misma cantidad de líneas, salvo que el método de ordenamiento de burbuja mejo- rada considera dentro del primer bucle “for” res- tar la variante del bucle “for” al que pertenece, esto se evidencia en la siguiente imagen:
Entendiendo el algoritmo se expone lo si- guiente:
El ordenamiento burbuja consiste en un algo- ritmo que permite ordenar de manera ascen- dente o descendente una serie de números, de tal manera que realiza múltiples pasadas com- parando los ítems y va intercambiando los que no están en orden.
Estos ítems pueden ser almacenados en un arreglo; en este caso, burbuja iniciará en la posición 0 e irá incrementando hasta llegar a la longitud total del arreglo. Lo que realizará en su proceso es comparar el ítem en la posi- ción n con n+1 siendo n=0 e ir ordenando de acuerdo con lo que se especifique, así este al- goritmo compara los ítems seleccionados y lo que hace es intercambiar esos números en su posición según la especificación que se le ha- ya emitido, sea de mayor a menor o viceversa.
Si hay n ítems en la lista, entonces hay n−1 parejas de ítems que deben compararse en la primera pasada. Al comienzo de la segunda pasada el valor más grande ya está en su lu- gar, aquí quedan n−1 ítems por ordenar, lo que significa que habrá n−2 parejas.
En cuanto al rendimiento “burbuja”, se estima un tiempo de 0.30 milisegundos para ejecutar y resolver el arreglo. A continuación, se lo representa en el siguiente vector -como ejem- plo-:
Burbuja --> arreglo de 10 posiciones, corre 90 veces hasta terminar de ordenar el vector, mientras que el algoritmo propuesto corre 35
Complejidad.
Según las consideraciones realizadas, la com- plejidad del algoritmo propuesto se basa ínte- gramente en el algoritmo de “burbuja mejora- da”; lo que nos indica que en teoría el proceso que realiza el algoritmo es similar al de orde- namiento, considerando que al inicio del algo- ritmo propuesto en el primer “for”, existe la división de la longitud del arreglo para luego continuar con el proceso de ordenamiento, sea este en forma descendente o ascendente, se- gún se requiera.
La hipótesis inicial analizada en este algorit- mo propuesto señala que el vector que entre- gue el usuario lo va a ordenar. Hay que consi- derar que la mitad de este va a estar ordenada de forma íntegra y la otra mitad va a depender de si han estado o no en orden las diferentes posiciones del arreglo original, para que de forma gráfica se evidencie el ordenamiento parcial de esta segunda mitad en el arreglo final (ordenado). Todo este proceso mediante el algoritmo propuesto.
Este apartado nos muestra según las pruebas efectuadas y que se verá evidenciado más ade- lante en el apartado de los resultados, cuya comparación con el algoritmo “burbuja mejo- rada” nos indica que este tiene un porcentaje del 22.22 -más rápido- en ordenar el vector dado.
Tomando en cuenta que la propuesta algorít- mica que estamos efectuando en este estudio
contempla el ordenar únicamente la mitad del arre- glo solicitado por el usuario final.
Tomando el ejemplo del vector de pruebas:
Burbuja mejorada --> arreglo de 10 posiciones, co- rre 45 veces hasta ordenar el vector, mientras que el algoritmo propuesto corre 35 veces en arreglar el mismo vector. Cabe indicar que según las pruebas que serán evidenciadas en el apartado de los resulta- dos, habrá arreglos que se ordenen de forma íntegra todas sus posiciones. Esto, como se ha mencionado anteriormente, va a depender estrictamente de que tan ordenadas hayan estado dichas posiciones en el arreglo original antes del proceso de ordenamiento algorítmico, ya que de forma gráfica se verán que hay arreglos que no se ordenan en su totalidad. Es- to, justamente por el hecho de que esta propuesta algorítmica busca ordenar –únicamente- el 100% de la mitad del arreglo solicitado.
Los resultados obtenidos después de un análisis orientado al rendimiento y complejidad algorítmica entre los algoritmos de burbuja, burbuja mejorada y el algoritmo propuesto se presentan a continuación:
|
Algoritmo |
Complejidad |
|
Burbuja |
Líneas de código predefinidas. |
|
Burbuja mejorada |
Mismas líneas de código. Ajuste de pasadas en n/2 respecto a Burbuja |
|
Algoritmo propuesto |
Mismas líneas de có- digo. Ajuste de pasa- das en n/2 y de comparaciones en n/2 respecto a Burbuja. |
Tabla 5: Complejidad vs algoritmos. (Elaboración propia)
De acuerdo con lo expuesto en la tabla anterior, se demuestra que burbuja mantiene una comple- jidad algorítmica adecuada referente a burbuja mejorada, así como también al algoritmo pro- puesto.
Ahora, se presenta la tabla de resultados resumi- da para el análisis de los algoritmos versus el rendimiento.
![]() |
Tabla 6: Rendimiento vs algoritmos.
(Elaboración propia)
De acuerdo con lo presentado en la tabla ante- rior, el algoritmo propuesto tiene un rendimiento superior a los algoritmos de ordenamiento: bur- buja y burbuja mejorada.
La creación, ejecución y estudio de los algo- ritmos descritos, a nivel de complejidad y ren- dimiento, dio como resultado las siguientes conclusiones:
Si bien el algoritmo propuesto tiene una gran ventaja en rendimiento, únicamente funciona al 100% con una cantidad controlada de ele- mentos en el arreglo que será ordenado, si es que esa cantidad sobrepasa del control, el or- denamiento utilizando este algoritmo seria erróneo.
La complejidad algorítmica no genera una ventaja significativa desde su interpretación semántica, sin embargo, esta complejidad se ve reflejada en el rendimiento.
Se puede concluir que la complejidad algorít- mica sirve de insumo positivo para que el ren- dimiento sea mucho más eficiente.
El rendimiento de la ejecución de los algorit- mos de ordenamiento será más significativo con arreglos de tamaños mucho mas grandes o, estos mismos ejecutados en arreglos deno- minados multidimensionales.
· Baase, S., & Gelder, A. (2000). "Computer algorithms." Addison Wes- ley Longman.
· CEU San Pablo, U. (2012). "Algoritmos de ordenación y búsqueda". CEU Uni- versidad San Pablo. Retrieved from http://biolab.uspceu.com/aotero/ recursos/doc encia/TEMA%208.pdf
· Cormen, T., Leiserson, C., Rivest, R., & Stein, C.(2007). "Introduction to algo- rithms." MITPress.
· De Giusti, A. (2001). "Algoritmos, da- tos y programas." Pearson Educación, S.A
· Díaz, N. (2006). "BÚSQUEDA DE VECTO- RES".
· FIET - UNICAUCA. Retrieved from http://artemisa.unicauca.edu.co/~nediaz/ ED DI/cap02.htm
· Joyanes Aguilar, L. (2003). "Programación en C++." McGraw-Hill Interamericana de España.
· Knuth, D. (2014). "The art of computer programming." Addison-Wesley.
· Lage, F., Cataldi, Z., & Salgueiro, F. (2008). "Fundamentos de algoritmos y pro- gramación." Nueva librería.
· Pariser, E. (2017). "El filtro burbuja". Tau- rus.
· Pharr, M., Wenzel, J., & Humphreys, G. (2017).
· "Physically based rendering." Morgan Kaufmann.
· Weiss, M. (1995). "Estructuras de datos y algoritmos." Addison-Wesley Iberoameri- cana.