算法:矩形排序

littlemonster 2009-09-29 10:35:17
大家好,

题目:
我有一堆矩形。每个矩形的行跟列都有标号(阿拉伯数字),比如矩形1的行是有1,5,9,21。列是有 8, 9, 55, 99. 这些矩形有些是重叠的。
如图
http://homes.esat.kuleuven.be/~hsun/dada/rectangles.png

目标:
我现在要放置这些矩形,希望得到一个最优的图,就是图中尽量不要有太多的被分割的(小块)小矩形。

Tips:
当我放置好第一个矩形的时候,它的位置就被固定在放置空间中。但是在这个矩形自己的区域内,它的行列号是可以移动的。
然后我接着放第二个矩形,直到放完所有的矩形。由于随着矩形数目的增加,有些跟其他矩形有重叠的矩形后来不得不被分割成几个小矩形,因为随着越来越多的矩形被放,越来越多的行列号的位置被固定。
求能使得最后得到的图里矩形数目最少的算法,也就是能得到最优图。

我现在的算法是:
1 我先根据矩形的大小与它与其他所有矩形的关联度(就是它与其他所有矩形的重叠面积)来排序,先给矩形们排序。
2 然后我按照步骤1排出来的顺序来放所有的矩形。当我放完第一个矩形后,放置空间就被分成2个区域(如上图的右图)。当我放第二个矩形的时候,我用第二个矩形的行号来跟这2个被第一个矩形分割成的区域的行号比对,尽量让他们相同的行号挨在一起,以避免分割。这样当放好第二个矩形后,放置空间又被分成n个区域,我再用第三个矩形的行号跟这n个区域的行号分别比对以尽量避免分割,以此类推继续放完所有的矩形。(如上图的右图)。列的排序跟行一样。

欢迎大家讨论~ 谢谢~
...全文
453 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeroieme 2009-09-30
  • 打赏
  • 举报
回复
读不懂
littlemonster 2009-09-30
  • 打赏
  • 举报
回复
谢谢回复。
方块不能旋转。
等我先去看看什么是二维背包。
继续期待。。。


[Quote=引用 5 楼 tophot 的回复:]
我认为你的第一步是没有必要的。既然要重排,那么它和以前的放置方法就不存在关系。

这个问题复杂就在方块还可以分割,要找到最佳的分割方案很不容易,大致相当于一个二维的背包问题。
先从最大的块开始找,看看有没有两个块的长度加起来等于空间长度的(不知道方块能不能旋转)。
如果找到就先放进去,剩下空间的就按方块大小依次往里放。
[/Quote]
tophot 2009-09-30
  • 打赏
  • 举报
回复
我认为你的第一步是没有必要的。既然要重排,那么它和以前的放置方法就不存在关系。

这个问题复杂就在方块还可以分割,要找到最佳的分割方案很不容易,大致相当于一个二维的背包问题。
先从最大的块开始找,看看有没有两个块的长度加起来等于空间长度的(不知道方块能不能旋转)。
如果找到就先放进去,剩下空间的就按方块大小依次往里放。
littlemonster 2009-09-30
  • 打赏
  • 举报
回复
为了说清楚题目,补充一下。。

题目:
我有一堆矩形。每个矩形的行跟列都有标号(阿拉伯数字),比如图中矩形1(蓝色的矩形)的行是1,2,3,4,5,6。列是1, 2, 3, 4.矩形2(粉色的矩形)的行是3,4,5,6,7,8,9,10.列是4,5,6.矩形3(绿色的矩形)的行是1,4,6,9,11,12,13.列是6,7,8,9. 这些矩形有些是重叠的。

[Quote=引用楼主 littlemonster 的回复:]
大家好,

题目:
我有一堆矩形。每个矩形的行跟列都有标号(阿拉伯数字),比如矩形1的行是有1,5,9,21。列是有 8, 9, 55, 99. 这些矩形有些是重叠的。
如图
http://homes.esat.kuleuven.be/~hsun/dada/rectangles.png

目标:
我现在要放置这些矩形,希望得到一个最优的图,就是图中尽量不要有太多的被分割的(小块)小矩形。

Tips:
当我放置好第一个矩形的时候,它的位置就被固定在放置空间中。但是在这个矩形自己的区域内,它的行列号是可以移动的。
然后我接着放第二个矩形,直到放完所有的矩形。由于随着矩形数目的增加,有些跟其他矩形有重叠的矩形后来不得不被分割成几个小矩形,因为随着越来越多的矩形被放,越来越多的行列号的位置被固定。
求能使得最后得到的图里矩形数目最少的算法,也就是能得到最优图。

我现在的算法是:
1 我先根据矩形的大小与它与其他所有矩形的关联度(就是它与其他所有矩形的重叠面积)来排序,先给矩形们排序。
2 然后我按照步骤1排出来的顺序来放所有的矩形。当我放完第一个矩形后,放置空间就被分成2个区域(如上图的右图)。当我放第二个矩形的时候,我用第二个矩形的行号来跟这2个被第一个矩形分割成的区域的行号比对,尽量让他们相同的行号挨在一起,以避免分割。这样当放好第二个矩形后,放置空间又被分成n个区域,我再用第三个矩形的行号跟这n个区域的行号分别比对以尽量避免分割,以此类推继续放完所有的矩形。(如上图的右图)。列的排序跟行一样。

欢迎大家讨论~ 谢谢~
[/Quote]
littlemonster 2009-09-30
  • 打赏
  • 举报
回复
谢谢关注。
Sorry,没解释清楚。
矩形不见得只是4行4列,可以是n行n列 (n>=1)

[Quote=引用 1 楼 liusujian02 的回复:]
比如矩形1的行是有1,5,9,21。列是有 8, 9, 55, 99. 这些矩形有些是重叠的
难道一个矩形中,还有空隙
按照楼主的意思,矩形1只有4行,4列,其他都是空隙

可能是我没有理解题意吧~
[/Quote]
liusujian02 2009-09-29
  • 打赏
  • 举报
回复
比如矩形1的行是有1,5,9,21。列是有 8, 9, 55, 99. 这些矩形有些是重叠的
难道一个矩形中,还有空隙
按照楼主的意思,矩形1只有4行,4列,其他都是空隙

可能是我没有理解题意吧~

33,027

社区成员

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

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