把一些矩形拼成一个大矩形,要求留空最少

happycock 2007-08-14 08:31:27
把一些矩形拼成一个大矩形,矩形可以旋转,要求拼后的矩形面积最小,也就是留的空白最少。拼后的矩形没有尺寸限制,如果有多解,最好是长宽接近。
感觉上和下料问题有些区别,因为是尺寸不受限的,不知道这样是会增加复杂度,还是降低复杂度。
如果是限制一维的长或者宽呢,就是长或宽定长,令一维可以增长。
...全文
577 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
happycock 2007-09-29
  • 打赏
  • 举报
回复
CSDN催着要结贴,什么事吗。
超级大笨狼 2007-09-27
  • 打赏
  • 举报
回复
自动排版打印的问题,我也需要这个,我有2万歌词,想打印,不过最后还是放弃了,因为至少需要3000张纸,那么多看起来也不方便.
happycock 2007-09-24
  • 打赏
  • 举报
回复
有个近似解就可以了,问题的规模不会太大,大概在N=30~50之间吧。留边可以在任意位置,不存在一刀切的要求。
kaishui_gu 2007-09-24
  • 打赏
  • 举报
回复
贪婪算法的策略很多,近似程度也不同,想到一个简单的:
1.对所有的矩形进行排序(按长度W),从大到小:A[N]
这样得到一个很粗糙的大矩形,面积为:A[1].W*(A[1].Height+...+A[N].Height)
2.用非常简单的方式来优化这个大矩形:
从最小的矩形开始(即A[N]),按循序填充到大矩形的空白位置(从A[2]开始)

举例来说:
a:W=20,H=10;b:W=10,H=9;c:W=5,H=4;d:W=4,H=4;
1.上面的矩形排好序,得到的矩形面积为:20*(10+9+4+4)=540
2.将d填充到b中(当然,如果添不下,就试试c,一直向下),由于b有10的空位,所以可以填充,填充之后的矩形面积为:20*(10+9+4)=460;
将c填充到b中,同样可以填充:这时的面积为:20*(10+9)=380;

这种算法比较粗糙,应该优化一下,LZ可以自己想想其他的
kaishui_gu 2007-09-01
  • 打赏
  • 举报
回复
太复杂,用贪婪算法算个近似解倒有可能,最优解太难了
flyingdog 2007-09-01
  • 打赏
  • 举报
回复
是np问题。但是有很多相关策略可以找到近试最优值。
你可以参看intel多核比赛复赛第二题。和这个要求差不多。
kaishui_gu 2007-08-27
  • 打赏
  • 举报
回复
不知道LZ所说的留空白是指在大矩形内部还是可以在边上留空白?
zzwu 2007-08-25
  • 打赏
  • 举报
回复
是一个难题
iatsbg 2007-08-25
  • 打赏
  • 举报
回复
(1)用回溯法解决“这些矩形能否放在一个m*n的大矩形里”的问题。
(2)用枚举法和(1)解决“这些矩形能否放在一个面积为S的大矩形里”的问题。
(3)用二分法和(2)解决“能容下这些矩形的大矩形面积最小为多少”的问题。

好复杂啊~
syy64 2007-08-14
  • 打赏
  • 举报
回复
面积最小的话,也就是说尽量拼成正方形。
happycock 2007-08-14
  • 打赏
  • 举报
回复
这个问题的极限解是有的,就是所有矩形的面积和。但显然这个极限解是一点空白都没有。

33,027

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧