首页
社区
课程
招聘
问个头疼的算法问题
发表于: 2013-4-27 17:56 5173

问个头疼的算法问题

2013-4-27 17:56
5173
假如我有一些矩形区域,规格是5*3 (宽5高3),5*5 ,9*9 ,9*1, 2*9(这种不能颠倒)等等,现在有一块区域800 *800,大小足够放下这些,怎么摆放更加合理?有木有类似算法。

谢谢大家了,请积极回答。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 10915
活跃值: (2880)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
2
顶一下~~123456
2013-4-28 01:14
0
雪    币: 44
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
算法,好复杂。。。
2013-4-28 20:17
0
雪    币: 14
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
这个,相当蛋疼,最怕这个了。帮顶
2013-4-28 20:27
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感觉像是背包问题的变种。你查下!它那个是重量,你这个是面积!
2013-4-29 14:33
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这么说好了,楼主完全没把题目说清楚,“合理”是怎么个合理,有木有要求800*800全部放满,还是放满尽可能多的格子,小矩形的限制倒是说了一个,就是不能颠倒,但是数量呢,我是不是可以只用一种小矩形,还是说每种小矩形必须用几个,或1个。  不同的目的,解法不同,不同的限制,解法也不同。 你要把题目描述完整了才能解。
一般的话,可以尝试找规律,有时候一个规律就能搞定。
找不到规律,一般用背包(不过我觉得可能性不大)、状态压缩动态规划,再有就是找规律。
2013-5-2 10:24
0
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
建议你看看  贪婪算法 相关资料
2013-5-2 15:07
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
2D装箱,
写一个函数,参数是大矩形区域和你要装的小矩形区域,
遍历你的小矩形区域,尝试把小矩形放入你的大矩形中,左上角对齐,不能放进去的跳过,如果能放进去,假设当前的小矩形为最好的,然后继续遍历,如果遇到还能放进去的,比较这两个能放进去的哪个好(具体比较可以用谁的面积大,谁的周长大,或者谁的某一边更接近当前大区域的对应边),保留比较得到的比较好的矩形(类似选择排序),遍历完的理论上会有一个小矩形或者没有得到任何能放进去的矩形。
如果没有找到能放进去的矩形,函数结束。
如果有,你想象下,大矩形的左上角和小矩形的左上角是重合的,那么小矩形的右下角就在大矩形内,然后从小矩形的右下角向大矩形的底边或者右边做垂线(这个可以做出两条垂线,垂线最好选择短的),就会把大矩形上小矩形不覆盖的区域分成两个矩形(这个过程你可以画个图看一下比较容易看清效果),然后假设这俩个被划分出来的矩形为大矩形,与剩下的小矩形继续调用本函数(递归)。
2013-5-3 12:43
0
雪    币: 10915
活跃值: (2880)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
9
谢谢大家的回答,感觉8楼兄弟讲的比较贴切.
2013-5-3 19:59
0
游客
登录 | 注册 方可回帖
返回
//