要使合并得到的面积最小,得使拼接形成的空隙最小。因为图片总和的面积是不变的,无论怎么拼,这部分面积不会改变。而用于弥补长短边造成的空隙因拼接方法不一样,会有大有小。
此次赵进的需求是所有图形都是矩形。
对于以上算法实施有两种选择:1.贪心算法。2.动态规划算法。
贪心法每次选择较大的图片拼接在一起,空隙地方用小图片填充。 动态规划:每次选择最优的算法,基于这个最优的算法逐级形成最优算法。
相比而言,贪心算法最快,但形成的结果往往不是最优。而动态规划需要花些时间计算,结果往往比贪心算法好。但也不是绝对的,有极少情况,贪心算法算出来的比动态规划好。
此算法选用动态规划思想,算法步骤如下:
1. 把所有要拼接图形的边长(长、宽)形成一个集合S。
2. 从集合中选出边长最小,且相近(相等优先)边长的两个图片,并拼接在一起。若待选择的两个图形最小的边长相同,则选择面积最小的图形。
3. 重新计算这个拼接在一起的图形的边长,并更新到集合S。
4. 循环步骤1,只到所有的图形拼接完毕(S集合为空)。
这样使每次形成的空隙最小,下一次拼接也是基于上一次基础的,如此循环,拼接出图形的面积是最小的。
大家可以在纸上画一些大小不一的矩形,然后按我的算法做拼接。若能找出一种拼接出来的面积比我的小,说明我的算法不是最优的。
此算法容易实现,操作集合S,根据拼接确定坐标即可。
个人愚见,期待更好的算法。
例子:
可算得左图面积:27, 右图面积:45。