Backtracking o retroceso es especialmente potente cuando debemos explorar todos los subconjuntos o combinaciones de elementos. En este Blog 2 Subset & Power Set Pattern aprenderás un patrón universal que se reutiliza en entrevistas técnicas y en proyectos reales de desarrollo de aplicaciones a medida y software a medida.
Definición del problema. Dado un conjunto de elementos, genera todos los subconjuntos el power set.
Ejemplo. Entrada [1, 2, 3]. Salida [[], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]]
Intuición. Cada elemento tiene dos opciones incluirlo o excluirlo. Estas decisiones forman un árbol binario de profundidad n que produce 2^n subconjuntos.
Plantilla universal para subconjuntos con backtracking en estilo Java.
void backtrack int index, List<Integer> current, int[] nums, List<List<Integer>> results { if index == nums.length { results.add new ArrayList<> current ; return; } backtrack index + 1, current, nums, results; current.add nums[index]; backtrack index + 1, current, nums, results; current.remove current.size() - 1; }
Implementación Java sencilla para el power set.
import java.util.*; public class SubsetsPattern { public List<List<Integer>> subsets int[] nums { List<List<Integer>> results = new ArrayList<>(); backtrack 0, new ArrayList<>(), nums, results; return results; } private void backtrack int index, List<Integer> current, int[] nums, List<List<Integer>> results { if index == nums.length { results.add new ArrayList<> current ; return; } backtrack index + 1, current, nums, results; current.add nums[index]; backtrack index + 1, current, nums, results; current.remove current.size() - 1; } }
Visualización del árbol de recursión para la entrada [1,2].
[] -> decisiones incluir excluir rama izquierda excluye 1 y luego decide sobre 2 rama derecha incluye 1 y luego decide sobre 2 Resultado final hojas [], [2], [1], [1,2]
Variaciones frecuentes en entrevistas.
1 Subconjuntos con duplicados. Entrada [1,2,2]. Objetivo evitar subconjuntos duplicados. Estrategia ordenar y saltar duplicados contiguos.
private void backtrackDup int start, List<Integer> current, int[] nums, List<List<Integer>> results { results.add new ArrayList<> current ; for int i = start; i < nums.length; i++ { if i > start && nums[i] == nums[i - 1] continue; current.add nums[i]; backtrackDup i + 1, current, nums, results; current.remove current.size() - 1; } }
2 Subconjuntos de tamaño k. Entrada nums=[1,2,3], k=2. Salida [[1,2], [1,3], [2,3]].
private void backtrackK int start, int k, List<Integer> current, int[] nums, List<List<Integer>> results { if current.size() == k { results.add new ArrayList<> current ; return; } for int i = start; i < nums.length; i++ { current.add nums[i]; backtrackK i + 1, k, current, nums, results; current.remove current.size() - 1; } }
3 Subconjuntos de una cadena. Entrada abc. Salida vacio, a, b, c, ab, ac, bc, abc. Misma lógica, usando caracteres en lugar de enteros.
Complejidad. Tiempo O 2^n para enumerar todos los subconjuntos. Espacio O n por la profundidad de recursión más el almacenamiento del resultado.
Conclusiones clave. Los problemas de subconjuntos se resuelven con el patrón incluir excluir. En arrays con duplicados, ordena y salta duplicados. Para subconjuntos de tamaño fijo, añade una condición de tamaño. Este patrón es base para combinaciones, particionado, decisiones y generación de estados en agentes IA.
Que sigue. En el Blog 3 Permutation Pattern veremos cómo generar todas las permutaciones con y sin duplicados, una extensión natural del patrón de backtracking.
Sobre Q2BSTUDIO. Somos una empresa de desarrollo de software y aplicaciones a medida, especialistas en inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y power bi, automatización de procesos y agentes IA para empresas. Si buscas llevar este tipo de patrones a productos reales, nuestro equipo crea plataformas y productos escalables con buenas prácticas, pruebas automatizadas y seguridad integrada.
Si necesitas transformar una idea en producto digital, descubre cómo abordamos proyectos de software a medida y aplicaciones a medida en desarrollo de aplicaciones y software multiplataforma. Para potenciar tus procesos con modelos de ia para empresas, copilotos internos y agentes IA, visita nuestra oferta en inteligencia artificial.
También te ayudamos a desplegar soluciones seguras y elásticas en servicios cloud aws y azure, a robustecer tu postura de ciberseguridad y pentesting, y a convertir datos en decisiones con power bi y business intelligence, alineando analítica avanzada con objetivos de negocio.
Palabras clave recomendadas para tu estrategia técnica y de negocio. aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.