测试平面中的一组n点是否在o(nlogn)时间内形成凸n多边形


13

假设您在平面中获得了一组n个点,并且要检查它们是否形成了一个凸n面,即它们是否都位于凸包上。我想知道是否有人知道如何在o(nlogn)时间内执行此操作,即不计算CH。


您可以在O(n log n)时间内计算凸包。您是说是否有可能在比这短的时间内完成操作?
Per Vognsen

是的,我认为应该针对此问题采用一些线性时间算法。但我不知道如何
的Babis Tsourakakis

4
他写的是o(nlogn)而不是O(nlogn),所以他的问题是正确的。
席瓦·金塔利

1
我使用
小写

4
这让我有些皱眉,看不到表示要花费Θ(n log n)时间而没有明确说明正在使用哪种计算模型的数字(或笛卡尔点的同等凸包)排序。比较排序需要Θ(n log n)时间,但是比较模型甚至根本不计算船体。对于代数决策树,它们都仍然是Θ(n log n)时间(如公认的答案所示),但是在更类似于实际计算机的计算模型中,它们的速度更快。
David Eppstein 2010年

Answers:


17

至少在比较/代数树模型中,这似乎不太可能。首先定义:

PPP

nΩ(nlogn)nX

P={(x,x2)|xX}.

如果存在重复数,则此重复数对应于可以写为其余点的凸组合的点。即,这些点不处于凸位置。

即,确定点集是否在凸位置上与确定唯一性一样困难。


12
X[i](X[i],X[i]2+i/n2)

1
@Babis:当不允许重复点时,Jeff的归约法有效。无论初始数组是什么,归约化生成的点都是唯一的。
Vinayak Pathak

因此,当且仅当没有两个点具有相同的x坐标时,我们才能得出凸包的拐角数等于n。非常感谢,起初我认为它应该比排序容易。
巴比斯

感谢Vinayak,我没有看到Jeff的删减,因为它是在我撰写之前用上述替换的评论的同时发布的
Babis Tsourakakis

2
Suresh,我不同意“标准模型”一词。这就是Word RAM的确切含义:)它是与真实计算机最匹配的模型,我们在大多数TCS中使用它来分析算法。几何为使用Real RAM辩护,因此我们无需处理精度问题。但这不是“标准模型”。
Mihai 2010年

-1

O(nlogn)

一旦知道了点的顺序,从每个点到序列中下一个点的角度应该是单调的。我认为这是必要条件,也是充分条件。

让内在的重点留给读者练习。


O(nlogn)


您可能像我一样将他的o(n log n)误读为O(n log n)。无论如何,您概述的算法都是以原始形式包装礼品。您实际上不需要使用内部点;您可以使用边界上的一个点,例如x坐标最小的点。
Per Vognsen

O(nlogn)o()

关键是,有许多在O(n log n)中运行的凸包算法。您的算法基本上是简单的旧礼品包装。他要求更快一些,例如线性时间。请参阅其他回复。
Per Vognsen

1
关于您的编辑,如果您可以看一下上面的答案,您会发现问题等同于元素唯一性,其下限为O(n log n)。
Per Vognsen

2
@BCS:恐怕您对Sariel Har-Peled的答案有些误解。减少是从唯一性到凸位置测试,而不是其他方向。也就是说,Sariel(和JeffE)指出,如果给定一组数字并要测试唯一性,则可以将其转换为一组点,并使用任何算法进行凸位置测试。
伊藤刚(Tsuyoshi Ito)2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.