Competitive Programming Academy · Lección

Meet in the Middle

Reduzca el exponente dividiendo la búsqueda en dos

Lección 3 de 413 pasos

Meet in the Middle es una lección gratuita de Competitive Programming Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Competitive Programming Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Competitive Programming Academy incluye 4 lecciones en total.

Cuando la fuerza bruta es demasiado lenta

Algunos problemas tienen un N cercano a 40, y probar los 2^N subconjuntos es inviable. Meet in the middle permite resolver estos casos de tamaño intermedio. 🤝

La idea central

Divida la entrada en dos mitades. Resuelva cada mitad mediante fuerza bruta y después combine ingeniosamente los dos resultados parciales.

Reducir el exponente a la mitad

Dos mitades de tamaño N/2 cuestan 2^(N/2) cada una, en lugar de 2^N en total. Esta reducción a la raíz cuadrada convierte 2^40 en unos asequibles 2^20.

Un objetivo clásico: suma de subconjuntos

Determine si algún subconjunto suma un objetivo T. La suma de subconjuntos con N cercano a 40 es el problema clásico para aplicar meet in the middle.

Enumerar la primera mitad

Enumere todas las sumas de subconjuntos de la mitad izquierda y almacénelas. Con N/2 elementos, son solo 2^(N/2) sumas.

from itertools import combinations
left = arr[:len(arr)//2]
sums_l = []

Enumerar la segunda mitad

Haga lo mismo con la mitad derecha y construya su lista completa de sumas de subconjuntos. Ahora tiene dos listas manejables.

Combinar con una consulta

Para cada suma derecha r, necesita una suma izquierda igual a T menos r. Un conjunto o una lista ordenada permite comprobarlo rápidamente.

need = T - r
found = need in left_set

Dos formas de hacer coincidir

Para objetivos exactos, use un conjunto hash. Para contar o encontrar sumas cercanas, ordene una mitad y haga una búsqueda binaria en ella.

El coste temporal

El trabajo total es aproximadamente 2^(N/2) multiplicado por un factor logarítmico debido a la búsqueda o la ordenación. Esa complejidad es lo que hace viable un N cercano a 40.

La memoria es el precio

Almacena una mitad completa, por lo que la memoria crece hasta 2^(N/2). Conserve solo lo imprescindible para mantenerse dentro del límite.

Dónde más destaca

Además de la suma de subconjuntos, úselo para hallar el subconjunto máximo bajo un límite, contar pares y resolver problemas al estilo del logaritmo discreto. Se beneficia de una buena división.

Comprobación rápida

Aplica meet in the middle a un problema de subconjuntos con N elementos. ¿Cuál es el coste temporal aproximado?

Repaso

Divida en dos mitades, aplique fuerza bruta a cada una y después haga coincidir las sumas izquierda y derecha. Ha cambiado un poco de memoria por una enorme mejora de velocidad. 🚀

Gratis para empezar

Aprende Python con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
30
Lecciones
120

Preguntas frecuentes

¿La lección «Meet in the Middle» es gratis?

Sí — el texto completo de «Meet in the Middle» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Competitive Programming Academy, actualiza a CoddyKit PRO. El curso de Competitive Programming Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Meet in the Middle»?

Reduzca el exponente dividiendo la búsqueda en dos Practicas Competitive Programming Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Competitive Programming Academy?

No se requiere experiencia previa. Competitive Programming Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «Meet in the Middle»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Competitive Programming Academy?

Sí. Cada lección de Competitive Programming Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Estados ganadores y perdedores en juegos
  2. Nim y el número de Grundy
  3. Meet in the Middle
  4. Depure rápido: pruebas de estrés y triaje
← Volver a Competitive Programming Academy