tft每日頭條

 > 生活

 > 一個集合子集的個數怎麼計算

一個集合子集的個數怎麼計算

生活 更新时间:2024-08-08 00:03:29

一個集合子集的個數怎麼計算(5分鐘練腦算法題)1

【題目】

給一個集合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。

sum = (1 2 3 4 ... n) * N

N的值又和數組的長度有關系,N=2^(n-1)

sum = (1 2 3 4 ... n) * 2^(n-1)

【實現】

var childrenArraySum = function(array){ var sum = array.reduce(function (a,b) { return a b; }) return sum * Math.pow(2, array.length-1);; }; childrenArraySum([1,2,3]); // 24

第二種解法的思路很巧妙,把原本很複雜的問題用簡單的方式解決了。算法或者說數學對程序員的影響還是很大的。如果在工作中能多思考一下又沒有更簡單的方法,下面這種寫法就不會出現了。

if(a){ for(var i=0;i<arr1.length;i ){ if(b){ for(var j=0;j<arr2.length;j ){ ....... } } } }

如果有覺得有意思,歡迎轉發收藏~~

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved