在桌面上安装窗口的算法(如瓷砖)

时间:2010-12-16 02:00:48

标签: algorithm packing tiling

我搜索算法来解决这样的问题:

我的窗户很少,每个窗户都可以移动并重新调整尺寸,但宽度和高度之间的比例如下,例如。 2:1(身高:宽度)。

每个窗口都不能在其他窗口上,所有窗口都必须完全可见。 自由区域(桌面墙纸能见度)必须极小。

有谁能告诉我这类问题需要什么算法?

问候,

3 个答案:

答案 0 :(得分:3)

另一种可能比打包更简单的方法是将屏幕大小细分为所需的窗格数,然后适合窗格,以满足窗​​格内的其他要求。由于您可能随时打开少量窗口,并且由于您的屏幕不会动态更改其大小,因此您可以预先计算1到O(100)个打开窗口所需的所有排列。

答案 1 :(得分:1)

一种方法是将其视为2D packing problem,就像一维装箱问题一样。例如,有一个示例算法here,有一些很好的参考。

答案 2 :(得分:0)

如果您可以放宽所有窗户都具有给定“长宽比”的要求,那么问题将变得非常简单。假设您要在单个屏幕上排列N个“平铺”,然后可以将它们排列成列,其中列数NumColsN的平方根,当{ {1}}不是一个完美的正方形。瓷砖的所有列都具有相等的宽度。然后,根据需要向上或向下舍入每一列中的瓦片数N,以使列总数为N/NumCols。这是Microsoft Excel在“视图”>“全部排列”>“平铺”下所做的工作。 Excel选择在屏幕左侧放置带有少一个图块的列。