【问题标题】:Algorithm for finding a sum within an array? [closed]在数组中求和的算法? [关闭]
【发布时间】:2013-02-17 04:01:27
【问题描述】:

假设您有一个数组,其中包含您知道的所有元素都是正数,并且小于数字 N。

谁能给我一个算法的一般高级描述,以确定数组中是否存在某个子集,其中所有元素加起来正好为 N?

不需要特别高效;我正在使用的集合非常小。

【问题讨论】:

    标签: sum set subset-sum array-algorithms


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      伪代码。效率极低。

      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 传入);否则将无法正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-07
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多