大家好,

题目:
我有一堆矩形。每个矩形的行跟列都有标号(阿拉伯数字),比如图中矩形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. 这些矩形有些是重叠的。
如图

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

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

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

欢迎大家讨论~ 谢谢~