【发布时间】:2012-04-26 13:25:12
【问题描述】:
我一直在阅读 Sedgewick & Wayne 的“Algorithms, 4th Ed”,在此过程中我一直在实现 JavaScript 中讨论的算法。
我最近使用书中提供的合并排序示例来比较自上而下和自下而上的方法......但我发现自下而上的运行速度更快(我认为)。在我的博客上查看我的分析。 - http://www.akawebdesign.com/2012/04/13/javascript-mergesort-top-down-vs-bottom-up/
我找不到任何讨论说一种合并排序方法应该比另一种更快。我的实现(或分析)有缺陷吗?
注意:我的分析测量算法的迭代循环,而不是严格地数组比较/移动。也许这是有缺陷或无关紧要的?
编辑:我的分析实际上并没有计时,所以我关于它运行“更快”的说法有点误导。我正在通过递归方法跟踪“迭代”(顶部- down) 和 for 循环(自下而上)- 自下而上似乎使用较少的迭代。
【问题讨论】:
-
比较和交换是排序分析中的关键成本项目,我很确定。
-
@Pointy 是的,它们通常是比较不同排序算法时要分析的项目。但在这种情况下,它们应该是相同的......它们是相同的算法,所以这不是我所追求的。我的实现反映了书中的内容......是否有可能自下而上在数组上/通过数组使用更少的循环但具有相同数量的比较/移动?
-
@NiklasB。我明白你的意思......但这些并没有导致我的迭代次数出现差异。如果您查看我的代码,我只会跟踪递归/迭代循环内的迭代。 Math.floor() 与它无关 - 我没有使用基于时间的分析
-
也许我原帖中的“跑得更快”是不正确的。我在数组上发现自下而上的循环次数更少,但这可能与“速度”无关
-
对大小正好是 2 的幂的数组进行排序有什么不同吗?
标签: javascript algorithm sorting language-agnostic mergesort