Píldora TAI LXXXVII; Guía de Complejidad Algorítmica y Búsqueda Eficiente

🧠 Guía Visual y Didáctica: Búsqueda, Ordenación y Complejidad Algorítmica

📌 ¿Qué es la Complejidad Algorítmica?

La complejidad algorítmica mide los recursos necesarios (tiempo o espacio) para que un algoritmo resuelva un problema. Se expresa mediante notación Big O (O grande), donde:

  • O(1) → Constante: No cambia con el tamaño del dato.
  • O(n) → Lineal: Crece con el número de elementos.
  • O(log n) → Logarítmica: Muy eficiente en estructuras ordenadas.
  • O(n²) → Cuadrática: Poco eficiente en grandes volúmenes.

🔎 Tipos de Complejidad:

  • Logarítmica: Mejora con estructuras ordenadas.
  • Lineal: Cada dato se procesa una vez.
  • Cuadrática: Se repiten operaciones anidadas (dobles bucles).
  • Polinómica / Exponencial: Poco práctica en grandes conjuntos.

🔍 Algoritmos de Búsqueda

🟨 Secuencial

  • Simple pero lenta.
  • Recorre todos los elementos uno a uno hasta encontrar el buscado.
  • Coste medio: O(n)
  • Variantes: con y sin centinela.

🟩 Binaria o Dicotómica

  • Mucho más eficiente.
  • Requiere estructura ordenada y acceso aleatorio.
  • Divide el array en mitades y descarta la que no contiene el dato.
  • Coste: O(log n)

🌳 En Estructuras Dinámicas: Búsqueda por niveles

  • Árbol binario ordenado → búsqueda por niveles.
  • Búsqueda en profundidad (DFS) o en anchura (BFS).

🧭 Algoritmos de Caminos Mínimos

  • Dijkstra: Ruta más corta entre nodos (usado en mapas, redes).
  • Floyd-Warshall: Todas las rutas entre todos los nodos.
  • Se usan estructuras de grafos.

🧮 Búsqueda Mediante Transformación de Claves (Hashing)

  • Hash Abierto y Cerrado: Manejan colisiones de manera eficiente.
  • Aumentan velocidad en estructuras como tablas hash.
  • Cada dato es transformado a un índice hash, con complejidad casi constante.

🔃 Algoritmos de Ordenación

🔹 Selección

  • Selecciona el menor elemento y lo pone al principio.
  • Coste: O(n²)

🔹 Inserción

  • Inserta cada nuevo valor en la posición correcta.
  • Bueno para listas casi ordenadas.

🔹 Burbuja

  • Intercambia elementos adyacentes hasta ordenar.
  • Coste elevado: O(n²)

🧠 Ordenamientos Más Avanzados

🟦 Shell Sort

  • Compara elementos lejanos.
  • Mejora progresiva con cada iteración.

🟧 Merge Sort (Ordenamiento por mezcla)

  • Divide y conquista. Requiere memoria adicional.
  • Muy eficiente: O(n log n)

🟩 Quick Sort (El más rápido)

  • Divide por un pivote, y ordena ambos lados.
  • Promedio: O(n log n)

🟨 Heap Sort

  • Usa una estructura heap para ordenar sin recursividad.
  • Buen rendimiento sin memoria auxiliar.

📊 Especiales para Datos Enteros

🔸 Counting Sort

  • Para datos numéricos pequeños.
  • Muy rápido, pero no sirve para todos los tipos de datos.

🔸 Radix Sort

  • Ordena según los dígitos (de menor a mayor peso).
  • Útil para códigos, identificadores, DNI, etc.

📘 Conclusión

Elegir el algoritmo correcto marca la diferencia entre eficiencia y colapso computacional. No todos sirven para lo mismo:

  • ¿Datos ordenados? Usa búsqueda binaria.
  • ¿Muchos números pequeños? Aplica counting o radix sort.
  • ¿Velocidad sin importar orden inicial? Prueba quick sort.

🔗

Y si te ha gustado, compártelo en redes y suscríbete a nuestro canal de YouTube para contenidos visuales y explicaciones paso a paso.

Deja un comentario