繁体   English   中英

段打包算法

[英]Segment packing algorithm

我提出了一个有趣的问题(我认为),但找不到解决方案。 这个NP-Complete是否可能(像其他一些包装问题一样)? 如果是这样,减价将如何?

给我们一个数组1..n ,其中一些元素被占用并且段的长度列表。 问题是,我们是否可以将这些段打包到此数组中,以使段之间不重叠并且不占用元素?

示例,数组:| _ _ _ _ x _ _ _ _ _ _ | (x-占用,下划线表示它是免费的)和长度:3、3、4。在这种情况下,答案是肯定的,因为实际上我们在该数组中有两个容器:4、6,我们可以打包前两个段在容量为6的容器中,最后一个到第一个容器。

让我们尝试用分区问题作为基础问题来表述归约。

分区问题

划分问题是确定给定的正整数多集S是否可以划分为两个子集S1和S2的任务,以使S1中的数字总和等于S2中的数字总和。 (来自上面的Wiki链接)。

例:

  • 给定S = {3,1,1,2,2,1}
  • 分区问题的有效解决方案是两个集合S1 = {1,1,1,2}和S2 = {2,3}
  • 两组总和为5,并且将S分区。

减少

  • 给定:一个分区问题实例,例如S = {3,1,1,2,2,1}
  • 总计值:n = sum(X)
  • 创建数组| +++ ... x *** ... | ||| = n / 2; | * | = n / 2(基数)
    • | +++++ X ***** | (间隙充当类拆分)
  • 相加等于整数大小的段
    • 细分= {###,#,#,##,##,#}
  • 用某种算法解决上述问题
    • 有效的解决方案:| #####x ## ###| (仅为可视化引入空白)这种减少在多项式时间内是可行的(很明显,原始问题出在NP中)。 这意味着,最初的问题是NP完全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM