第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

子集大小固定的總和子集

子集大小固定的總和子集

該款項(xiàng)子集的問題指出:給定一組整數(shù),是否存在一個總和為零的非空子集?通常,此問題是NP完全的。我很好奇這個輕微變體的復(fù)雜性:給定一組整數(shù),是否存在大小k和的總和為零的子集?例如,如果k = 1您可以進(jìn)行二進(jìn)制搜索以找到答案O(log n)。如果為k = 2,則可以將其簡化為O(n log n)(例如,請參見從總和等于給定數(shù)的數(shù)組中查找一對元素)。如果為k = 3,則可以執(zhí)行此操作O(n^2)(例如,請參見在數(shù)組中求和最接近給定數(shù)字的三個元素)。是否存在一個已知的界限可以作為函數(shù)來解決這個問題k?出于動機(jī),我在考慮這個問題,如何將一個數(shù)組分成兩部分,以使這兩部分的平均值相等?并嘗試確定它是否實(shí)際上是NP完整的。答案在于是否存在上述公式。除非有一般解決方案,否則我對了解的最佳界限會非常感興趣k=4。
查看完整描述

3 回答

?
Qyouu

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超11個贊

對于k = 4,空間復(fù)雜度O(n),時(shí)間復(fù)雜度O(n 2 * log(n))

對數(shù)組進(jìn)行排序。從最小的2個元素和最大lesser的2個元素開始(a[i] + a[j]),以非遞減順序計(jì)算2個元素的所有greater和,(a[k] + a[l])并以非遞增順序計(jì)算2個元素的所有和。lesser如果總和小于零,則增加總和;如果總和大于零,則增加greater一;如果總和為零(成功)或a[i] + a[j] > a[k] + a[l](失?。瑒t停止。

訣竅是遍歷所有索引,i并且j這種方式(a[i] + a[j])永遠(yuǎn)不會減少。并且對于kl(a[k] + a[l])永遠(yuǎn)不應(yīng)該增加。優(yōu)先級隊(duì)列有助于實(shí)現(xiàn)此目的:

  1. 放入key=(a[i] + a[j]), value=(i = 0, j = 1)優(yōu)先級隊(duì)列。

  2. (sum, i, j)從優(yōu)先級隊(duì)列中彈出。

  3. 使用sum上述算法。

  4. (a[i+1] + a[j]), i+1, j(a[i] + a[j+1]), i, j+1優(yōu)先級隊(duì)列僅如果不已經(jīng)使用了這些元素。為了跟蹤使用過的元素,請為每個“ i”維護(hù)一個最大使用的“ j”數(shù)組。僅使用大于“ i”的“ j”值就足夠了。

  5. 從步驟2繼續(xù)。

對于k> 4

如果將空間復(fù)雜度限制為O(n),那么我將無法找到比將蠻力用于k-4值并將上述算法用于剩余4值更好的方法。時(shí)間復(fù)雜度O(n (k-2) * log(n))。

對于非常大的k 整數(shù),線性規(guī)劃可能會有所改善。

更新資料

如果n非常大(與最大整數(shù)值相同的順序),則可以實(shí)現(xiàn)O(1)優(yōu)先級隊(duì)列,從而提高O(n 2)和O(n (k-2))的復(fù)雜度。

如果為n >= k * INT_MAX,則可以使用具有O(n)空間復(fù)雜度的其他算法。為所有可能的k/2值之和預(yù)先計(jì)算一個位集。并使用它來檢查其他k/2值的總和。時(shí)間復(fù)雜度為O(n (ceil(k / 2)))。


查看完整回答
反對 回復(fù) 2019-11-28
  • 3 回答
  • 0 關(guān)注
  • 772 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號