我需要解决动态凸包算法问题,即维护二维点的凸壳,其中可以添加和删除点。
朴素的方法显然是O(N);每当添加/删除N个点之一时,我们就从头开始重新计算凸壳。然而,我无法承受线性时间,因此我正在寻找一个次线性算法。到目前为止,我已经找到了一堆论文,所有这些论文都描述了一些具有疯狂时间界限的复杂算法,这些算法要实现将需要很长时间。即使是最古老的高效算法,由Overmars和Leeuween提出的,其时间复杂度为O(log^2N),似乎也过于复杂。(通常情况下,这些论文中描述的大多数算法在结构/算法方面都引用了其他参考论文中的大量依赖项)
我正在寻找更简单的东西,不一定是新奇的,但在最坏情况下表现得比线性好(例如O(sqrt N))。最后,如果时间是平摊的,也没有关系。有什么想法吗?
(通过简单,我主要是指不需要超过几百行代码的东西。)
朴素的方法显然是O(N);每当添加/删除N个点之一时,我们就从头开始重新计算凸壳。然而,我无法承受线性时间,因此我正在寻找一个次线性算法。到目前为止,我已经找到了一堆论文,所有这些论文都描述了一些具有疯狂时间界限的复杂算法,这些算法要实现将需要很长时间。即使是最古老的高效算法,由Overmars和Leeuween提出的,其时间复杂度为O(log^2N),似乎也过于复杂。(通常情况下,这些论文中描述的大多数算法在结构/算法方面都引用了其他参考论文中的大量依赖项)
我正在寻找更简单的东西,不一定是新奇的,但在最坏情况下表现得比线性好(例如O(sqrt N))。最后,如果时间是平摊的,也没有关系。有什么想法吗?
(通过简单,我主要是指不需要超过几百行代码的东西。)