Apuntes DAM
Volver al inicio

Estructuras de datos

Algoritmos6 algoritmos · 12 ejercicios corregidos · código en Java, Python, JavaScript, C# y PHP

Un algoritmo rápido sobre una estructura mal elegida sigue siendo lento. Buscar en una lista es O(n); en una tabla hash, O(1). Sacar el mínimo de un array desordenado es O(n); de un montículo, O(log n). Elegir bien dónde guardas los datos suele importar más que cómo los recorres.

Las colecciones de Java (ArrayList, LinkedList, HashMap, TreeMap, ArrayDeque, PriorityQueue), de Python o de C# son estas estructuras ya programadas. Programarlas una vez a mano es la mejor forma de entender qué coste tiene cada operación y por qué.

Los algoritmos

Cuál elegir

EstructuraInsertarBuscarBorrarEn la biblioteca
Pila (stack)O(1) arribaO(n)O(1) arribaArrayDeque, list, Stack<T>
Cola (queue)O(1) al finalO(n)O(1) al principioArrayDeque, deque, Queue<T>
Lista enlazadaO(1) si tienes el nodoO(n)O(1) si tienes el nodoLinkedList, LinkedList<T>
Tabla hashO(1) de mediaO(1) de mediaO(1) de mediaHashMap, dict, Dictionary<K,V>
Árbol binario de búsquedaO(log n)*O(log n)*O(log n)*TreeMap, SortedDictionary
Montículo y cola de prioridadO(log n)O(1) el mínimoO(log n) el mínimoPriorityQueue, heapq

* Si el árbol está equilibrado; uno degenerado (datos insertados en orden) se comporta como una lista: O(n).

Para practicar más