Resolución de Problemas 🎨

Objetivo Visual

Entender cómo se mueve el algoritmo. No memorices código, visualiza el flujo.

1. Recursividad vs Iteración 🔄

Visualizando el Stack (Pila de Llamadas)

Cuando usas recursividad, el ordenador apila tareas pendientes. Esto consume memoria.

graph TD
    subgraph Iterativo [Iterativo: bucle while/for]
        I[Inicio] --> C{¿Condición?}
        C -- Sí --> A[Acción]
        A --> C
        C -- No --> F[Fin]
    end

    subgraph Recursivo [Recursivo: Llamada a sí mismo]
        R1["Función(5)"] --> R2["Función(4)"]
        R2 --> R3["Función(3)"]
        R3 --> R4[...]
        R4 -.-> RET[Retorno Base]
        RET -.-> R3
        R3 -.-> R2
        R2 -.-> R1
    end

2. Grafos: Los 4 Fantásticos 🕸️

Visualiza para qué sirve cada uno en el mapa de una ciudad.

graph LR
    A((Casa)) -- 5 min --> B((Metro))
    B -- 10 min --> C((Trabajo))
    A -- 20 min --> C
    
    style A fill:#f9f,stroke:#333
    style C fill:#9f9,stroke:#333

    dijkstra[Dijkstra: Busca el camino MÁS CORTO considerando el tiempo]
    bfs[BFS: Busca el camino con MENOS PARADAS]

Tabla Visual de Algoritmos

AlgoritmoMentalidadVisualización
Dijkstra⚡ El Prisa-MatasExpande ondas desde el origen. Elige siempre el nodo más cercano.
Floyd-Warshall🧠 El OmniscienteCalcula una Matriz Gigante. Sabe la distancia de todos a todos.
BFS (Amplitud)🌊 La Mancha de AceiteSe expande capa por capa (Vecinos → Vecinos de vecinos).
Kruskal💰 El TacañoOrdena cables por precio (baratos primero). Conecta islas hasta tener todo unido.

3. Backtracking (Vuelta Atrás) 🔙

Imagina un laberinto. Pruebas un camino, te chocas, y vuelves al último cruce.

graph TD
    A[Inicio] --> B{¿Opción 1?}
    B -- Camino A --> C[❌ Pared]
    C -.->|Backtrack| B
    B -- Camino B --> D[✅ Salida]
    
    style C fill:#faa
    style D fill:#afa

4. Programación Dinámica 💾

El Árbol de Fibonacci (El Problema)

Sin Dynamic Programming, calculas fib(2) millones de veces.

graph TD
    F5[fib 5] --> F4a[fib 4]
    F5 --> F3a[fib 3]
    F4a --> F3b[fib 3]
    F4a --> F2a[fib 2]
    F3a --> F2b[fib 2]
    F3a --> F1[fib 1]
    
    style F3b fill:#ff9,stroke:#f00,stroke-width:2px
    style F3a fill:#ff9,stroke:#f00,stroke-width:2px
    note[¡Cálculo Repetido!]

La Solución (Memorización)

Guardamos el resultado la primera vez. La segunda vez es instantáneo.

🎴 Flashcards Visuales

¿Qué forma tiene la expansión de un BFS?::Como ondas en el agua (círculos concéntricos).

¿Qué estructura visualiza mejor la Recursividad?::Una Pila (Stack) de platos apilados.

¿Qué hace Kruskal visualmente?::Une “islas” de nodos usando las aristas más baratas posibles.

🧪 Aplicación

  • Explicarlo sin consultar la nota
  • Resolver un caso nuevo o escribir un ejemplo
  • Compararlo con una alternativa
  • Usarlo en un proyecto

🔗 Conexiones explicadas

  • — Se relaciona porque…