我正在使用 VB.net 2012,我想在代码中执行以下操作:
我有一个长度为 x 的媒体项列表。
列表中的每个项目的持续时间为 y。
我想创建一个总持续时间为 z 的新随机列表,并且项目在这个新列表中只能出现一次。
最好的方法是什么?我不确定这是否属于“背包问题”。无论哪种方式,我可以通过伪代码或实际的 vb.net 代码获得一些帮助来实现这一目标吗?
最佳答案
我可能误解了你,但你似乎有 l
对 (item,x)
的列表并且你想找到 l
(让它成为 l'
)使得 sum(l'.e.item) == z
。
不幸的是 - 你描述的是 Subset Sum Problem ,即 NP-Complete ,所以没有已知的多项式解。
如果列表相当小,您可以使用蛮力(检查所有可能性)。还有DP solution如果数字都是整数,则在伪多项式时间内运行。
一些替代方案是近似算法或启发式算法 - 例如 Genetic Algorithms .
关于.net - 从源列表创建新的随机列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13696600/