查找一组数字等于数字

时间:2013-08-07 13:21:23

标签: c# algorithm

我正在尝试编写一个执行以下操作的c#程序:

  1. 采用两个参数:对象列表和数字
  2. 遍历列表并找到与该数字相等的第一组对象。
  3. 如果找到一个集合并停止迭代,则停止迭代。
  4. 所以,我有一个用户定义对象的列表,比如说Person。比如说,Person对象有两个字段,Name和age。例如,

    MyList
    -   Person1: John, 10
    -   Person2: Mary, 25
    -   Person3: Mike, 35
    -   Person4: Ann, 20
    -   Person5: Joe, 5
    

    我想从列表中找到一个与我传入的数字相等的集合。如果我在上面的列表和50中传递,我想将Person2,Person4,Person5作为列表返回。

1 个答案:

答案 0 :(得分:0)

这是subset sum problem

不幸的是,它是NP-Complete,因此没有已知的多项式解决方案。

但是,它确实有一个pseudo-polynomial solution, using Dyanamic Programming,它正在使用下一个递归函数:

f(i,0) = true
f(0,k) = false (k != 0)
f(i,k) = f(i-1,k) or f(i-1,k-weight[i])

如果此类解决方案存在,则使用f(n,W)运行会返回true,否则返回false。

动态编程解决方案填满表格,在表格填满后,您需要从table[n][W]“回溯”您的步骤,以便找到应该包含在集合中的项目。 有关从表中获取实际元素的更多信息,请参阅this thread