簡體   English   中英

子集總和,甚至子集大小

[英]Subset sum but even subset size

因此,基本上,它與子集和問題的想法相同,但有一個限制: 找到的子集需要具有偶數大小

例如:

numbers {4, 3, 3, 5, 1, 2, 7, 12}
find subset that sums up to 10
=> solution: {4, 3, 1, 2} (or {3, 7} but not {4, 3, 3} )

有沒有找到這種子集的簡單方法? (該方法應該是“有效的”,而不僅僅是嘗試所有可能的子集...)

這是我的代碼,用於查找“常規”子集:

    int n = 8;
    int m = 11;
    boolean[][] S = new boolean[n][m];
    int[] N = new int[] {4, 3, 3, 5, 1, 2, 7, 12};
    S[0][0] = true;
    S[0][S[0]] = true;

for(int i = 1; i < n; i++) {
        for(int j = 0; j < m; j++) {
            if(N[i] == j) {
                S[i][j] = true;
            } else if(j - N[i] >= 0) {
                S[i][j] = S[i-1][j] || S[i-1][j - N[i]];
            } else {
                S[i][j] = S[i-1][j];
            }
        }
    }

在當前代碼中,如果可以將值j設為最多i的數字子集,則S [i] [j]為true。

相反,如果您可以將值j作為不超過i的數字的子集,且使用的數字數等於k模2,則計算S [i] [j] [k]為真。

換句話說,k為0或1。

這將需要您現有解決方案大約兩倍的計算量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM