algorithm - 如何在区域 A 中放置 k 个点,以使任意两点之间的距离最大化?
问题描述
我现在正在规划一个花园,因此,假设我有 6 个西红柿想要种植在一个尺寸l
为w
. 我所在地区的西红柿受到枯萎病的影响,因此最大限度地提高番茄植株之间的距离对于最大限度地提高我的总产量非常重要。
我一直在想明显的解决方案是这样的:
T---------T--------T
. .
. .
. .
. .
. .
T---------T--------T
T
代表番茄的位置。然后我认为该解决方案可能与 Steiner 树有关,正如singingbanana 的这段视频中所展示的那样:https ://youtu.be/dAyDi1aa40E
该解决方案可能如下所示:
T------------------T
. .
. .
. T T .
. .
. .
T------------------T
但也许该解决方案也在最小化距离。我不太确定,但我猜这是我可以用于此用例的已知解决方案的问题!
解决方案
这个问题被称为“圆包装”,它的最佳算法是一个开放问题。即使是矩形是正方形的最佳算法仍然是开放的。(尽管事实上我们已经证明了将 1-30 个圆包装在一个正方形中的最佳解决方案。但不是 31 个。)
有关此问题的一些讨论,请参阅https://math.stackexchange.com/questions/701/how-many-circles-of-a-given-radius-can-be-packed-into-a-given-rectangular-box。
大量圆形和大面积的最佳总体布置是像蜂窝一样的六角形包装。在您的图表中,放下顶部中间的圆圈,并提高底部的角落圆圈。您会发现,对于许多矩形,您现在可以拟合更大的圆圈。
对于 6 个圆圈的特殊情况,我会简单地提供一个不同包装的列表来尝试,尝试每个包装,看看它可以包装多大。事实上,我建议只尝试两个。第一个是我上面描述的六边形包装。第二个是拍摄图像并将底角向左滑动,顶部向右滑动。
推荐阅读
- react-native - 获取嵌套数据,未定义不是对象
- c# - 如何引用抽象类
- ruby-on-rails - 当 Parameter 包含非法值时,是否存在类似于 ActionController::UnpermittedParameters 的已定义异常?
- javascript - 用第二个数组中的名称替换数组中的 id
- asp.net-web-api - Web Api 控制器未解析操作
- python - 从范围生成python字典理解
- sql-server - 父子层次结构计数
- javascript - 画布根本不下载
- javascript - fullpage.js 不会平滑滚动
- python - Python - 数字文字表达式