No es posible hacerlo mejor que enumerar todas las combinaciones posibles, en el peor de los casos, porque todas ellas podrían satisfacer el límite T = 0, y todos menos uno satisfacen el elemento límite T = más pequeño. ¿Pero hay un límite en “T” (la suma mínima de la combinación) para el cual el problema se vuelve más fácil? Asumamos que los elementos son todos positivos.
Supongamos que T está muy cerca de la suma de todos los elementos del conjunto. Entonces no necesitamos considerar todos los subconjuntos pequeños, ya que ninguno de ellos será lo suficientemente grande. Por ejemplo, si la entrada es {10, 11, 12, 13, 14, 15} y T = 60, entonces solo 6 de los subconjuntos posibles [matemáticas] 2 ^ 6 [/ matemáticas] son lo suficientemente grandes (omita uno de los números, o ninguno de ellos.)
Esto sugiere que busquemos las combinaciones comenzando con el mayor número de elementos elegidos, pasando a subconjuntos más pequeños y abandonemos siempre que ningún subconjunto de tamaño K sea lo suficientemente grande. Otra optimización, si hay un solo elemento grande que debe estar en el conjunto, es reducir a un tamaño de problema más pequeño al incluir siempre ese elemento, o eliminar de manera equivalente ese elemento y restar su valor de T. Esto puede ayudar a hacer la búsqueda terminar temprano
- ¿Es correcto mi nuevo estado de ánimo? Ingresé a la programación desde un punto de vista de programación algorítmica y, como tal, tengo una inclinación a querer saber cómo funcionan las cosas debajo. Pero ahora, después de un tiempo en el mundo de los desarrolladores, finalmente tengo que darme cuenta de que se trata menos de eso. ¿Lo que usted dice?
- Cómo ordenar una matriz de vectores de pares, es decir, vector <par v [N], en C ++
- ¿Por qué mi implementación de Quicksort no funciona?
- ¿Qué es un algoritmo de CTA?
- ¿Es útil leer 5 o más libros para algoritmos, o debería leer solo uno o dos y usar los otros como referencia para algún algoritmo en particular?
Desafortunadamente, si bien el orden de búsqueda de subconjunto de mayor a menor puede ser útil en la práctica, no cambia sustancialmente el tiempo de ejecución máximo. Si tenemos que buscar desde el tamaño del subconjunto K = N hasta K = N / 2, todavía hemos observado la mitad de las combinaciones posibles, solo una mejora de factor constante. Se debe garantizar que los elementos de la lista se distribuyan de manera relativamente uniforme, como en el ejemplo anterior, para lograr una aceleración más que fraccional. Por ejemplo, si podemos garantizar que solo los conjuntos con elementos N-3 o más satisfacen la restricción, entonces [matemáticas] {N \ elegir N-3} + {N \ elegir N-2} + {N \ elegir N-1 } + 1 = O (N ^ 3) [/ math] Simplemente tener una T grande no es suficiente si unos pocos elementos del conjunto pueden satisfacerla.