Skip to main content

Abrir el simulador

Máximo, suma, vector creciente y búsqueda binaria en C, con el trozo de cada llamada y su coste.
Ante un problema grande, una estrategia clásica es partirlo en trozos más pequeños del mismo tipo, resolver cada uno y juntar los resultados. Así funcionan merge sort, quicksort, la búsqueda binaria, la multiplicación rápida de números grandes o la transformada rápida de Fourier.

Lo que vas a aprender

  • El esquema general de divide y vencerás.
  • Cómo se aplica a vectores dividiendo por la mitad.
  • La búsqueda binaria.
  • Calcular el coste con ecuaciones de recurrencia.
  • Cuándo compensa y cuándo no.

Cómo se usa el simulador

  • Elige el problema: máximo, suma, ¿creciente? o búsqueda binaria.
  • Datos: número de elementos (2 – 16) y disposición: aleatorio, creciente o casi creciente. 🎲 Nuevos datos genera otros.
  • Avanza con ⏮, ◀, ▶ Ejecutar, ▶ y ⏭.
  • Se resalta el trozo del vector que trata cada llamada y su mitad, la línea del código en C y el árbol de subproblemas. Los contadores dan las llamadas, las comparaciones y el tamaño de la pila.
  • Cómo funciona muestra la ecuación de recurrencia y su solución.

Fundamentos teóricos

El esquema

Con vectores

Búsqueda binaria

En un vector ordenado, se mira el centro: si es el buscado, termina; si es mayor, se busca solo en la mitad izquierda; si es menor, en la derecha. Solo se resuelve una mitad.

Ecuaciones de recurrencia

El coste T(n)T(n) se expresa en función del coste de los subproblemas: Regla general (teorema maestro simplificado) para T(n)=a T(n/b)+O(nk)T(n) = a\,T(n/b) + O(n^k):
  • Si a<bka < b^k: O(nk)O(n^k).
  • Si a=bka = b^k: O(nklog⁡n)O(n^k\log n).
  • Si a>bka > b^k: O(nlog⁡ba)O(n^{\log_b a}).

¿Cuándo compensa?

Buscar el máximo por divide y vencerás hace las mismas n−1n - 1 comparaciones que un bucle: no gana nada. Compensa cuando la combinación aprovecha el trabajo (merge sort frente a ordenación por inserción) o cuando se descarta parte del problema (búsqueda binaria).

Ejemplos resueltos

Ejemplo 1 · Máximo de {4, 9, 2, 7}

maximo(0, 3) → maximo(0, 1) y maximo(2, 3). maximo(0, 1) = max(4, 9) = 9; maximo(2, 3) = max(2, 7) = 7. Resultado: max(9, 7) = 9.7 llamadas y 3 comparaciones (n−1n - 1).
En un vector ordenado de 1000 elementos, la búsqueda binaria necesita como mucho ⌈log⁡21001⌉=10\lceil\log_2 1001\rceil = 10 comparaciones. Una búsqueda secuencial, hasta 1000.
T(n)=2T(n/2)+nT(n) = 2T(n/2) + n: a=2a = 2, b=2b = 2, k=1k = 1, así que a=bka = b^k y T(n)=O(nlog⁡n)T(n) = O(n\log n).

Experimenta con el simulador

1

El árbol

Con el máximo y 8 elementos, cuenta las llamadas del árbol. ¿Cuántas son con 16?
2

Binaria

Con la búsqueda binaria, mira cuántas llamadas hace con 16 elementos.
3

¿Creciente?

Con datos casi crecientes, mira dónde se detecta el fallo.

Errores frecuentes

  • Calcular mal la mitad y dejar trozos vacíos o solapados.
  • Olvidar el caso trivial.
  • Aplicar búsqueda binaria a un vector desordenado.

Herramientas relacionadas

Recursión en C

La base de divide y vencerás.

Algoritmos de ordenación

Merge sort y quicksort.

Mejor y peor caso

Medir el coste.
Última modificación el 6 de octubre de 2026