我搜索算法来解决这样的问题:
我的窗户很少,每个窗户都可以移动并重新调整尺寸,但宽度和高度之间的比例如下,例如。 2:1(身高:宽度)。
每个窗口都不能在其他窗口上,所有窗口都必须完全可见。 自由区域(桌面墙纸能见度)必须极小。
有谁能告诉我这类问题需要什么算法?
问候,
答案 0 :(得分:3)
另一种可能比打包更简单的方法是将屏幕大小细分为所需的窗格数,然后适合窗格,以满足窗格内的其他要求。由于您可能随时打开少量窗口,并且由于您的屏幕不会动态更改其大小,因此您可以预先计算1到O(100)个打开窗口所需的所有排列。
答案 1 :(得分:1)
一种方法是将其视为2D packing problem,就像一维装箱问题一样。例如,有一个示例算法here,有一些很好的参考。
答案 2 :(得分:0)
如果您可以放宽所有窗户都具有给定“长宽比”的要求,那么问题将变得非常简单。假设您要在单个屏幕上排列N
个“平铺”,然后可以将它们排列成列,其中列数NumCols
是N
的平方根,当{ {1}}不是一个完美的正方形。瓷砖的所有列都具有相等的宽度。然后,根据需要向上或向下舍入每一列中的瓦片数N
,以使列总数为N/NumCols
。这是Microsoft Excel在“视图”>“全部排列”>“平铺”下所做的工作。 Excel选择在屏幕左侧放置带有少一个图块的列。