【问题标题】:Algorithm - finding triangle with maximum perimeter算法 - 找到最大周长的三角形
【发布时间】:2018-09-03 19:53:58
【问题描述】:

给定二维平面中的一组 N 个点,表示为 (x,y) 坐标对。什么是快速的算法来选择三个点,使这些点形成的三角形具有最大周长?

【问题讨论】:

  • 暴力是唯一的方法。所以时间复杂度是O(n^3)
  • 实际上在蛮力算法中要检查的三角形的数量是(n 选择 3),也就是 ~ (n^3)/6,所以复杂度确实是 O(n^3) .您可以忽略不属于凸包的点,以及沿直线的点,但在最坏的情况下,您仍然有 n 个点。
  • @Richardissimo 是否保证最大面积的解决方案也适用于最大周长? (将 abc 改进为 abd 意味着 d 超出了通过 c 的一条线,平行于 ab 的面积,d 超出了一条通过 c 的椭圆,焦点为 a 和 b 为周长。)
  • 抱歉,我的错。最大周长与最大面积无关。 (撤回重复的建议。)

标签: algorithm theory


【解决方案1】:

这本质上是先发制人的

  • 选择离羊群最远的一个点,我们称之为 A 点。
  • 画一条假想的直线,穿过 A 到鸡群的其余部分。
  • 选择另一个相反的点,它的偏差(从想象的 直线)从高到右。
  • 选择另一个相反的点,即 偏差(从假想的直线)是最高的 离开了。

检查是否可以制作三角形? 如果没有检查另一个轴的另一个最高点

【讨论】:

    【解决方案2】:

    这是一个粗略的想法(我不太精通计算几何)。具有固定周长和底边的三角形可以生成椭圆。例如,这里BC 是固定的,椭圆上的任何点A 都将保持三角形周长相同:

    对于连接两个点的每个线段,在我们的集合中随机选择第三个点。生成相关的椭圆,然后从我们的集合中选择另一个在该椭圆之外的随机点。每个椭圆将排除产生相同或更小周长三角形的点,直到我们用完点,找到最大的点。当然,我们需要一些有效的方法来找到相关点(也许使用空间划分?)。

    【讨论】:

    • 我怀疑对于凸包上的相邻点 a,b,c,d,e,如果 |abd| > |acd|和 |bde| > |cde|然后 |bdx| > |cdx|对于凸包上的所有点 x,因此 cd 不能是最大周长三角形的边。但我一直无法拿出证据。
    猜你喜欢
    • 2017-11-01
    • 2017-11-21
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 2017-06-21
    • 2015-10-01
    • 2014-05-14
    • 2023-01-30
    相关资源
    最近更新 更多