将方块分成小方块

时间:2009-05-26 10:55:34

标签: algorithm math

我有大广场。我想把这个方块分成小方块。我需要所有可能的组合。我知道有无限组合,但我有一个限制。我有最小正方形的固定尺寸。

我可以用蛮力来实现它。但它太长了。

这项任务的优选算法是什么?

谢谢!

3 个答案:

答案 0 :(得分:1)

如果我们做出2个假设(否则存在组合),这个问题只有解决方案

1)最小的方块有固定的尺寸
2)切割大正方形的方法也是固定的,就好像你将正方形放入一个网格中,这些网格的线条被小方块的大小分开。

还有第三个假设可以使问题更容易

3)大方块的侧面比小方块大K倍。 K是整数。

如果两个假设都是真的,我们可以继续:

找出N(N个整数)最小正方形的数量:尺寸为N *小尺寸的正方形

 if ((big-size % N*small-size)==0)
    Number += (big-size / N*small-size)^2
 else
    Number += ((big-size / N*small-size)^2) * (big-size % N*small-size)

否则条件中的*(大尺寸%N 小尺寸)是因为如果bigsquare没有被N划分,当用gid-width宽度“磨”大方块时,我们将剩下“分数部分”。这样我们就可以再次开始分割(再次进行分割),但偏移量为1,2或N个小步长。步数是(大尺寸%N 小尺寸)。

同样,如果采取了3个假设,这些步骤才适用。

答案 1 :(得分:0)

没有“无限”组合。事实上,这个数字可能很大但是有限。 此外,如果您需要严格的正方形(宽度=高度,而不仅仅是矩形),甚至更少,因为您必须将原始正方形(L面)除以两侧相同的整数,否则您将获得矩形同样。 如果你正在使用整数,我建议将L除以2,3,...... M(L / M =最小内平方长度)。

答案 2 :(得分:0)

我的数学有点模糊,但如果你有一个正方形(n ^ 2),那么你有一边(n)的长度。

n,您可以计算该数字的所有因子,并将它们用作较小正方形的边...

E.g。

n^2 = 44100
n = 210

Factors of n = x=2,x=3,x=5,x=7, x= ... and so on.

因此,每个因子的小方块都是

x=2 : x^2 = 4 : 44100 / 4 = 11025 small squares
x=3 : x^2 = 9 : 44100 / 9 = 4900 small squares
x=5 : x^2 = 25 : 44100 / 25 = 1764 small squares
x=7 : x^2 = 49 : 44100 / 49 = 900 small squares

等等