0

我正在使用 VB.NET,我正在尝试提出一些算法或一些伪代码,或者一些 VB.NET 代码,它们可以让我执行以下操作(希望我能很好地解释这一点):

我有 2 个集合对象,Cob1 和 Cob2。这些集合对象存储实现称为 ICob 的接口的对象。ICob 有 3 个属性。一个布尔值 IsSelected 属性、一个名为 Length 的属性,它返回一个 TimeSpan,以及一个 Rating 属性,它是一个短整数。

好的,现在 Cob1 有大约 100 个对象存储在集合中,而 Cob2 是一个空集合。我想要做的是从 Cob1 中选择对象并将它们复制到 Cob2。我希望在选择对象时遵守以下规则:

  1. 我希望能够指定一个时间跨度,并且我希望选择足够多的对象以适应我指定的时间跨度(基于 Length 属性)。例如,如果我将 10 分钟的时间跨度传递给我的函数,它应该选择足够多的对象来填满整个 10 分钟的窗口,或者尽可能接近填满它。

  2. 不应选择任何对象两次。

  3. 具有较高等级(通过等级属性)的对象应该比其他对象更有可能被拾取。

  4. 不应再次选择在过去 30 分钟内已选择的任何对象(以便每个对象最终将至少被选择一次),无论评级如何。

谁能给我一些关于如何实现这一目标的提示?提示可以是心理过程、VB.NET 示例代码、伪代码或任何其他可能对我有帮助的形式。

谢谢

编辑:

如果我透露我在现实生活中想要做的事情,也许这会对每个人都有帮助。

我正在为一个广播电台编写软件,它会自动选择要播放的音乐和广告,有点像计算机化的程序管理器。

长度表示声音字节(歌曲或广告)的长度,评级就是这样。如果这首歌很受欢迎,它会获得更多的播放时间。如果广告商支付更多的钱,那么它也会获得更多的播出时间。

所以我的程序应该选择播放20分钟左右的歌曲,然后选择一些广告播放5分钟左右。

希望这会有所帮助。

感谢大家的投入!

艾伦

4

2 回答 2

4

注意:

限制 1 来自经典的背包问题,该问题适用于集合,如限制 2 所要求的。

限制 3 相当模糊。是价值高还是寿命覆盖率高?如果您没有指定最大化的目标函数(或者,准确地说,有两个:寿命本身和速率),则有一些帕累托最优解。

限制 4 可以通过制作地图对象 -> last time selected. 来实现,以黑名单的形式。

长话短说:首先我会通过限制 4 将对象列入黑名单来过滤集合,然后应用背包算法。

于 2009-04-29T23:40:21.243 回答
0

为了实施 4.,我相信您需要保存上次选择 Cob 的日期/时间。然后,我将按以下步骤进行:

  1. 过滤掉过去 30 分钟内没有被选中的那些。

  2. 按评级排序并将您的“光标”设置在列表中的第一项上。

  3. 检查项目的时间跨度。如果足够短以适应指定的时间,请选择它。如果没有,请转到 3 并继续下一项。

  4. 检查您的时间跨度是否已填满。如果是,你就完成了。如果否,请转到 3 并继续下一项。

于 2009-04-29T23:34:13.397 回答