【问题标题】:Algorithm: Picking n items of different weights to obtain an average item-weight算法:挑选n个不同权重的物品,得到一个平均物品重量
【发布时间】:2016-02-08 19:55:21
【问题描述】:

我有 5 个文件夹,每个文件夹包含大小为 10KB、500KB、1MB、5MB 和 30MB 的“n”个文件。 现在我需要从这些文件夹中选择恰好 15000 个文件并将它们放入一个新文件夹中,以便我从每个文件夹中选择至少一个文件平均文件大小仍然在 1MB 左右。 我尝试过处理加权平均分布以及沿着这个问题http://goo.gl/uAHOk1 的思路,但无法得出任何结论。

这个问题可以在多项式时间内解决吗?

编辑

来自 cmets:

  1. 为清楚起见,您可以认为每个文件夹正好有 16k 个文件。
  2. 大约 1 MB 我的意思是平均文件大小在 1 到 1.5 MB 的范围内。例如,如果我必须准确地选择 5 个文件并牢记问题的限制,那么唯一的解决方案就是从每个文件夹中选择一个文件。然后,平均文件大小将变为 7.3MB

【问题讨论】:

  • “大约”1MB 是什么意思?有特定的间隔吗?
  • 看来,基于您需要对公式的数学帮助,而不是如何编写此代码,这个问题在@987654322 上会更合适(并且回答得更快) @.
  • @harold 我猜他们的意思是最小化 |平均 - 1MB | 因为在问题的表述中没有其他目标......
  • 你的问题表述不清楚,至少对我来说是这样。 每个 文件夹是否有n 文件?如果不是,它们是如何分布在文件夹中的? n 有多大,你有没有容量限制,你可以用完特定大小的文件?
  • 如果您从每个文件夹中选择 5 个,然后从 10KB 中选择 30 个,那么对于“周围”的某些定义,它将是“大约 1MB”。然后只需选择 14965 个 1MB 的文件(你有它们还是有限制?)。但这看起来像是作弊,它肯定不是优化算法。

标签: algorithm math dynamic-programming distribution mathematical-optimization


【解决方案1】:

如果您希望平均大小尽可能接近您的值,此问题类似于以下 ILP:

s_ij = size of file i in folder j  [Parameter]
X_ij = select file i from folder j [Binary variable]

max  Sum_ij s_ij * X_ij
such that
Sum_ij s_ij * X_ij <= 15,000 * average_size
Sum_ij X_ij = 15000
Sum_i X_ij >= 1  forall j

这几乎是一个额外的维度和约束(每个文件夹一个文件)的装箱问题。 正如 Harold 所提到的,我们可以从浏览每个文件夹并选择一个文件开始 - 例如最小的一个。这可以在多项式时间内完成。 剩下的是一个装箱问题,您可以从任何文件夹中的任何文件中进行选择,以填补 15,000*average_size 和预选文件总和之间的空白。众所周知,装箱是 NP-hard,因此您将无法在 多项式时间内解决这个问题。

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多