Suma de subconjuntos
Los subconjuntos de [1, 4, 2] son
1 |
[], [1], [4], [1, 4], [2], [1, 2], [4, 2], [1, 4, 2] |
Las sumas de sus elementos son
1 |
0, 1, 4, 5, 2, 3, 6, 7 |
Y la suma de las sumas es 28.
Definir la función
1 |
sumaSubconjuntos :: [Integer] -> Integer |
tal que (sumaSubconjuntos xs) es la suma de las sumas de los
subconjuntos de xs. Por ejemplo,
1 2 3 |
sumaSubconjuntos [1,2] == 6 sumaSubconjuntos [1,4,2] == 28 length (show (sumaSubconjuntos [1..10^6])) == 301042 |
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import Data.List (subsequences) -- 1ª definición sumaSubconjuntos :: [Integer] -> Integer sumaSubconjuntos xs = sum [sum ys | ys <- subsequences xs] -- 2ª definición sumaSubconjuntos2 :: [Integer] -> Integer sumaSubconjuntos2 = sum . map sum . subsequences -- 3ª definición sumaSubconjuntos3 :: [Integer] -> Integer sumaSubconjuntos3 xs = 2^(n-1) * sum xs where n = length xs |