Interactive Learning Platform

Algorithm VisionMaster Algorithms

Plataforma Interactiva de Visualización de Algoritmos

Domina algoritmos y estructuras de datos a través de visualizaciones interactivas, explicaciones completas y ejemplos de código en múltiples lenguajes. Perfecto para estudiantes de ciencias de la computación, desarrolladores preparándose para entrevistas técnicas y educadores enseñando conceptos algorítmicos.

Visualizaciones paso a paso

Step-by-step interactive visualizations help you understand how algorithms work

Código en JavaScript, Python y Java

Implementation examples in JavaScript, Python, and Java for practical learning

Análisis de complejidad temporal y espacial

Understand time and space complexity with detailed performance analysis

Algoritmos de Ordenamiento

Domina el arte de organizar datos con algoritmos basados en comparación (Bubble Sort, Quick Sort, Merge Sort, Heap Sort) y ordenamientos en tiempo lineal (Counting Sort, Radix Sort). Aprende cuándo usar ordenamientos estables vs inestables, comprende las compensaciones entre tiempo y espacio, y observa aplicaciones del mundo real en bases de datos, motores de búsqueda y pipelines de procesamiento de datos.

Ver todos

Ordenamiento Burbuja

Beginner

El algoritmo de ordenamiento más básico que compara repetidamente elementos adyacentes y los intercambia si están en orden incorrecto. Como burbujas que suben a la superficie, los valores más grandes se mueven gradualmente al final del arreglo. Ideal para conjuntos de datos pequeños o con fines educativos para comprender los fundamentos del ordenamiento.

O(n²)
O(1)
sortingcomparison
Start Learning

Ordenamiento por Selección

Beginner

Encuentra el elemento más pequeño y lo mueve al frente repetidamente. Cada iteración "selecciona" el mínimo de los elementos restantes y lo coloca después de la porción ordenada. Fácil de implementar con uso mínimo de memoria, pero siempre toma tiempo O(n²) independientemente de la entrada.

O(n²)
O(1)
sortingcomparison
Start Learning

Quick Sort

Intermediate

Un algoritmo de ordenamiento altamente eficiente que selecciona un elemento pivote y particiona el arreglo con valores más pequeños a la izquierda y más grandes a la derecha. Promedia O(n log n) y es el método de ordenamiento más utilizado en la práctica. Forma la base de las funciones de ordenamiento integradas en la mayoría de los lenguajes de programación.

O(n log n)
O(log n)
sortingdivide-and-conquer
Start Learning

Heap Sort

Advanced

Utiliza una estructura de datos de montículo binario construyendo primero un montículo máximo, luego extrayendo repetidamente el elemento raíz para ordenar. Garantiza complejidad de tiempo O(n log n) en todos los casos sin requerir memoria adicional. También sirve como base para implementaciones de colas de prioridad.

O(n log n)
O(1)
sortingheap
Start Learning

Counting Sort

Intermediate

Un algoritmo de ordenamiento sin comparación que cuenta las ocurrencias de cada elemento y usa aritmética para determinar posiciones. Logra complejidad de tiempo O(n+k) donde k es el rango de valores de entrada. Ideal para ordenar enteros dentro de un rango conocido y limitado. Forma la base del ordenamiento radix.

O(n + k)
O(n + k)
sortinglinear-time
Start Learning

Radix Sort

Advanced

Un algoritmo de ordenamiento sin comparación que procesa elementos dígito por dígito del menos significativo al más significativo. Usa counting sort como subrutina para cada posición de dígito. Logra tiempo O(d(n+k)) donde d es el número de dígitos. Excelente para ordenar enteros o cadenas de longitud fija.

O(d * n)
O(n + k)
sortinglinear-time
Start Learning

Shell Sort

Intermediate

Una optimización del ordenamiento por inserción que permite el intercambio de elementos que están muy separados. Usa una secuencia de brechas que disminuye a 1, permitiendo que el algoritmo mueva elementos más cerca de sus posiciones finales más rápido. Nombrado en honor a Donald Shell, quien lo inventó en 1959.

O(n^1.25)
O(1)
sortinggap-sequence
Start Learning

Bucket Sort

Advanced

Un algoritmo de ordenamiento basado en distribución que distribuye elementos en varios cubos. Luego, cada cubo se ordena individualmente usando otro algoritmo de ordenamiento. Funciona mejor cuando la entrada está distribuida uniformemente en un rango. La complejidad de tiempo promedio es O(n+k).

O(n + k)
O(n + k)
sortingdistribution-sort
Start Learning

Merge Sort

Intermediate

Un algoritmo de divide y vencerás que divide el arreglo por la mitad, ordena cada mitad recursivamente y luego las fusiona nuevamente. Garantiza tiempo O(n log n) y es estable, pero requiere memoria adicional. Particularmente efectivo para conjuntos de datos grandes y ordenamiento de listas enlazadas.

O(n log n)
O(n)
sortingdivide-and-conquer
Start Learning

Ordenamiento por Inserción

Beginner

Funciona como ordenar cartas de juego en tus manos: insertando cada elemento uno a la vez en su posición correcta. Se ejecuta en tiempo O(n) para datos ya ordenados, lo que lo hace muy eficiente para arreglos pequeños o conjuntos de datos casi ordenados. Algoritmo simple pero adaptativo.

O(n²)
O(1)
sortingstable
Start Learning

Comb Sort

Beginner

Mejora del ordenamiento burbuja que elimina valores pequeños cerca del final de la lista (tortugas). Usa una secuencia de brechas decrecientes comenzando con la longitud del arreglo, mejorando la complejidad del peor caso. Práctico para conjuntos de datos de tamaño medio donde se valora la simplicidad de implementación sobre el rendimiento óptimo.

O(n²/2^p)
O(1)
sortinggap-sequence
Start Learning

Gnome Sort

Beginner

Algoritmo de ordenamiento simple similar al ordenamiento por inserción, nombrado por la forma en que los gnomos de jardín ordenan macetas de flores. Se mueve hacia atrás cuando los elementos están fuera de orden, luego hacia adelante nuevamente. Aunque O(n²) como el ordenamiento burbuja, su simplicidad lo hace útil para enseñar conceptos de ordenamiento y manejar conjuntos de datos pequeños.

O(n²)
O(1)
sortingsimple-algorithm
Start Learning

Algoritmos de Búsqueda

Descubre técnicas eficientes para localizar elementos en estructuras de datos. Compara la Búsqueda Lineal (O(n)) para datos no ordenados con la Búsqueda Binaria (O(log n)) para arreglos ordenados. Aprende métodos avanzados como Búsqueda por Interpolación y Jump Search, y comprende cómo los algoritmos de búsqueda impulsan todo, desde bases de datos hasta sistemas de autocompletado.

Ver todos

Algoritmos de Grafos

Explora algoritmos que resuelven problemas complejos en estructuras de datos conectadas. Domina el recorrido de grafos con BFS y DFS, encuentra caminos más cortos usando los algoritmos de Dijkstra y Bellman-Ford, y calcula árboles de expansión mínima con los algoritmos de Kruskal y Prim. Aplica estos conceptos a problemas del mundo real como navegación GPS, redes sociales y enrutamiento de redes.

Ver todos

Búsqueda en Anchura (BFS)

Intermediate

Explora un grafo nivel por nivel, visitando todos los vértices en la profundidad actual antes de avanzar más profundo. Usa una cola y es ideal para encontrar caminos más cortos en grafos no ponderados. Las aplicaciones incluyen resolución de laberintos, análisis de redes sociales y encontrar conexiones entre nodos.

O(V + E)
O(V)
graphtraversal
Start Learning

Búsqueda en Profundidad (DFS)

Intermediate

Explora un grafo yendo lo más profundo posible a lo largo de cada camino antes de retroceder. Se implementa usando una pila o recursión, lo que lo hace natural para problemas recursivos. Se usa para búsqueda de caminos, detección de ciclos, ordenamiento topológico y generación de laberintos.

O(V + E)
O(V)
graphtraversal
Start Learning

Algoritmo de Dijkstra

Advanced

Encuentra los caminos más cortos desde un vértice fuente único a todos los demás vértices en un grafo ponderado. Impulsa sistemas de navegación GPS y protocolos de enrutamiento de redes. Funciona eficientemente con pesos de arista no negativos usando un enfoque codicioso con una cola de prioridad.

O((V + E) log V)
O(V)
graphshortest-path
Start Learning

Algoritmo de Búsqueda A*

Advanced

Un algoritmo de búsqueda best-first que encuentra el camino más corto usando heurísticas. Combina el algoritmo de Dijkstra y la búsqueda codiciosa best-first usando f(n) = g(n) + h(n). Ampliamente utilizado en juegos, robótica y navegación GPS para búsqueda eficiente de caminos.

O(E)
O(V)
graphpathfinding
Start Learning

Algoritmo de Kruskal

Advanced

Encuentra el Árbol de Expansión Mínima (MST) de un grafo no dirigido ponderado. Usa un enfoque codicioso ordenando aristas por peso y agregándolas si no crean un ciclo. Emplea Union-Find para detección eficiente de ciclos. Esencial para diseño de redes y agrupamiento.

O(E log E)
O(V)
graphmst
Start Learning

Algoritmo de Prim

Intermediate

Encuentra el Árbol de Expansión Mínima (MST) haciendo crecer un árbol desde un vértice inicial. Siempre agrega la arista de peso mínimo que conecta un vértice en el árbol con uno fuera. Usa una cola de prioridad para selección eficiente de aristas. Ideal para grafos densos.

O(E log V)
O(V)
graphmst
Start Learning

Ordenamiento Topológico

Intermediate

Ordena vértices de un Grafo Acíclico Dirigido (DAG) de modo que para cada arista u→v, u viene antes de v. Usa enfoque basado en DFS. Esencial para resolución de dependencias, sistemas de construcción y programación de cursos.

O(V + E)
O(V)
graphdag
Start Learning

PageRank

Advanced

Algoritmo de Google para clasificar páginas web por estructura de enlaces. Calcula puntuaciones de importancia iterativamente.

O(iterations × (V + E))
O(V)
graphranking
Start Learning

Detección de Ciclos (Algoritmo de Floyd)

Intermediate

También conocido como el algoritmo de la 'tortuga y la liebre', esta elegante técnica detecta ciclos en listas enlazadas o secuencias usando espacio O(1). Usa dos punteros que se mueven a diferentes velocidades; si hay un ciclo, eventualmente se encontrarán. Esencial para detectar bucles infinitos, analizar estructuras de grafos y validar la integridad de los datos.

O(V + E)
O(V)
graphdfs
Start Learning

Algoritmo de Bellman-Ford

Advanced

Algoritmo de camino más corto desde un origen único que maneja pesos negativos y detecta ciclos negativos. Relaja todas las aristas V-1 veces para garantizar distancias correctas incluso con pesos negativos. Esencial para detección de arbitraje de divisas, enrutamiento de redes con costos variados y situaciones donde el algoritmo de Dijkstra falla. Intercambia velocidad por flexibilidad.

O(V × E)
O(V)
graphshortest-path
Start Learning

Algoritmo de Floyd-Warshall

Advanced

Algoritmo de caminos más cortos entre todos los pares que calcula distancias entre cada par de vértices en tiempo O(V³). Usa programación dinámica con lógica central elegante de tres líneas. Maneja pesos negativos y proporciona cierre transitivo. Ideal para grafos densos, análisis de redes y cuando se necesitan todas las distancias por pares.

O(V³)
O(V²)
graphall-pairs-shortest-paths
Start Learning

Algoritmo MST de Kruskal

Intermediate

Algoritmo codicioso que construye un árbol de expansión mínima agregando aristas en orden de peso creciente, usando union-find para evitar ciclos. Eficiente para grafos dispersos con complejidad de tiempo O(E log E). Las aplicaciones incluyen diseño de redes, agrupamiento, algoritmos de aproximación y comprensión de pruebas de corrección codiciosa.

O(E log E)
O(V)
graphminimum-spanning-tree
Start Learning

Algoritmo MST de Prim

Intermediate

Algoritmo codicioso que hace crecer un árbol de expansión mínima agregando repetidamente la arista más barata que conecta el árbol a un nuevo vértice. Usa una cola de prioridad para eficiencia con tiempo O(E log V). Preferido para grafos densos y aplicaciones en tiempo real como difusión de redes y diseño de circuitos.

O(E log V)
O(V)
graphminimum-spanning-tree
Start Learning

Algoritmos de Cadenas

Domina técnicas eficientes de coincidencia de patrones y manipulación de cadenas. Aprende algoritmos de búsqueda de subcadenas como Knuth-Morris-Pratt (KMP) para coincidencia de patrones O(n+m), Boyer-Moore para búsqueda práctica de texto y Rabin-Karp para detección de múltiples patrones. Estos algoritmos impulsan editores de texto, motores de búsqueda, análisis de secuencias de ADN y sistemas de validación de datos.

Ver todos

Programación Dinámica

Resuelve problemas complejos de optimización dividiéndolos en subproblemas superpuestos más simples. Domina enfoques de memoización y bottom-up a través de problemas clásicos como secuencias de Fibonacci, Subsecuencia Común más Larga, problemas de Mochila y Multiplicación de Cadenas de Matrices. Aprende cómo la programación dinámica transforma soluciones de tiempo exponencial en algoritmos de tiempo polinomial.

Ver todos

Multiplicación de Cadenas de Matrices

Advanced

Encuentra la forma óptima de colocar paréntesis en una cadena de matrices para minimizar el número de multiplicaciones escalares. Problema clásico de programación dinámica del Capítulo 15 de CLRS.

O(n³)
O(n²)
dynamic-programmingoptimization
Start Learning

Fibonacci (Programación Dinámica)

Beginner

Calcula números de Fibonacci eficientemente usando programación dinámica para evitar cálculos redundantes. Demuestra el poder de la memoización al transformar una solución recursiva de tiempo exponencial en un algoritmo de tiempo lineal. Una introducción clásica a los conceptos de programación dinámica.

O(n)
O(n)
dynamic-programmingmemoization
Start Learning

Subsecuencia Común más Larga (LCS)

Intermediate

Encuentra la subsecuencia más larga presente en dos secuencias en el mismo orden. Usa programación dinámica para construir una tabla de soluciones. Las aplicaciones incluyen alineación de secuencias de ADN, herramientas de diferencia de archivos (diff) y detección de plagio.

O(m × n)
O(m × n)
dynamic-programmingstrings
Start Learning

Distancia de Edición (Levenshtein)

Intermediate

Algoritmo de programación dinámica que calcula el número mínimo de ediciones de un solo carácter (inserciones, eliminaciones, sustituciones) requeridas para transformar una cadena en otra. Fundamental en corrección ortográfica, alineación de secuencias de ADN y procesamiento de lenguaje natural.

O(m × n)
O(m × n)
dynamic-programmingstrings
Start Learning

Problema de la Mochila 0/1

Intermediate

Problema clásico de programación dinámica donde debes seleccionar elementos con pesos y valores dados para maximizar el valor total mientras te mantienes dentro de una capacidad de peso. Cada elemento solo se puede tomar una vez (0/1). Las aplicaciones incluyen asignación de recursos, optimización de cartera y carga de mercancías.

O(n × W)
O(n × W)
dynamic-programmingoptimization
Start Learning

Subsecuencia Creciente más Larga

Intermediate

Encuentra la subsecuencia más larga donde todos los elementos están en orden creciente. Problema clásico de programación dinámica.

O(n log n)
O(n)
dynamic-programmingbinary-search
Start Learning

Algoritmo de Kadane (Subarreglo Máximo)

Intermediate

Elegante algoritmo de programación dinámica que encuentra el subarreglo contiguo con suma máxima en tiempo O(n). Combina principios codiciosos y de programación dinámica al decidir en cada paso si extender el subarreglo actual o comenzar uno nuevo. Esencial para optimización de beneficios en bolsa, procesamiento de señales y comprensión de técnicas de optimización de programación dinámica.

O(n)
O(1)
dynamic-programminggreedy
Start Learning

Problema del Cambio de Monedas

Intermediate

Problema clásico de programación dinámica que encuentra el número mínimo de monedas necesarias para hacer una cantidad objetivo. Demuestra subestructura óptima donde la solución depende de soluciones a cantidades más pequeñas. Ampliamente aplicado en sistemas financieros, máquinas expendedoras y optimización de asignación de recursos.

O(amount × coins)
O(amount)
dynamic-programmingoptimization
Start Learning

Partición de Palíndromos

Advanced

Problema de programación dinámica que encuentra el número mínimo de cortes necesarios para particionar una cadena en subcadenas palindrómicas. Usa programación dinámica para precalcular qué subcadenas son palíndromos, luego encuentra los cortes óptimos. Las aplicaciones incluyen segmentación de texto, análisis de secuencias de ADN y problemas de optimización de cadenas.

O(n²)
O(n²)
dynamic-programmingstrings
Start Learning

Algoritmos de Retroceso

Resuelve problemas de satisfacción de restricciones explorando sistemáticamente todas las soluciones posibles y abandonando caminos que no cumplen con los requisitos. Domina el problema de las N-Reinas, solucionadores de Sudoku y rompecabezas combinatorios. Aprende cómo el retroceso maneja elegantemente árboles de decisión complejos donde la fuerza bruta se vuelve inviable.

Ver todos

Algoritmos Matemáticos

Explora algoritmos clásicos arraigados en la teoría de números y las matemáticas. Estudia la generación de números primos con la Criba de Eratóstenes, comprende los cálculos de MCD/MCM y descubre cómo las ideas matemáticas antiguas se traducen en algoritmos modernos eficientes. Estos forman la base de la criptografía, la optimización y la teoría de las ciencias de la computación.

Ver todos

Algoritmos de Aprendizaje Automático

Descubre algoritmos fundamentales de aprendizaje supervisado y no supervisado que impulsan la IA moderna. Domina el agrupamiento K-Means para segmentación de datos, comprende árboles de decisión para clasificación y explora cómo los algoritmos aprenden patrones de los datos. Las aplicaciones abarcan análisis de clientes, reconocimiento de imágenes, sistemas de recomendación y modelado predictivo.

Ver todos

Algoritmos de Árboles

Aprende a trabajar con estructuras de datos jerárquicas que impulsan bases de datos, sistemas de archivos y operaciones de búsqueda. Comprende los árboles de búsqueda binaria, explora árboles auto-balanceados como los árboles AVL y Rojo-Negro que garantizan operaciones O(log n), y domina técnicas de recorrido de árboles (inorden, preorden, postorden) esenciales para el procesamiento de datos y la evaluación de expresiones.

Ver todos

Algoritmos Codiciosos

Toma decisiones localmente óptimas que conducen a soluciones globalmente óptimas. Estudia la selección de actividades, codificación de Huffman para compresión de datos y problemas de mochila fraccionaria. Comprende cuándo funcionan los algoritmos codiciosos (subestructura óptima + propiedad de elección codiciosa) y observa aplicaciones en programación, compresión y optimización de redes.

Ver todos