C 如何才能找到适合给定平方的最小可能平方数
假设我有一个7x7的正方形。我可以用其他正方形(即尺寸为1x1,2x2….6x6的正方形)填充正方形。如何用最小可能的较小正方形填充正方形。请帮助我。考虑一个尺寸为C 如何才能找到适合给定平方的最小可能平方数,c,algorithm,math,C,Algorithm,Math,假设我有一个7x7的正方形。我可以用其他正方形(即尺寸为1x1,2x2….6x6的正方形)填充正方形。如何用最小可能的较小正方形填充正方形。请帮助我。考虑一个尺寸为s x s的正方形。将尺寸的较小正方形m x m切出,将产生m x m的正方形、n x n的正方形和两个尺寸的矩形m x n,其中m+n=s 当s为偶数时,可以将正方形分割为m=n,在这种情况下,矩形也将为正方形,结果为4 但是,当s为奇数时,必须选择m和n的值,以便生成的矩形可以用尽可能少的正方形填充。似乎没有一种显而易见的方法可以
s x s
的正方形。将尺寸的较小正方形m x m
切出,将产生m x m
的正方形、n x n
的正方形和两个尺寸的矩形m x n
,其中m+n=s
当s
为偶数时,可以将正方形分割为m=n
,在这种情况下,矩形也将为正方形,结果为4
但是,当
s
为奇数时,必须选择m
和n
的值,以便生成的矩形可以用尽可能少的正方形填充。似乎没有一种显而易见的方法可以立即找出最佳配置,因此我建议提出一种算法来计算最小的正方形数,可以用来填充一个大小为mxn
的矩形(这是一个稍微简单的问题,我相信可以用递归算法来解决)。所需的方块总数将等于2x([矩形中的方块数]+1)
。您可以使用循环检查1
和s/2
之间的所有m大小
希望这能让你开始。考虑一个尺寸为s x s的正方形。 将
s
分解为素数。然后解决每个素数sp
的问题。sp x sp
的答案与s x s
的答案相同。最小的素数很可能给出最低的结果。我没有这方面的证据,但我已经亲自检查了17 x 17。
这是对Otaias的偶数s
概念的概括,得到了4的答案
Placing算法:
您需要从n=(s+1)/2向下舍入到n=s-1进行循环
把n x n正方形放在角落里
设m=s-n。
将m x m正方形放置在相邻的角落,并继续放置,直到它们(几乎)到达n x n正方形的末端
剩余的空间将是m x m(如果你幸运的话),或者最多2m-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
首先检查n是否为偶数。如果n是偶数,那么答案是4,因为没有一种方法可以将3个或2个正方形拟合在一起形成另一个正方形,从而解决所有可能情况的一半 继续之前:此方法不完整,可能是错误的方法 我只是想抛出一个开箱即用的想法,因为我觉得这可能会有所帮助,并希望能推进问题的解决。我觉得这可能和我的工作有一些关联。该算法可能太长,无法计算更大的值,而且我不确定会发生多少优化 现在我的想法是尝试枚举所有三元组
(n1,n2,n3)
,其中n1+n2+n3=n
和n1,n2,n3
都是素数(它们是>=2)和n>=7
和n1=7)和(n31,n32,n33)
(将n视为n=n3,所以n3>=7)。下一步查找值,其中n_s3==n_s4
,两者都是最大值。
例如:
让我们假设x3=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
由于10
是13和17之间共享的最大值,因此在(两个矩形)中拟合一个10×10的正方形,现在有一个非平行四边形,它越来越难以填充,但可能(我觉得)朝向正确的方向
感谢所有反馈。这还不清楚。你能举个例子吗?看看whathaveyoutried.com和常见问题解答,如果我必须填充3X3的平方,那么我可以用9个1x1的平方或1个2X2和5个1x1来填充平方。因为第二个选项需要更少的方块数。同一位老师?:)不确定求解mxn
更简单,因为nxn
可以被视为它的特例。“所需的总平方数将等于2x([mxn矩形中的平方数]+1)。”这不是真的!考虑n=4,m=3。您建议将3x3放置在4x4的对面,需要10个较小的正方形,这不是最佳选择。将2x2放在相对的拐角处可将所需的数字削减至9。我认为最好先在nxn的相邻角落放置mxm正方形。嗯,你说得对。这个问题比我想象的要复杂。你的结果似乎不对(你不能用5个正方形覆盖一个3x3的正方形)。即使你解决了这个问题,我也不明白为什么你认为你的算法是最优的。我理解正确,它甚至没有完全指定:重复这个过程两次后,你会得到一个缺了两个角的正方形,并且不清楚如何从那里继续…@interjay抱歉,错别字,3x3应该是6。你是对的,我的答案并不完整。这是我在很短的时间内所能想到的。我希望其他人会发现它很有希望,并帮助进一步改进它。如果你想在一段合理的时间内解决这类问题,那么每一点可以减少必要暴力的信息都是有帮助的。
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