2
假設我有一個大小爲n的數值的有限集合。如何枚舉一個集合的所有k-組合?
問題:是否有一個有效的算法來枚舉該組的k組合,以便組合I在組合J之前如果I中元素的總和小於或等於J中元素的總和?
很明顯,可以簡單地枚舉組合並根據它們的總和進行排序。但是,如果該集合很大,所有組合的粗暴枚舉,更不用說排序了,將是不可行的。如果我只想獲得第一個選擇按總和排序的(n,k)組合,是否有可能在宇宙熱死之前獲得它們?
假設我有一個大小爲n的數值的有限集合。如何枚舉一個集合的所有k-組合?
問題:是否有一個有效的算法來枚舉該組的k組合,以便組合I在組合J之前如果I中元素的總和小於或等於J中元素的總和?
很明顯,可以簡單地枚舉組合並根據它們的總和進行排序。但是,如果該集合很大,所有組合的粗暴枚舉,更不用說排序了,將是不可行的。如果我只想獲得第一個選擇按總和排序的(n,k)組合,是否有可能在宇宙熱死之前獲得它們?
沒有用這種方法枚舉集合的多項式算法(除非P=NP)。
如果有這樣的算法(讓它成爲A),那麼我們就可以解決subset sum problem多項式:
請注意,步驟1運行多項式(假設),步驟2運行在O(log(2^n)) = O(n)
。
結論:由於子集和問題是NP-Complete,有效地解決這一問題將被證明P = NP - 因此沒有已知的多項式解決問題的方法。
編輯:即使問題是NP難,讓「最小」 m
子集可以在O(n+2^m)
通過選擇最小m
元素,生成所有這些m
元素的子集做 - 並選擇那些最小的m
。所以對於相當小的m
值 - 計算它可能是可行的。
噢,是的,謝謝,這是非常明確的。您想在報告的致謝部分中引用嗎? – wvoq
@wvoq:這將是很好的,但不是強制性的:)。這是一個非常好的問題! – amit
其實,由於OP只對第一個'm'的答案感興趣,按照他們的求和值的順序,你的證明是無效的。 (或者只是不適用?) – RBarryYoung