水滴包围的最大面积

时间:2018-01-04 13:26:52

标签: algorithm

我最近在准备面试时在网上遇到了以下问题

  

想象一下,水滴在白板上的随机分布,设计了一种通过将水滴与线条连接来创建最大封闭区域的算法。

问题含糊不清,没有更多信息。我提出了一个部分方法,但我不太确定它是否正确。

假设水滴代表图表上的点,为了找到连接水滴所包围的最大区域,我们需要:

  1. 找到位于此群集外围的所有点。连接位于外围或边界上的所有点将产生最大的区域。
  2. 找到位于外围的点:
    1. 对x和y坐标进行排序。连接极端的点。因此,我们将连接具有最大x坐标的点与最小x坐标以及最大/最小y坐标。 (我对这种方法不太确定。)
  3. 我不知道如何找到这个数字的区域,因为它的范围从3到n。
  4. 我还可以验证并确保输入中的水滴数大于或等于3,因为我们需要至少3个点才能找到该区域。

    编辑: 上述算法找到水滴分布周边的点是不正确的。

2 个答案:

答案 0 :(得分:2)

正如您已经指出的那样,问题很模糊。具体而言,尚不清楚"最大封闭区域"被定义为。

似乎提问者有兴趣找到凸包。这个问题有一个variety of algorithms

答案 1 :(得分:0)

如果您不需要连接所有液滴,则可以通过查找外围上的点作为凸多边形的顶点来确定正确的轨道。一旦找到包围所有液滴并且其顶点在液滴上的凸多边形,您可以通过在"顶部"之间进行整合来找到该区域。使用梯形规则的多边形,"底部"使用梯形规则的多边形,然后减去。 "顶部"和"底部"你的多边形将是液滴序列;它们将在多边形的最左边和最右边的液滴上相遇。你可以通过下一个" top"来计算序列的其余部分。 Droplet是两个选择中较高的一个。假设多边形上的点如下:

6 |     c
5 |           e    
4 | a    
3 |   b
2 |         d
1 |
0 L_____________
  0 1 2 3 4 5 6

最左边和最右边的点分别是ae。从a开始,确定下一个" top"我们比较cb,发现c更高,因此我们知道c属于" top"并且b是" bottom"的一部分。然后我们只需按照这些线条找到" top"是" a-c-e"和"底部"是" a-b-d-e"。

" top"可以使用梯形规则找到每个线段下的集成:

(1,4) to (3,6)
A = w x (h1 + h2) / 2
A = (3 - 1) x (4 + 6) / 2 = 2 x 5 = 10

(3,6) to (6,5)
A = w x (h1 + h2) / 2
A = (6 - 3) x (6 + 5) / 2 = 3 x 5.5 = 16.5

A = 10 + 16.5 = 26.5

在底部进行整合的方式相同:

A = 3.5 + 7.5 + 3.5 = 14.5

现在我们减去找到多边形的面积是12。

<强>无论其

如果您的任务是通过形成连接所有液滴的封闭区域来最大化封闭区域,则问题会变得非常不同。确定这是否是您需要做的事情。