2015-02-07 60 views
3

您可以免除集中的最多一個元素以實現目標。 例如: -將一組給定的數字N分成兩組,使它們的和的差值最小?

N = 3個

給定的數字是= 1,2,5

所以,

組1應該是: - [1]

集2應該是: - [2]

我們排除了5,因爲我們可以在沒有任何組的情況下獲得較小的差異。

N = 4

數= 1,2,2,5

SET1 = [1,2,2]

SET2 = [5]

什麼是最好的算法爲了這? 我知道這是一個NP完全問題。 我認爲蠻力會給我正確的解決方案,但如果可用的話我需要一個算法。

+0

僞多項式時間可以使用嗎? – harold 2015-02-07 10:40:27

回答

1

我知道,這是一個NP完全問題。

不完全,partition optimisation problem甚至被稱爲NP-hard。

我認爲蠻力會給我正確的解決方案,但我需要一個算法,如果可用的話。

NP-hard意味着沒有已知的算法(以確定解決方案)比強力方法執行得更好。

所以你可能需要一個​​,但哪一個只適合你的需要,只有你可以知道。

什麼是最好的算法呢?

定義「最佳」。

0

這是將整數集劃分爲兩個子集的一個着名問題的變體,其中兩個子集的總和相等或儘可能接近相等。然而,你提出的問題更難 - 你還必須檢查所有的組合,其中一個元素從原始集合中刪除。

由於原始問題是NP完全的,這個也是NP完全的(實際上,這是問題的優化版本,甚至是NP-hard,正如Bergi的答案中正確提到的那樣)。好消息是,即使在這個更難的版本中,貪婪的方法在大多數情況下都能給你一個滿意的答案。策略如下:從原始集合中取出最大元素,並將它們放入第一個和第二個子集中,每個子集中一個。來自原始集合的每個其他元素放在子集的總和較小的子集中,並迭代地重複該過程直到您選取所有元素。

要獲得最佳結果,您需要對原始集合的所有N個子集重複此過程,在這裏通過刪除索引爲1,2,...,N的元素來獲得每個子集。這是什麼讓這個問題變得更加困難。

如果您對更先進的方法感興趣,請看Karmarkar-Karp differencing algorithm

參見:

相關問題