2015-09-22 88 views
2

給定自然數的有限序列。確定是否有可能將數字分成兩個子集,例如兩個子集的總數相等。顯示這種分配的一個變體。有初始設置,總的100將數字集合分成兩組,總數相等

的子集,我只看到了問題的一個蠻力alorithm - 檢查所有S(N,2)(第二類Stirling數)的總數爲組合平等和展現一個這樣的組合。還要檢查初始設置的所有可能組合是否等於100.是否有更優雅的解決方案?

+3

你可以在這裏找到幾個更優雅的解決方案:http://stackoverflow.com/q/32354215/1009831。至於subset-100,只需在該集合中添加一個新元素(value = sum-2 * 100),然後將其分成兩個相等的子集。 –

回答

4

由於這是一個NP-Complete Partition Problem沒有多項式時間解決方案。但是如果你的總和不夠大,那麼有一個dp解決方案,其複雜度爲O(sum*n),其中n是元素的數量。在這裏你可以找到solution

相關問題