这个谜题是关于使用较小的正方形平铺正方形。
递给你一张纸,上面有13×13的正方形,如下图所示,你必须把它分成几个较小的正方形。如果你只能沿着直线切割,那么你能把这个大的方块分割成的最小方块数是多少?(例如,您可以将其划分为一个12乘12的正方形和25个一乘一的正方形,总共26个正方形,但您可以做得更好。)
以下是我解决问题的方法:
[显示解决方案]
这是一个具有挑战性的难题,不幸的是,没有聪明的技巧可以用来快速解决它。如果我们考虑使用较小的正方形平铺$N\倍N$网格的一般问题,我们可以进行以下观察:
- 我们希望得到的最小的答案是4美元。如果$N=2k$是偶数,我们可以通过将平方分为四个$k\乘以k$的平方来达到最小值。很明显,这个解决方案无法改进。
- 如果$N=3k$是$3$的倍数,我们可以将其分为六个部分:一个$2k乘以2k$平方和五个$k乘以k$平方。我认为这一点也无法改善。
- 当$N$有多个除数时,平铺它变得更容易。因此,最具挑战性的情况是$N$是素数的情况。因此,更大的网格并不一定意味着更困难的问题!稍后我们将看到这方面的示例。
我将通过将其转换为整数线性规划(具体来说,是背包问题)这一问题的解决比通过暴力检查可能的瓷砖天文数字要有效得多。
我将说明5美元乘以5美元的方法。我们将每个可能的方块表示为$5\乘以$0$和$1$的5$矩阵。例如,我们可以使用$25$不同的$1\乘以1$平铺:
\[
\scriptsize\开始{bmatrix}{\color{red}{\color{红色}1}}&0&0&0&0\\0&00&0&0&0\\0&0&0&r0&0\0\\0&0&0&0,
\开始{bmatrix}0&{\颜色{红色}1}&0&0&0\\0&0&0&0&0\\0&0&0&0&0\0\\0&0&0&0,
\开始{bmatrix}0&0{\颜色{红色}1}&0&0\\0&0&0&0\\0&0&0&0\\0&0&0&0\\0&0&0&0&0\end{bmatrix},\,\dots\,,
\开始{bmatrix}0&0&0&0&0\\0&0&r0&0&0\\0&0&0+0&0&0 \\0&0&0&0{红色}1}\结束{bmatrix}
\]我们还可以使用$16$不同的$2\乘以2$瓷砖:
\[
\脚本大小\开始{bmatrix}{\color{红色}1}&{\颜色{红色}1}&0&0&0\\{颜色{红色}1}&{\颜色{红色}1}&0&0&0\\0&00&0&0&0\0\\0&0&0&0&0&0 \\0&0-0&0\end{bmatrix},
\开始{bmatrix}0&{\颜色{红色}1}&{\颜色{红色}1}&0&0\\0&{\color{红色}1}&{\颜色{红色}1}&0&0\\0&0&0&0&0\0\\0&0&0&0&0&0 \\0&0-0&0结束{bmatrix},
\开始{bmatrix}0&0{\颜色{红色}1}&{\颜色{红色}1}&0\\0&0&{\颜色{红色}1}&{\颜色{红色}1}&0\\0&0&0&0&0\0\\0&0&0&0&0&0 \\0&0-0&0结束{bmatrix},\,\点\,,
\开始{bmatrix}0&0&0&0&0\\0&0&r0&0&0\\0&0&0+0&0&0 \\0&0&0&{颜色{红色}1}&{\颜色{红色}1}\\0&0&0&{\颜色{红色}1}&{\ color(颜色){红色}1}\结束{bmatrix}
\]继续这种方式,我们有$9$不同的$3\乘以3$瓷砖和$4$不同的$4\乘以4$瓷砖。因此,我们总共有25美元+16美元+9美元+4美元=54美元的不同瓷砖。游戏的名称是选择这些矩阵的最小可能子集,并将其与所有$1$的矩阵相加。我们可以通过将上面的每个$54$矩阵矢量化为$25\x1$列,然后并排堆叠这些列,形成矩阵$a\in\{0,1\}^{25\x54}$来紧凑地表示这一点。我们的目标是解决问题:
\开始{align}
\下划线{x\in\{0,1\}^{54}}{\text{minimize}}\qquad&\sum_{i=1}^{54/}x_i\\
\text{subject主题:}\qquad&Ax=1
\完{align}此处,每个$x_i$都是一个二进制变量,用于选择是否使用$a$的$i^\text{th}$列。结果表明,这个5美元乘以5美元的案例的最佳解决方案使用了8美元的平方;或总和:
\开始{multline}
\脚本大小\开始{bmatrix}0&0&0&0&0\\0&0&0&0&r0\\{颜色{红色}1}&{\ color(颜色){红色}1}&{\颜色{红色}1}&0&0\\{颜色{红色}1}&{\颜色{红色}1}&{\颜色{红色}1}&0&0\\{颜色{红色}1}&{\颜色{红色}1}&{\颜色{红色}1}&0&0\结束{bmatrix}
+\开始{bmatrix}{\color{红色}1}&{\颜色{红色}1}&0&0&0\\{颜色{红色}1}&{\颜色{红色}1}&0&0&0\\0&00&0&0&0\0\\0&0&0&0&0&0 \\0&0-0&0\end{bmatrix}
+\开始{bmatrix}0&0&0&{颜色{红色}1}&{\颜色{红色}1}\\0&0&0&{\颜色{红色}1}&{\颜色{红色}1}\\0&0&0&0&0\\0&0-0&0&0 \\0&0&0&0-0&0\end{bmatrix}
+\开始{bmatrix}0&0&0&0&0\\0&0&r0&0&0\\0&0&0+0&0&0 \\0&0&0&{颜色{红色}1}&{\颜色{红色}1}\\0&0&0&{\颜色{红色}1}&{\颜色{红色}1}\结束{bmatrix}\\
\scriptsize+\开始{bmatrix}0&0{\颜色{红色}1}&0&0\\0&0&0&0&0\0\\0&0&0&0
+\开始{bmatrix}0&0&0&0&0\\0&0&r{颜色{红色}1}&0&0\\0&0&0&0&0\0\\0&0&0&0&0&0 \\0&0-0&0结束{bmatrix}
+\开始{bmatrix}0&0&0&0&r0\\0&0&0&0&0\\0&0&0&{\color{红色}1}&0\\0&0&0&0&0\\0&0&0&0&0\end{bmatrix}
+\开始{bmatrix}0&0&0&0&r0\\0&0&0&0&0\\0&0&0&0~0&{\color{红色}1}\\0&0&0&0&0\\0&0-0&0&0结束{bmatrix}
\完{multline}这个枚举选项然后从中进行选择的一般策略并不能很好地扩展,因为随着$N$变大,$A$增长得很快。事实上,$A$将是$N^2\times\tfrac{1}{6}(N-1)(2N^2+5N+6)$。然而,在这些情况下,我们可以使用诸如列生成快速获得可以迭代且有效地细化的近似答案。
我用朱莉娅具有JuMP公司和莫塞克解算器。请提前阅读结果!
这是tl;博士,只有解决方案!
[显示解决方案]