雕琢分而治之最近点对算法
我们改进著名的 Bentley 和 Shamos 的分而治之算法来求平面最近点对。对于平面上的 n 个点,我们的最近点对算法保持最优的 O(n log n) 时间复杂度,并且,利用一个包装圆性质,计算不超过 7n/2 个距离。这个结果改进了葛等人的(3n log n)/2 计算距离复杂度。我们提供实验结果来比较分而治之平面最近点对算法的四种不同版本,并提出两个有效的启发式算法。
最近点对问题是计算几何中最古老的问题之一; 其基本版本是计算某平面点集中最小的两点距离。Shamos 和 Hoey 于1975年首次提出了一个基于V oronoi 图的时间复杂度为O(n log n) 的算法来解决这个问题。自此, 最近点对问题及其许多变种已经得到了广泛的研究, 有超过百篇的研究论文在此方向发表。其中最有名的算法由 Bentley 和 Shamos 提出,其时间复杂度在任何维数为O(n log n),这在代数运算树模型里是最优的。在一个支持随机及间接寻址等功能的更强大的机器模型里, 更快的算法是可能的,然而他们通常较为复杂。在实践中, Bentley 和 Shamos 的简洁的分而治之算法往往是解决最近点对问题的最佳选择。的确, 许多计算几何和算法的标准教科书都选择 Bentley 和 Shamos 的算法作为范本来展示分而治之的算法设计思想。
对于解决计算机科学中的基本问题的算法,除了通常的对于运行时间的分析, 其各种计算资源的使用要求也时常被详细估计。举例来说, Franceschini 和Geffert 设计的一个排序算法仅用O(n log n) 次比较, O(n) 次
数据移动, O(1) 个辅助存储,和 O(n log n) 次算术运算。最近点对问题是计算几何学中的一个重要问题,其算法分析很自然的也应包括更详细复杂的内容。周等人观察到欧几里德距离的计算通常比其他的基本运算更花时间,于是提出了一个“计算距离复杂度”来测量最近点对算法中计算距离的次数。他们为最近点对问题设计的一种改进型的分治算法具有计算距离复杂度2n log n。最近,葛等人进一步改进了该算法,并把其计算距离复杂度降低到 (3n log n)/2。这些改进型的分治最近点对算法仍然保留着其最坏情况下 O(n log n) 的时间复杂度。在这篇文章里,我们提出一个更新版本的分治最近点对算法,并进一步降低其计算距离复杂度到 7n/2。人们普遍认为一个理论上最佳的算法并不一定是实践中最有效的算法。通过实验分析springframework事务
方法,我们有时可以发现隐藏在计算复杂度背后的有趣事实。为了更好的理解分治最近点对算法, 我们对其具有不同计算距离复杂度的四种不同版本进行了实证研究来比较它们的速度。我们还提出两个启发式算法,并通过实验来研究它们对进一步提高算法速度的有效性。我们从我们的实验研究中体会到,设计和实施一个有效的算法需要平衡严格的数学分析和仔细的工程雕琢。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。