【问题标题】:Bin packing - exact np-hard exponential algorithmBin 打包 - 精确的 np-hard 指数算法
【发布时间】:2013-03-27 13:48:15
【问题描述】:

我使用最佳拟合方法为装箱问题编写了一个启发式算法, itens S=(i1,...,in), bins size T, and a 希望创建一个真正的精确指数 算法女巫计算最佳解决方案(打包所有垃圾箱的最小数量 itens),但我不知道如何检查包装的每一种可能性,我在 C 中做。

有人可以告诉我我必须使用哪些结构吗?我怎样才能测试itens的所有de组合?它必须是递归算法吗?有一些可以帮助我的书或文章吗?

对不起我的英语不好

【问题讨论】:

  • NP 完全问题的关键在于检查所有选项很快变得不可行。您只想对小问题运行这个精确的算法吗?
  • 是的,解决小问题
  • 我们是否假设每个 bin 的大小不同,并且每个对象的大小也不同?
  • 垃圾箱大小相同,不需要的对象

标签: c algorithm combinations brute-force bin-packing


【解决方案1】:

给出的算法会发现一个打包,通常是一个相当好的,但不一定是最优的,所以它没有解决问题。

对于 NP 完全问题,解决它们的算法通常最容易递归地描述(迭代描述最终会明确所有被递归隐藏的簿记)。对于 bin 打包,您可以从最小数量的 bin 开始(对象大小总和除以 bin 大小的上高斯,但您甚至可以从 1 开始),尝试将对象分配到 bin 的所有组合,检查每个这样的分配它是合法的(bin 内容大小的总和

您要求结构,这里有一个想法:每个 bin 应该以某种方式描述包含的对象(列表或数组),并且您需要所有 bin 的列表(或数组)。使用这些相当简单的结构,递归算法看起来像这样:要尝试所有可能的分配,您对每个对象运行一个循环,该循环将尝试将其分配给每个可用的 bin。在检查合法性之前等待分配所有对象,或者(作为次要优化)在继续下一个对象之前只将一个对象分配给它适合的箱(这是在最后一个对象已经结束时结束的递归)已分配),如果没有找到这样的 bin,则返回上一个对象,或者(对于第一个对象)在重试之前增加 bin 的数量。

希望这会有所帮助。

【讨论】:

  • 这是一个 dp 解决方案,它比您的算法更快:stackoverflow.com/questions/8310385/…
  • 是的,对于 NP 完全问题,了解复杂的算法至关重要,绝不是指导性的算法,因为它们的复杂性......仍然是指数级的。这确实是人们所要求的......
  • 您能详细说明一下吗?什么是完整的,什么是 np-hard?
  • 总结在维基百科中可以找到的内容:NP 是存在非确定性图灵机的一类决策问题,它将接受(或拒绝)多项式运行时中的任何输入(即图灵机的步数以输入大小的多项式为界)。
  • 如果 NP 中的任何问题都可以在多项式时间内简化为 NP 难题,即 确定性 图灵机可以将 NP 中问题的输入转换为在多个步骤中输入另一个问题,该步骤由输入大小的多项式限定,使得转换后的输入被该问题的图灵机接受当且仅当它被图灵机接受用于 NP 中的问题.
猜你喜欢
  • 2012-01-03
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2011-04-18
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多