空间(槽)优化算法

时间:2012-08-22 03:47:54

标签: algorithm language-agnostic

我将直接从示例开始:

在游戏中,玩家将使用一个包来存放他们的物品(物品尺寸可变),包也有可变的尺寸。

在一个8x15的插槽中,我需要插入占用2x2插槽的物品,我可以搜索空间以实际检查是否有足够的空间存放此物品 - 这很容易,但是,如果我不喜欢有足够的空间来存储所需的物品吗?这是真正的问题。

我正在尝试找到一种方法来实际重新排列当前包中的所有当前项目,以释放新项目的空间。

是否有任何算法可以帮助我做到这一点?

修改

规则:

  1. 我无法删除包中的任何当前商品,只需重新排列它们,以便在没有足够空间的情况下存储新商品。

1 个答案:

答案 0 :(得分:1)

我认为遗憾的是这是一个NP难题,但你可以使用贪婪的近似算法。近似算法可以如下工作:

  • 按项目卷降序排列所有项目。
  • 通过列表迭代并尝试将当前项目置于任何位置
  • 如果当前项目无法在任何地方安装,请确定无法接收该项目。
  • 如果所有部件都已安装,请确定可以拾取该物品。

这是基于直观的想法,即较大的部件比较小的部件“更难”放置。如果大多数项目是1x1,你可以做的另一件事是蛮力解决方案,这在如此小的库存中是非常可行的。这将如下工作:

  • 尝试当前作品的每一个位置,它仍适合每个位置:
  • 使用下一个未定位的部分执行此操作。

这将始终解决您的问题,但速度较慢(虽然更准确)。这个算法可以通过遗漏每个1x1的片段,然后放置它们来证明。