.net - 从源列表创建新的随机列表

标签 .net vb.net algorithm list random

我正在使用 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/

相关文章:

c# - 快速异或算法

vb.net - dataview.rowfilter 语法错误 - 缺少操作数之谜

c# - VB.NET 能否读取 XML?

algorithm - 加密时加密一个长度不变的字符串

c# - 限制 wpf 中的附加依赖属性

asp.net - 对这个操作使用线程本地存储安全吗?

algorithm - 矩阵链乘法+动态规划+递推关系

.net - Protobuf-net memcache provider 反序列化时出现空类型错误

.net - WPF 应用程序的默认字体系列是什么?

c# - 如何制作仅在系统托盘中运行的 .NET Windows 窗体应用程序?