【发布时间】:2011-10-10 17:30:53
【问题描述】:
我已经有这个问题好几年了。不久前在我镇上参加了一次信息学竞赛。我解决不了,老师也解决不了。我还没有遇到任何能够解决它的人。我认识的人都不知道给出答案的正确方法,所以我决定在这里发布:
泽问题
给定一个 X 乘 Y 的矩形,找出在给定半径 R 的情况下完全覆盖矩形每个部分所必需的最小圆数 N。
我已经想到了解决它的方法,但我没有确定的方法。如果每个圆圈定义一个内部矩形,则R^2 = Wi^2 + Hi^2,其中Wi 和Hi 是每个圆圈i 所覆盖的实际区域的宽度和高度。起初我想我应该让任何i=j的Wi等于Wj,H也一样。这样,我可以通过使宽/高比与主矩形 (Wi/Hi = X/Y) 相等来简化问题。这样,N=X/Wi。但如果X 大大超过Y 或反之亦然,该解决方案肯定是错误的。
第二个想法是Wi=Hi 对于任何给定的i。这样,正方形最有效地填充空间。但是,如果仍然有一条非常窄的条带,则使用矩形来填充它会更理想,或者更好的是 - 在之前的最后一行也使用矩形。
然后我意识到没有一个想法是最佳的,因为我总能找到更好的方法来做到这一点。它总是接近最终的,但不是最终的。
编辑
在某些情况下(大矩形)连接六边形似乎比连接正方形更好。
进一步编辑
这是两种方法的比较:三叶草与六边形。显然,六边形更适合大表面。但是,我确实认为,当矩形足够小时,矩形方法可能更有效。这是一种预感。现在,在图片中,您可以看到左侧有 14 个圆圈,右侧有 13 个圆圈。虽然表面的差异比一个圆圈大得多(两倍)。这是因为在左侧它们重叠较少,因此浪费较少的表面。
问题仍然存在:
- 正六边形图案本身是否最佳?或者应该对主矩形的某些部分进行某些调整。
- 是否有理由不使用常规形状作为“终极解决方案”?
- 这个问题还有答案吗? :)
【问题讨论】:
-
这看起来更像是数学而不是编程。
-
我建议在 math.SE 上询问 math.stackexchange.com
-
如果能解决的不是公式,而是复杂的算法?我只是重新标记它。
-
每个问题的 R 大小都一样吗?圆圈可以“溢出”矩形的区域吗?如果圆可以溢出矩形并且R可以根据问题改变,为什么不设置R = max(X,Y)* 2?然后圆圈将覆盖整个矩形,您将只使用 1 个圆圈。
-
给定 X、Y 和 R,求 N。是的,圆圈可以重叠、溢出、overaything,只要它是最小的数字。