JavaScript中最近对的算法

时间:2012-10-17 04:09:19

标签: javascript performance algorithm

我正在尝试实施分而治之算法,以使用JavaScript在随机生成的点集中找到最接近的点对。该算法应该在O(n log n)时间内运行,但运行时间比一个简单的强力算法要长得多,该算法应该是O(n ^ 2)。

我创建了两个jsfiddles,为16000点的数组计算算法:

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

1 个答案:

答案 0 :(得分:2)

乍一看,你的合并功能分配了太多的内存(大致为O(n ^ 2))。我用一种黑客的方法来衡量这个here。基本思路是我只在全局范围内有一个计数器,并在每次调用时添加由merge生成的数组的大小。希望这是足够的信息,你可以解决它,如果你遇到任何更多的问题,我很乐意提供一些额外的指示。

另外,只是通过玩数字很容易排除它是哈希表问题* - 哈希表减慢的算法不会表现出比O(n log n)更快的增长率,它只会启动慢慢地沿着同样的路线生长。如果你尝试了一系列的价值观,那么它的增长速度应该会比这更快,这表明存在不同的问题。

* javascript数组的内部实现比它们只是对象要复杂一点,但是我试图让它变得无关紧要