算法:矩形排序
大家好,
题目:
我有一堆矩形。每个矩形的行跟列都有标号(阿拉伯数字),比如矩形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个区域的行号分别比对以尽量避免分割,以此类推继续放完所有的矩形。(如上图的右图)。列的排序跟行一样。
欢迎大家讨论~ 谢谢~
题目:
我有一堆矩形。每个矩形的行跟列都有标号(阿拉伯数字),比如矩形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个区域的行号分别比对以尽量避免分割,以此类推继续放完所有的矩形。(如上图的右图)。列的排序跟行一样。
欢迎大家讨论~ 谢谢~
...全文
相关推荐
两个矩形求交快速算法
**提取所有顶点坐标**:首先,获取两个矩形的八个顶点坐标,形成一个点集合。 2. **坐标排序**:将这些点的X坐标和Y坐标分别进行升序排序,得到两个有序列表。 3.
程序设计与算法(三)期末考试之015:编程填空:矩形排序
总时间限制: 1000ms 内存限制: 1024kB // 在此处补充你的代码 描述 给定一系列边长已知的矩形,输出对矩形进行两种排序的结果。 在第一种排序中,先按矩形的面积从大到小排序;若两个矩形的面积相同,则周长大的排在前。 在第二种排序中,先按矩形的周长从小到大排序;若两个矩形的周长相同,则面积小的排在前。 #include <iostream> #include <set> using namespace std; int main(...
矩形条覆盖问题的贪心算法
贪心算法的基本思想是,每次做出当前看起来最好的选择,而不是考虑未来的影响。在解决矩形条覆盖问题时,我们可以采用以下步骤:1. **排序**:首先,对矩形条按照它们的高度进行非降序排列。
二维矩形装箱算法--二叉树--java实现
在实际的装箱算法实现中,可能会采用以下步骤:1. **初始化**:创建车辆和箱子对象,根据实际情况设置它们的尺寸。2. **排序**:根据策略(如面积降序、长边优先等)对箱子进行排序。3.
算法-矩形并的面积(51Nod-2488)(包含源程序).rar
**优化算法**:我们可以对矩形进行排序,例如按照矩形的x坐标排序,然后使用扫线算法或者区间树等数据结构来高效地处理矩形的叠加。


