-2

すべて正で、数値 N より小さいことがわかっている要素を含む配列があるとします。

すべての要素の合計が正確に N になるサブセットが配列内にあるかどうかを調べるアルゴリズムの一般的で高レベルの説明を誰かが教えてくれませんか?

特に効率的である必要はありません。私が扱っているセットは非常に小さいです。

4

2 に答える 2

1

効率が重要でない場合、高レベルのアルゴリズムは次のとおりです。

input: array A[1..K] of positive numbers, positive N

    for each subset S of { 1..K }
        sum = 0
        for each i in S
            sum = sum + A[i]
        end
        if (sum equals N) return true
    end
    return false
于 2013-02-17T04:12:16.097 に答える
1

擬似コード。非常に非効率的です。

if empty(numbers) return false
return hasSumSubset(numbers, N)

boolean hasSumSubset(numbers[], N):
   p = pop(numbers)
   if empty(numbers) return N == p
   return hasSumSubset(numbers, N-p) or hasSumSubset(numbers, N)

これを実際に実装する場合numbersは、再帰呼び出し用にコピーされていることを確認してください(refによって渡されないようにしてください)。そうしないと、正しく機能しません。

于 2013-02-17T04:12:25.653 に答える