【问题标题】:an algorithm design problem rectangle cover with different small rectangle or square一个算法设计问题矩形覆盖不同的小矩形或正方形
【发布时间】:2019-07-01 09:20:03
【问题描述】:

这个问题可以描述如下;

给定一个矩形,宽度和高度可以是随机的大数;并给定一些较小的矩形或正方形,表示基本元素,例如6*6, 8*4, 4*4, 6*4, 4*4, 2*2, 1*1;是否有一些算法可以有效地覆盖给定的矩形?有两个约束,

  1. 最好使用相同的基本元素;
  2. 首先覆盖较大的基本元素。

例如,给一个8*8正方形;可以分为一个6*6,然后是七个2*2;另一个选项是四个4*4;另一个选项是两个8*4;另一个选项是八个1*1;还有一些其他的选择可以得到8*8 方块。使用给定的两个约束,将选择两个8*4 作为最佳结果。

有什么好的算法可以解决这个问题吗?

【问题讨论】:

  • 这让我想起了一些在 Hackerrank 上提供的练习。您是否已经尝试搜索镶嵌或平铺?我想这是相关数学学科的英文术语。
  • 您的限制条件不清楚。考虑一个6*10 正方形。你可以用6*6 然后6*4 来做。您也可以使用 15 2*2。哪个更好,只使用 2 个块,还是只使用一种块中的许多块?
  • 感谢 cmets,是的,约束不精确;这是一个现实世界的问题,我需要更多的约束来解决这个问题,我尝试了动态规划,搜索空间仍然很大。

标签: algorithm


【解决方案1】:

您的问题是众所周知的knapsack problem 的变体,因此可能会朝这个方向进行一些研究。 这是 NP 难的。

您的问题困扰我的一件事是您的评分功能非常不确定。因此,您的矩形没有附加值,也不会因引入另一种类型的图块而受到惩罚,因此您可以清楚地说,对于覆盖10*10 区域,解决方案1 x 6*6, 1 x 4*6, 1 x 6*4, 1 x 4*4(元素可以转动吗?)比@987654324 更好或更差@。哪个约束权重更大:减少不同的部分,或拥有更大的组件。

基于这个缺失的规范,我想说最简单的方法是使用最大的可用瓷砖,这些边是要填充的矩形的分隔线。因此解决方案始终为n x i*j,因为这是一个无脑解决方案并且始终有效且不需要任何复杂的算法并且它符合第一个(最高优先级?!)约束。

小旁注:

您的问题也出现在工业生产的许多领域,例如在设计电路板时的电气工程中。添加另一个不同的组件也会增加成本,而不仅仅是组件价格。
因此,希望保持材料清单 (BOM) 简短,并尝试替换仅由其他组件使用一次的组件。例如。在电路板上。如果设计中已经有很多 100Ohm 电阻,那么不放置单个 200Ohm 电阻而是放置 2 100Ohm 电阻可能会更便宜。因此可以避免您需要购买、存储、可能需要测试以及在生产线中设置的额外物品....

【讨论】:

  • 感谢您提供详细而有用的 cmets,现在我也使用与您描述的类似的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多