Generando permutaciones con una restricción de suma
Yo tengon
conjuntos de longitud variable y quisiera obtener todas las permutaciones de elementos de cada conjunto donde la suma esté dentro de un cierto rango. Por ejemplo enR
podemos hacer
set1 <- c(10, 15, 20)
set2 <- c(8, 9)
set3 <- c(1, 2, 3, 4)
permutations <- expand.grid(set1, set2, set3)
permutations$sum <- rowSums(permutations)
final <- permutations[permutations$sum >= 25 & permutations$sum <= 29, ]
# final:
# Var1 Var2 Var3 sum
# 3 20 8 1 29
# 5 15 9 1 25
# 8 15 8 2 25
# 11 15 9 2 26
# 14 15 8 3 26
# 17 15 9 3 27
# 20 15 8 4 27
# 23 15 9 4 28
Esto está bien para un pequeño número de conjuntos, aunque rápidamente (factorialmente) crece con un número mayor o mayor de conjuntos.
Es posible generar permutaciones que se ajusten a la restricción, sin tener que calcular todas las posibilidades?
En este ejemplo, no hay combinaciones finales que contengan los 10 deset1
, ya que la suma resultante sería demasiado pequeña sin importar qué otros números se elijan. Esto podría ser útil para reducir el alcance del problema. Por ejemplo, e, si sé quemin(set1) + max(set2) + max(set3) < 25 == TRUE
, entonces puedo asegurarme de no incluirmin(set1)
en cualquier permutaciones.
¿Cómo puedo generalizar esto y usar las restricciones para evitar generar permutaciones no válidas?