• No se han encontrado resultados

UNIVERSIDAD AUTONOMA DE OAXACA

N/A
N/A
Protected

Academic year: 2022

Share "UNIVERSIDAD AUTONOMA DE OAXACA"

Copied!
6
0
0

Texto completo

(1)

investigación de la importancia y eficiencia del uso de los diferentes algoritmos de ordenamiento y búsqueda I. Introducción

Un algoritmo es un procedimiento computacional el cual toma ciertos valores de entrada, conocidos como​inputs​, y realiza ciertos procesos o cálculos dependiendo la ocasión para convertir estos valores de entrada a una salida, lo que también se le conoce como ​output​. Básicamente un algoritmo es una secuencia computacional que transforma un input en un output. El algoritmo va a describir el procedimiento específico computacional para que haya una relación entre los datos de entrada y salida de datos.

Por ejemplo: si queremos ordenar unos cuantos números de menor a mayor podríamos utilizar varias técnicas para ordenarlos, podremos recorrer todo el arreglo para ir buscando , entre otras formas pero estas puede que sirvan sólo para un problema con 10 números. ¿Qué pasa si el programa requiere que ordenes de menor a mayor una lista de 400,000 números o algún número muy grande?, el tiempo que este programa computacional se tomaría para resolver este problema tal vez tarde demasiado tiempo y hasta consuma mucha memoria. Ahí es donde entran las estructuras de datos y algoritmos de búsqueda y ordenamiento.

(2)

II. Terminología importante

Estructuras de datos​: Una estructura de datos es una manera de guardar y organizar datos con el objetivo de facilitar el acceso a estos datos y realizar modificaciones. ​[1]

Algoritmo:​ Secuencia de pasos a seguir para resolver un problema computacional.

Algoritmos de búsqueda:​ Diferentes tipos de algoritmos de búsqueda, donde la diferencia de estos es la complejidad, y por ende el tiempo de ejecución.

III. Algoritmos de búsqueda y ordenamiento

Para lograr desarrollar un programa que realice cierta acción “compleja”, tenemos que construir un algoritmo eficiente y que convenga usar dependiendo que quiere realizar el programa, hay diferentes tipos de algoritmos que pueden realizar la misma acción, algunos de estos algoritmos son mejorar para ciertos casos que otros, pero antes de pasar a describir cada uno de estos definiremos 2 conceptos para un mejor entendimiento de cada uno de los algoritmos:

● Sorting​: Ordenar una lista de valores

● Searching​: Encontrar la posición de un valor en una lista.

Para comenzar a saber cuál algoritmo usar se tiene que tener muy claro que es lo que el programa va a realizar o qué tareas va a realizar a lo largo de su ejecución. Esto nos permitirá asegurarnos de comparar cuál algoritmo nos servirá para la ocasión. A pesar de que hay varias maneras de comparar estos algoritmos tenemos 2 los cuales son no los más importantes pero sí son importantes en el procesamiento de información o de datos:

● Time complexity​: El tiempo de complejidad del algoritmo es como el número de pasos requeridos dependerá en el tamaño de los valores de entrada. ​[2]

● Space complexity​: La complejidad del espacio es como la cantidad de memoria extra o almacenamiento requerido dependerá del tamaño de los valores de entrada. ​[2]

I.I Algoritmos de búsqueda y ordenamiento

Los algoritmos de búsqueda y ordenamiento nos permite ordenar información dependiendo de ciertos criterios o como nosotros queramos ordenarlos, claro siempre siguiendo un criterio de ordenamiento.

Esto para poder manipular los datos en algún momento de la ejecución del programa. Los típicos problemas de ordenamiento empiezan así:

Given a list of values and a function that compares two values, order the values in the list from smallest to largest.

(3)

En esta investigación solo se tomarán en cuenta estos diferentes algoritmos de búsqueda y ordenamiento:

● Linear search​: La búsqueda lineal es el método de búsqueda más básico. Implica verificar cada elemento de la lista por turno, hasta que se encuentre el elemento deseado.

● Intercambio​: La búsqueda por intercambio se basa en la lectura sucesiva de la lista a ordenar, comparando al elemento inferior de la lista con los restantes y efectuando el ​intercambio de posiciones cuando el ​orden​ resultante de la comparación no sea el correcto..

● Bubble Sort​: bubble sort es un algoritmo de clasificación simple que recorre repetidamente la lista, compara elementos adyacentes y los intercambia si están en el orden incorrecto. El paso a través de la lista se repite hasta que se ordena la lista.

● Selection Sort​: Para ordenar una lista se selecciona repetidamente el elemento más pequeño restante y se mueve para el lado más grande de la lista.

● Insertion Sort​: Insertion sort es un algoritmo de clasificación simple que funciona de manera similar a la forma en que clasifican los naipes en sus manos. La matriz se divide virtualmente en una parte ordenada y otra sin clasificar. Los valores de la parte sin clasificar se seleccionan y colocan en la posición correcta en la parte clasificada

● Merge Sort​: Para ordenar una lista con merge sort se fusiona repetidamente subsecciones ordenadas de la lista comenzando por las subsecciones que constan de solo un elemento cada una.

● Quick Sort​: QuickSort es un algoritmo divide y venceras. Selecciona un elemento como pivote y divide la matriz dada alrededor del pivote elegido.

● Binary Search​: La búsqueda binaria es un algoritmo de búsqueda más eficiente que se basa en los elementos de la lista que se ordenan. Aplicamos el mismo proceso de búsqueda a sublistas cada vez más pequeñas de la lista original, comenzando con la lista completa y dividiendo aproximadamente a la mitad el área de búsqueda cada vez.

(4)

Normalmente expresamos el costo de un algoritmo en función del número N de elementos sobre los que actúa el algoritmo. La función nos da una estimación del número de operaciones que tenemos que realizar para usar el algoritmo en N elementos; por lo tanto, nos permite predecir cómo aumentará el número de operaciones requeridas a medida que aumenta N. Usamos una función que es una aproximación de la función exacta; la simplificamos tanto como sea posible, de modo que solo se conserve la información más importante.

Por ejemplo, sabemos que cuando utilizamos la búsqueda lineal en una lista de N elementos, en promedio tendremos que buscar en la mitad de la lista antes de encontrar nuestro elemento, por lo que la cantidad de operaciones que tendremos que realizar es N / 2. . Sin embargo, lo más importante es que el algoritmo escala linealmente: a medida que N aumenta, el costo del algoritmo aumenta en proporción a N, no a N2 o N3. El factor constante de 1/2 es insignificante en comparación con las grandes diferencias de costo entre, por ejemplo, N y N2, por lo que lo dejamos fuera cuando describimos el costo del algoritmo. [3]

Por lo tanto, escribimos el costo del algoritmo de búsqueda lineal como O (N): decimos que el costo es del orden de N, o simplemente del orden N. Llamamos a esta notación notación O grande, porque usa el símbolo O mayúscula (para orden).

Aquí podemos ver la complejidad de algunos de estos:

Fig 1. Complejidad algorítmica y notación Big O.

(5)

Fig 2. Comportamiento de las funciones.

V. Uso de algoritmos en esta entrega

En esta entrega se utilizó el algoritmo ordenamiento merge sort, el cual principalmente tiene una complejidad de de un caso promedio de (n log n)O Orden ‘n’ logaritmo base 2 de ‘n’, donde por su otra parte el peor caso que puede tener es: O(n log n) Orden ‘n’ logaritmo base 2 de ‘n’. Este algoritmo nos ayudó a ordenar los datos de la manera más eficientemente usando también un algoritmo de búsqueda el cual fue la búsqueda binaria teniendo una eficiencia del orden (log 2n)O reduciendo considerablemente el tiempo de búsqueda entre los datos del archivo de texto. El tiempo de ejecución del programa fue de un par de segundos, pero si no hubiéramos escogido los algoritmos de búsqueda y ordenamiento más eficientes para este caso, tal vez el tiempo de ejecución hubiera tardado hasta unos cuantos minutos, claro siempre dependiendo como ya lo mencionamos antes, de el tamaño de la entrada de datos.

El uso de algoritmos de búsqueda y ordenamiento en su buen y eficaz uso nos puede ayudar muchísimo en el tiempo de ejecución y uso de memoria de un programa, ya que gracias a estos algoritmos de búsqueda y ordenamiento podemos tener sistemas informáticos que realicen tareas mucho más complejas a pesar de tener supercomputadoras, ya que de nada sirve tener una supercomputadora sin usar eficazmente toda la memoria y demás que esta te ofrece. Citaré lo que está escrito en el libro de​ Introduction to algorithms de Thomas H. Cormen.

supongamos que las computadoras fueran infinitamente rápidas y la memoria de la computadora estuviera ilimitada. ¿tendrías alguna razón para estudiar algoritmos? la respuesta es sí, si no es por otra razón que la que aún debemos demostrar que su método de solución termina y lo hace con la respuesta correcta

Como ya lo mencionamos anteriormente el uso eficaz de estos algoritmos nos permite que el tiempo de ejecución del programa fuera de segundos, y me imagino por ejemplo cuando un cohete está despegando, tiene que realizar muchísimos cálculos de la mejor manera posible, ya que si hay alguna falla o error, reportarlo al instante y si hay caso de emergencia, expulsar a los astronautas a tiempo, ya que podría suceder que no se usen los algoritmos más eficientes para esa tarea y que el mensaje de alerta aparece muy tarde y eso no es lo que queremos, me fui a un caso muy extremo pero hasta ahí es

(6)

tarea específica.

VI. Referencias

[1] ​

Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). ​Introduction to

Algorithms. Third Edition

​ (3.​

a​

ed.). Massachusetts Institute of Technology.

[2] ​

Sorting, searching and algorithm analysis

​. (s. f.). python-textbook. Recuperado 13 de septiembre de 2020, de

https://python-textbok.readthedocs.io/en/1.0/Sorting_and_Searching_Algorithms.html

[2] ​

Fuentes, C. (2018, 12 septiembre). ​Notación Big O: Guía para Principiantes - Carlos

Fuentes

​. Medium.

https://medium.com/@charlie_fuentes/notacion-big-0-para-principiantes-f9cbb4b6bec8

Referencias

Documento similar

En la base de datos de seguridad combinados de IMFINZI en monoterapia, se produjo insuficiencia suprarrenal inmunomediada en 14 (0,5%) pacientes, incluido Grado 3 en 3

En este ensayo de 24 semanas, las exacerbaciones del asma (definidas por el aumento temporal de la dosis administrada de corticosteroide oral durante un mínimo de 3 días) se

En un estudio clínico en niños y adolescentes de 10-24 años de edad con diabetes mellitus tipo 2, 39 pacientes fueron aleatorizados a dapagliflozina 10 mg y 33 a placebo,

• Descripción de los riesgos importantes de enfermedad pulmonar intersticial/neumonitis asociados al uso de trastuzumab deruxtecán. • Descripción de los principales signos

Debido al riesgo de producir malformaciones congénitas graves, en la Unión Europea se han establecido una serie de requisitos para su prescripción y dispensación con un Plan

Como medida de precaución, puesto que talidomida se encuentra en el semen, todos los pacientes varones deben usar preservativos durante el tratamiento, durante la interrupción

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de