⑴ 将N个大小不等的矩形不重叠地拼在一个指定的大矩形里(大矩形长宽固定),求使占用大矩形区域最小的算法
大矩形图像为矩阵M(二值图像)
小矩形长为a1,a2……an
宽为b1,b2,……bn
所有常量(长和宽)放到一个数列A中,按大小排序;
设置大矩形图像起始点O1(0,0)
if A不为空,then 循环
{
如其中(A中元素)最大的是bi,从数列中删除bi和ai;
O1点删除bi*ai区域(矩阵数值归零),剩余部分生成两个或多个矩形。长宽分别为c1,c2……d1,d2……放到数列B中,按大小排序;
找出B中最小值ci加入数列A排序。O定为ci对应点。
在A中取小于ci的最大常量;从A删除ci;
}
输出矩阵M
请指教
⑵ 求一个排列算法,或者解决的思路!若干矩形拼凑成一个矩形,不能重叠,如何排列可以使最终面积最小
1. 计算宽度之和、高度之和,如果宽度和较大则先处理2.1,否则先处理2.2
2.1. 按照宽度从小到大排列,宽度相同的矩形拼成更大的矩形
2.2. 按照高度做相同的处理
3. 重复以上步骤,直到没有宽、高相同的矩形
1. 计算宽度之和、高度之和,如果宽度和较大则先处理2.1,否则先处理2.2
2.1. 按照宽度从小到大排列,找出两个矩形,使得拼接后的“矩形”面积中空缺部分最小(较可能是宽度相差较小的两个矩形)。
2.2. 按照高度做相同的处理
3. 重复以上步骤,直到只剩下一个矩形(最终解)
以上两段其实是一个意思:尽量用较小的“面积损失”最大限度的减少待处理矩形数。只是第一段是特例,也就是无“面积损失”的拼接。
不过,一般来说,这不会是最优解。