-1

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

  1. 接受两个参数:对象列表和数字
  2. 遍历列表并找到等于数字的第一组对象。
  3. 如果找到一个集合,则停止迭代并返回该集合。

所以,我有一个用户定义对象的列表,比如 Person 。比如说,Person 对象有两个字段,名称和年龄。例如,

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

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

4

1 回答 1

0

这是子集和问题

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

但是,它确实有一个伪多项式解决方案,使用动态编程,即使用下一个递归函数:

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

如果存在这样的解决方案,运行 withf(n,W)产生 true,否则产生 false。

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

于 2013-08-07T13:37:32.457 回答