如何找到适合给定方格的最低可能方格数

时间:2013-03-28 17:53:28

标签: c algorithm math

让我假设我有一个7x7.i的正方形可以用其他正方形填充正方形(即尺寸1x1,2x2 ...... 6x6的正方形)。我怎样才能用最小可能的小正方形填充正方形。请帮帮我。

3 个答案:

答案 0 :(得分:1)

考虑尺寸为s x s的正方形。缩小尺寸m x m的较小正方形将产生正方形m x m,正方形n x n和两个尺寸为m x n的矩形,其中m + n = s

s为偶数时,可以将正方形划分为m = n,在这种情况下,矩形也将是正方形,从而得到4的答案。

但是,当s为奇数时,必须选择mn的值,以便可以使用尽可能少的正方形填充生成的矩形。似乎没有一种直接明显的方法可以找出最佳配置,所以我建议想出一个算法来计算可以用来填充大小为m x n的矩形的最小数量的方块(这是一个稍微简单的问题,我相信它可以用递归算法解决)。所需的平方总数将等于2 x ([number of squares in m x n rectangle] + 1)。您可以使用循环检查1s/2之间的所有m大小。

希望能让你开始。

答案 1 :(得分:0)

考虑尺寸为s x s的正方形。 将s推理为素数。然后解决每个素数sp的问题。 sp x sp的答案与s x s的答案相同。最小的素数可能会给出最低的结果。我没有这方面的证据,但是我已经手动检查了17 x 17。 这是偶数s的Otaias概念的推广,得到了4的答案。

Placiing算法:

你需要从n =(s + 1)/ 2循环,向下舍入到n = s-1。

将n x n正方形放在角落里。

设m = s - n。 将m x m个正方形放置在相邻的角落中并保持放置直到它们(几乎)到达n x n正方形的末端。

剩余空间为m x m(如果幸运的话),或者最多2 m-1 x 2m-1,缺少角落。

使用类似的算法填充剩余空间。首先将n2 x n2方形放置在与缺角部分相对的角落中。

手工工作我获得了以下结果:

s  minimum number of squares:
2   4
3   6
5   8
7   9
11  10
13  11
17  12

答案 2 :(得分:0)

首先检查n是否均匀。如果n是偶数,那么答案就是四,因为没有办法将3个正方形或2个正方形放在一起制作另一个正方形,以便在所有可能情况下解决一半

在您进行之前:此方法不完整,这可能是错误的方法

我只是打算抛出一个开箱即用的想法,因为我觉得这可能有所帮助,并且希望能够推进这个问题。我觉得它可能与Goldbach's weak conjecture有一些关联。该算法可能太长而无法计算更大的值,我不确定发生了多少优化。

现在我的想法是尝试枚举所有三元组(n1,n2,n3),其中n1 + n2 + n3 = nn1, n2, n3都是素数(其中> = 2)和n >= 7 AND { {1}}

现在让我直截了当地描绘我的算法:

My algorithm http://i47.tinypic.com/ixyqmw.png

现在我的想法是找到所有可能的三元组n1 <= n2 <= n3,因此它符合上述定义。接下来设置(n1,n2,n3)。如果n_s = n1 + n2遵循上述描述,则翻转n_s > n3n_s

现在问题是剩下的白色矩形(应该是相互一致的)。

n3表示矩形,其中:

n4 x n3

枚举所有可能的三元组n4 = n - 2 * n3 \\if following the depicted example (将n视为n = n4,因此n3> = 7)和(n41, n42, n43)(将n视为n = n3,因此n3> = 7)。接下来找到(n31, n32, n33)的值,并且两者都是最大的值。
例如:

我们假设n_s3 == n_s4x3 = 17

x4 = 13

由于 Enumeration of x3 = 17: 2 + 2 + 13 3 + 3 + 11 5 + 5 + 7 Enumeration of x_s3: 4 = 2 + 2 6 = 3 + 3 10 = 5 + 5 12 = 5 + 7 14 = 3 + 11 15 = 2 + 13 Enumeration of x4 = 13: 2 + 2 + 7 3 + 5 + 5 Enumeration of x_s4: 4 = 2 + 2 8 = 3 + 5 9 = 2 + 7 10 = 5 + 5 是13和17之间共享的最大值,因此你在(两个矩形)中都适合10乘10平方,现在你有一个非平行四边形,它越来越难以填充,但是可能(我觉得)朝着正确的方向发展。

所有反馈都赞赏。