【问题标题】:Simple storage allocation algorithm简单的存储分配算法
【发布时间】:2012-10-01 11:27:14
【问题描述】:

我们有一大堆机器使用一大堆数据存储。我们希望将所有机器的数据转移到新的数据存储中。这些新商店的机器可用存储空间量各不相同。此外,每台机器需要存储的数据量各不相同。一台机器的所有数据都必须存储在一个数据存储中;它不能被拆分。除此之外,如何分配数据并不重要。

我们目前拥有的数据多于我们的空间,因此某些机器不可避免地需要将其数据留在原处,直到我们找到更多数据。与此同时,有没有人知道一种算法(相对简单:我没那么聪明),它可以为我们拥有的存储提供最佳或接近最佳的分配(即分配后新商店剩余的空间最少)?

我知道这听起来像是一个家庭作业问题,但我向你保证这是真的!

【问题讨论】:

  • 我有一种感觉这是 NP-hard... 它与一个称为 0-1 多重背包问题(我认为是 NP-hard)的问题非常相似,它本身就是一个一个经过充分研究的背包问题的版本。这应该给你一个看的方向......
  • 在任何情况下,您都可以将问题写成整数线性程序(按照背包问题的处理方式 - 这很容易),然后使用免费的现成 ILP 求解器得到一个合理的解决方案。
  • 谢谢 Bitwise,我会调查的。从维基百科条目开始,似乎是同样的问题:)
  • 祝你好运,注意有一点不同,因为在背包问题中,通常每个项目都有一个“重量”(在你的情况下是空格)和一个“价值”(我猜在您的情况是恒定的或与重量相同)。

标签: algorithm storage allocation


【解决方案1】:

乍一看,这似乎是多背包问题(http://www.or.deis.unibo.it/knapsack.html,第 6.6 章“多背包问题 - 近似算法”),但实际上它是一个调度问题,因为它涉及时间元素。不用说,解决这些类型的问题很复杂。一种方法是将它们建模为网络流并使用像 GOBLIN 这样的网络流库。

在您的情况下,请注意您实际上并不希望以最佳方式填充存储,因为如果您这样做,则更有可能存储较小的数据包,因为它会导致更紧密的填充。这很糟糕,因为如果将大包裹留在机器上,那么您未来的包装将变得越来越糟糕。您要做的是优先存储较大的包裹,即使这意味着在商店中留出更多额外空间,因为这样您将来会获得更大的灵活性。

下面是如何用一个简单的算法来解决这个问题:

(1) 确定 bin 大小并对其进行排序。例如,如果您有 3 个存储空间分别为 20 GB、45 GB 和 70 GB,那么您的目标是 { 20, 45, 70 }。

(2) 按大小对所有数据包进行排序。例如,您可能有数据包:{ 2, 2, 4, 6, 7, 7, 8, 11, 13, 14, 17, 23, 29, 37 }。

(3) 如果任何包裹的总和 > 95% 的商店,则将它们放入该商店并转到步骤 (1)。这里不是这样。

(4) 生成两个包的所有排列。

(5) 如果任何排列的总和 > 95% 的存储,则将它们放入该存储中。如果有领带,则更喜欢与更大包装的组合。在我的示例中,有两个这样的对 { 37, 8 } = 45 和 { 17, 2 } = 19。(请注意,使用 { 17, 2 } 胜过使用 { 13, 7 })。如果您找到一个或多个匹配项,请返回步骤 (1)。

好的,现在我们只剩下一家商店:70 和以下包裹:{ 2, 4, 6, 7, 7, 11, 13, 14, 23, 29 }。

(6) 将烫发数加 1 并转到步骤 5。例如,在我们的例子中,我们发现没有 3 烫发加到 70 的 95% 以上,但是 4 烫发 { 29, 23, 14 , 4 } = 70。最后我们留下了机器上的包 { 2, 6, 7, 7, 11, 13 }。请注意,这些大多是较小的软件包。

请注意,perms 以相反的词法顺序进行测试(最大的在前)。例如,如果你有“abcde”,其中 e 是最大的,那么 3-perms 的逆词法顺序是:

cde
bde
阿德
公元前
王牌
等等

这个算法非常简单,会根据你的情况产生很好的结果。

【讨论】:

  • 这是一个非常棒的概念。我还没有实现它,但我会开始的。我最初构想了一种算法,它简单地将包裹从最大到最小进行排序,然后对于每个包裹,寻找插入包裹后剩余空间最少(正)的 bin。它表现得很好,但我认为这会做得更好。谢谢泰勒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-24
  • 2010-12-29
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-10
相关资源
最近更新 更多