集合中所有子集元素之和

2021-09-26 14:02:36 字數 1373 閱讀 2159

【題目】

給乙個集合array,包含n個數。

規定集合的"值"為集合中所有元素的和。

求該集合的所有子集的值的和。

【示例】

陣列[1,2]

它的子集有空集,[1],[2],[1,2]

子集各自的值為0,1,2,3

所以子集值的和為0+1+2+3=6

【解法一】

思路:簡單暴力的方法就是窮舉陣列所有的子集,然後逐個求子集的值,然後相加得到最終的結果。

缺點:時間複雜度高,每個集合的子集個數為2^n個。

實現:

太麻煩了,不實現了。

【解法二】

思路:通過計算每個元素在求和過程**現的次數,嘗試獲取一種規律。

[1]==> 0+1=1 // 1出現一次

[1,2]==>0+1+2+(1+2)=6 // 1出現2次,2出現2次

[1,2,3]===>0+1+2+3+(1+2)+(1+3)+(2+3)+(1+2+3)=24 // 1,2,3出現4次

由於集合中元素具有無序性, 所以集合中每個元素在子集**現的次數是相同的。這樣的話,問題就簡單了,求所有子集元素的和就可以簡化為求每個元素在子集**現的次數*全集中所有元素的和。全集中所有元素的和好求,就是n*(n+1)/2。

集合中任何乙個元素出現的次數,比如1,我們可以這樣來求:

首先乙個集合的子集個數是2n,這個都學過,我就不推導了。

我們想求 1 出現 的次數,不好求,我們可以轉化為求 1 不出現的次數,1 不出現的次數就是原來集合中除了元素 1 的元素的集合的子集個數。不明白??舉個例子

這個集合子集的個數是24,除去 1 之後集合就變為 這個集合的子集個數是23,也就是說只有這些集合中沒有 1 ,我們想求的 1 出現的個數就是24-23

所以在含n個元素的集合中,任何乙個元素在子集**現的次數就是2n-2n-1=2n-1

所以集合中所有元素之和sum=(n*(n+1)/2)*(2n-1)

好像有點規律了,每個元素在求和過程**現的次數是一樣的。假設出現的次數是n

sum = (1+2+3+4+...+n) * n
n的值又和陣列的長度有關係,n=2^(n-1)

sum = (1+2+3+4+...+n) * 2^(n-1)
【實現】

#include#includeint main()

演算法作業 求乙個集合中所有子集元素之和

求乙個集合中所有子集元素之和。如 由於集合中元素具有無序性,所以集合中每個元素在子集 現的次數是相同的。這樣的話,問題就簡單了,求所有子集元素的和就可以簡化為求每個元素在子集 現的次數 全集中所有元素的和。全集中所有元素的和好求,就是n n 1 2。集合中任何乙個元素出現的次數,比如1,我們可以這樣...

演算法作業 求乙個集合中所有子集元素之和

求乙個集合中所有子集元素之和。如 由於集合中元素具有無序性,所以集合中每個元素在子集 現的次數是相同的。這樣的話,問題就簡單了,求所有子集元素的和就可以簡化為求每個元素在子集 現的次數 全集中所有元素的和。全集中所有元素的和好求,就是n n 1 2。集合中任何乙個元素出現的次數,比如1,我們可以這樣...

python列出集合中所有子集

廢話不多說直接上 還有其他方法那些比較好理解。今天只說一下二進位制位運算的方法。0 0000 1 1 0001 2 2 0010 3 1,2 0011 4 3 0100 5 1,3 0101 6 2,3 0110 7 1,2,3 0111 8 4 1000 9 1,4 1001 10 2,4 101...