2015-02-23 89 views
2

凸包可以通过拉伸橡皮筋找到,使其包含所有点并释放它。使用橡皮筋解决凸壳?

所以我的问题是:让我们假设我们有一个机器人(理论机器人)来解决这个问题。 我们给它的坐标(我们有n点)。

  1. 它使用一些引脚来指示板上的点(O(n))。现在我们选择一个点(它并不重要,我们选择哪一个),然后我们检查它与其他点的距离,如(sqr(x^2 + y^2))。我们找到最大距离。

  2. 然后,机器人使用一个橡皮筋,并以步骤2中找到的具有半径距离的圆的形式将其延伸,并在步骤2中选择的点的中心。然后释放该带。

  3. 然后,机器人需要遵循橡皮筋找到的凸包的顶点在O(m),其中m是该凸包包含它们的顶点。(米< = N)

所以算法的总顺序(这种方式)应该是O(n)。

我知道我没有考虑到橡皮筋需要拉伸的时间或需要收缩的时间。

但假设我们有很多点(收缩/拉伸)比O(n)要少得多。

有无论如何模拟橡皮筋在电脑中的效果?

我知道由于排序低频带,凸包的最低可能顺序被认为是O(nlg(n))。

+0

有点不清楚橡皮筋的属性如何在算法上表现出来。机器人如何找到凸包多边形的顶点?通过观察多边形线的方向改变? – Codor 2015-02-23 10:03:27

+0

所以你不是在说这里的机器人算法(它是一个机器人是无关紧要的,如果我知道它的事实吗?),而是关于利用橡皮筋创造“免费”船体的事实?不,这一步*是实际算法,如果没有任何计算工作,就无法得到这个结果。 – Groo 2015-02-23 10:21:32

+0

但在这个例子中,橡皮筋不会做任何牺牲吗? – kiyarash 2015-02-23 11:13:13

回答

2

我想你可能模仿使用某种优化算法的“橡皮筋算法”,但它可能会非常慢。请记住,从某种意义上说,物理世界是一个巨大的,非常复杂的计算机,一直在计算复杂的东西,比如重力,磁力等,最后但不是碰撞检测。

首先,让我们做的设置:

  • 橡胶带被表示为保持每个“原子”的位置在橡胶带的橡胶带(思想为节点的双向链表原子的1-d链)
  • 所述销通过某种空间图的表示,或非常细粒度的n维阵列保持的一些小的区域中是否包含一个销的信息或不

现在,实际算法:

  • 每当一个“原子”中的橡胶带触摸/是非常接近的销(根据空间地图,或第二阵列),该原子是固定的,不能再移动
  • 对于所有其它原子,稍微改变他们的立场,以尽量减少他们各自邻近邻居的距离;直到所有的原子都“落户”

当然,这种算法的复杂性是可怕的,远远超过糟糕,你可以用,例如,随机优化或群算法

  • 重复做O(n)或甚至O(nlogn),因为所有昂贵的“橡皮筋”计算通常都是由称为宇宙的伟大物理引擎执行的。 (你可以通过在任何现代物理模拟中输入“橡皮筋和销钉板”问题来获得类似的结果。)

  • 1

    但假设我们有很多点,它比O(n)要少得多。

    不,它不需要,因为这一步的:

    现在,我们选择一个点(这并不重要,我们选择哪一个),那么要检查它的距离与其它点状(SQR(X^2 + y^2))。我们找到最大距离。

    无法找到此最大距离小于O(n)

    另外:

    然后,机器人使用的橡胶带,它与我们在步骤2中找到的距离的半径的圆的形式延伸,并在中心我们在步骤2中它选择的点释放乐队。

    然后机器人需要按照橡皮筋找到O(m)中凸包的顶点,其中m是凸包由它们组成的顶点。(米< = N)

    这需要O(m*n)时间,见Jarvis march算法。你需要检查每个点实际上是凸包的一部分,你不能只延伸一次松紧带并做好它。

    +0

    关于“小于O(n)”的句子显然是错误的,但即使用'O(n)',OP也基本上说第3步应该以某种方式神奇地转化为恒定时间运行算法,导致总时间低于下限。 – Groo 2015-02-23 10:32:19

    +0

    我们不需要检查所有点来找出哪一个是凸包。松树可能是包含我们所需数据的物体。就像协调和......这仍然需要O(n)把引脚放在板上 – kiyarash 2015-02-23 11:19:50

    +0

    @kiyarash - 你为橡皮筋算法做的。你还建议怎么做? – IVlad 2015-02-23 11:21:01

    2

    “有无论如何模拟橡皮筋在计算机中的效果”:不,不是计算复杂性。计算机操作一次处理的操作数不变。例如,典型的凸包算法将三点乘三点并检查它们是否形成顺时针或逆时针三角形。据说这是在不断的时间内完成的。

    发布频带涉及所有N个点,不能实现为原始操作。

    如果您尝试用计算机以某种方式模拟它,您可以确定它至少需要O(N日志(N))操作。无论如何,在一个离散的宇宙(整数坐标)中,O(N)可以使用基数排序。