B2-T3 Tipos abstractos y Estructuras de datos.TAD y Algoritmos Flashcards
¿Qué es una Estructura de datos ?
Una forma de organizar los datos para que puedan usarse de manera eficiente.
Estructuras de datos primitivos
son estructuras de datos básicas proporcionadas por los lenguajes de programación para representar valores únicos: números enteros, números de punto flotante, caracteres y valores booleanos.
Estructuras de datos abstractas
son estructuras de datos de nivel superior que se construyen utilizando tipos de datos primitivos y proporcionan operaciones más complejas y especializadas.
Algoritmo
Un conjunto de instrucciones paso a paso para resolver un problema específico.
Complejidad temporal
Una medida de la cantidad de tiempo que tarda un algoritmo en ejecutarse, dependiendo de la cantidad de datos en los que está trabajando el algoritmo.
Complejidad espacial
Una medida de la cantidad de memoria que utiliza un algoritmo, dependiendo de la cantidad de datos en los que está trabajando el algoritmo.
Big O Notation
Notación matemática que describe el comportamiento límite de una función cuando el argumento tiende hacia un valor particular o infinito. Se utiliza para describir la complejidad temporal de un algoritmo.
Recursión
Una técnica de programación donde una función se llama a sí misma.
Divide y Vencerás
Un método para resolver problemas complejos dividiéndolos en subproblemas más pequeños y manejables, resolviendo los subproblemas y combinando las soluciones. A menudo utiliza las recursividad.
Fuerza Bruta
De manera sencilla y directa, el algoritmo consiste en probar todas las soluciones posibles y luego elegir la mejor.
BubbleSort( Ordenamiento de la burbuja)
Algoritmo estable. Funciona revisando cada elemento de la lista que va a ser ordenada con el siguiente, intercambiándolos de posición si están en el orden equivocado. Revisar varias veces toda la lista hasta que no se necesiten más intercambios.
Complejidad temporal del BubbleSort
O(n²)
CocktailSort (Ordenamiento de la Burbuja bidireccional)
Algoritmo estable. Mejora del BubbleSort. Ordena al mismo tiempo por los dos extremos del vector de manera que tras la primera iteración, tanto el menor como el mayor elemento estarán en sus posiciones finales, reduciendo el número de comparaciones finales.
Complejidad temporal del CocktailSort
O(n²)
Selection Sort (Ordenamiento por selección)
Algoritmo inestable. Revisa cada elemento de la lista hasta encontrar el valor más bajo, lo SELECCIONA y lo mueve el valor más bajo al frente de la parte no ordenada de la lista. Repasa la matriz nuevamente tantas veces como valores haya en la lista.
Complejidad temporal de Selection Sort
O(n²)
Insertion Sort (Ordenamiento por Insercion)
Algoritmo estable. Utiliza una parte de la matriz para contener los valores ordenados y la otra parte de la matriz para contener los valores que aún no están ordenados.
El algoritmo toma un valor a la vez de la parte no ordenada de la matriz y lo coloca en el lugar correcto en la parte ordenada de la matriz, hasta que la matriz esté ordenada.
Complejidad temporal de Insertion Sort
O(n²)
Binary Insertion Sort (Ordenación por inserción binaria)
Mejora del algoritmo de ordenamiento por inserción. Partiendo de una lista ya ordenada( la primera sería el primer elemento de la lista), se van introduciendo por búsquedas binarias elementos a la misma.
Quicksort
Algoritmo inestable. Toma una matriz de valores, elige uno de los valores como elemento ‘pivote’ y mueve los otros valores para que los valores más bajos estén a la izquierda del elemento pivote y los valores más altos a la derecha de él.
Complejidad temporal Quicksort
Promedio: O(n log n),
peor caso: O(n²)
Counting sort (Ordenamiento por cuentas)
Algoritmo estable. No comparativo. Ordena una matriz contando el número de veces que ocurre cada valor. Solo funciona con números enteros no negativos. Counting Sort es rápido cuando el rango de valores posibles k es menor que el número de valores n.
Complejidad temporal Counting sort
O(n+k)
Bucket sort o Bin Sort (Ordenamiento por casilleros)
Algoritmo estable. No comparativo. Distribuye todos los elementos a ordenar entre un número finito de casilleros. Cada casillero solo puede contener los elementos que cumplan unas determinadas condiciones, las cuales deben ser excluyentes entre sí. Luego cada casillero se ordena utilizando otro algoritmo o se llama recursivamente al método, para finalmente devolver los casilleros concatenados por orden.
Complejidad temporal Bucket sort
O(n)
Postman’s sort (algoritmo del cartero)
Variante del Bucket sort utilizada cuando los elementos a ordenar disponen de varias claves y/o subclaves, las cuales se utilizan para hacer varios ordenamientos sucesivos.
Complejidad temporal Postman’s sort
O(cn) siendo c el número de claves que se utilizan para clasificar.
Radix Sort (Ordenamiento Radix)
Algoritmo estable. El algoritmo ordena una matriz por dígitos individuales, comenzando con el dígito menos significativo (el que está más a la derecha).
Utiliza la base creando 10 depósitos (o contenedores) diferentes correspondientes al dígito que está enfocado, luego se vuelven a colocar en la matriz antes de pasar al siguiente dígito.
Es un algoritmo no comparativo que solo funciona con números enteros no negativos.
Complejidad temporal Radix Sort
O(n⋅k)
Cuando un algoritmo es estable?
Es un algoritmo que:
- mantiene el orden de los elementos con el mismo valor antes y después de la clasificación.
- mantiene el orden relativo que tenían originalmente los elementos con claves iguales.
Merge Sort (Ordenamiento por mezcla)
Algoritmo estable. Utiliza la técnica de divide y vencerás. Ordenamiento por mezcla. Ordena una matriz dividiéndola primero en matrices más pequeñas y luego reconstruyendo la matriz de la manera correcta para que esté ordenada.
Complejidad temporal de Merge Sort
O(n log n)
Binary tree sort (Ordenamiento con ábol binario)
El ordenamiento con árbol binario ordena sus elementos haciendo uso de un árbol binario de búsqueda. Se basa en ir construyendo poco a poco el árbol binario introduciendo cada uno de los elementos, los cuales quedarán ya ordenados. Después, se obtiene la lista de los elementos ordenados recorriendo el árbol en inorden.
Complejidad temporal Binary tree sort
O(n log n)
Algoritmo de búsqueda lineal
El algoritmo de búsqueda lineal busca en una matriz y devuelve el índice del valor que busca. Si llega al final de la matriz y no encuentra el valor, devuelve -1 para indicar que no se encontró el valor.