JavaScript中的最近对算法

JavaScript中的最近对算法,javascript,performance,algorithm,Javascript,Performance,Algorithm,我试图实现一个分治算法,用JavaScript在随机生成的点集中找到最近的一对点。该算法应该在O(n logn)时间内运行,但它比简单的暴力算法(应该是O(n^2))运行的时间要长得多 我为16000个点的数组创建了两个JSFIDLE算法: 我的假设是,分而治之是如此缓慢,因为JavaScript数组实际上是哈希表。在JavaScript中是否有可能显著提高算法的速度?如果是这样,那么最好的方法是什么?乍一看,您的合并函数分配的内存太多(大致顺序为O(n^2))。我用了一种很粗糙的方法来

我试图实现一个分治算法,用JavaScript在随机生成的点集中找到最近的一对点。该算法应该在O(n logn)时间内运行,但它比简单的暴力算法(应该是O(n^2))运行的时间要长得多

我为16000个点的数组创建了两个JSFIDLE算法:


我的假设是,分而治之是如此缓慢,因为JavaScript数组实际上是哈希表。在JavaScript中是否有可能显著提高算法的速度?如果是这样,那么最好的方法是什么?

乍一看,您的合并函数分配的内存太多(大致顺序为O(n^2))。我用了一种很粗糙的方法来测量这个。基本思想是在全局范围内有一个计数器,并在每次调用merge时添加它生成的数组的大小。希望这是足够的信息为您解决它,如果您遇到任何更多的问题,我很乐意提供一些额外的指针

而且,仅仅通过玩数字游戏,就很容易排除它是一个哈希表问题*-一个被哈希表拖慢的算法不会表现出比O(n logn)更快的增长速度,它只会开始变慢并沿着相同的线增长。但是,如果你尝试了一系列的值,很明显,它的增长速度比这要快,这表明了一个不同的问题

*javascript数组的内部实现比它们只是对象要复杂一些,但就我想说的这一点而言,它并不重要

我相信它对javascript性能有深刻的见解