2015-09-28 57 views
1

設S是一組n個正整數,其中n是偶數。給出一種有效的算法來將S劃分成n/2個元素的兩個子集S1和S2,其中每個元素具有以下性質:S1中的元素 的總和與S2中的元素總和之間的差異是最大的。什麼時候你的算法的複雜性爲 。 這是算法的問題,但我無法弄清楚「S1中元素之和與S2中元素之和之間的差值最大」的含義。如何劃分一個集合,使兩組之和的差值爲最大值

+0

當你對S1的元素和S2的元素求和時,你會得到兩個整數i1和i2 - 這裏我們看看兩個數字(i2 - i1)之間的差異。有意義的是,這種差異取決於i1和i2的值,而i1和i2又取決於如何將原始組合分解爲兩個子集S1和S2。這裏的問題是:如何分解原始集合以使值(i2 - i1)儘可能大? – Thomas

+0

謝謝!我認爲這是我卡住的地方。我認爲這兩套「最大」是不同的,但實際上它意味着最大的差異 – qrt

回答

2
S = RadixSort(S) // O(N) 
S1 = S[0..(N/2)-1] 
S2 = S[N/2..N-1] 

Abs(Sum(最低值) - Sum(最高值))將是最大差異。

相關問題