首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

算法 之 分治 - 合并排序-总结

2012-12-25 
算法 之 分治 - 合并排序-小结之前我们看过的算法 BottomUpSort 和 MergeSort,前者是迭代的,而后者是递归

算法 之 分治 - 合并排序-小结

之前我们看过的算法 BottomUpSort 和 MergeSort,前者是迭代的,而后者是递归的。

在这里我们可以思考一下,既然能够利用算法 BottomUpSort,为什么还要借助于像 MergeSort 那样的递归算法呢?尤其是考虑到因使用栈而需要的额外空间数,以及由处理递归调用内在开销带来的额外空间。

而且从实践的观点来看,似乎没有理由赞成用递归算法替代其等价的迭代算法。

但是从理论的观点来看,递归算法具有对问题易于叙述、领会和分析等优点。为了理解这一点,我们可以对算法 MergeSort 和 BottomUpSort 的代码作比较,很明显后者需要花更多的时间调试和理解代码的含义。这启示我们设计算法可以从递归描述的框架着手,如果可能,以后再将算法改进并转化为一个迭代的算法。

每个递归算法总是可以被转换为迭代算法的,而且两者在解决问题每个实例时他们的功能是完全相同的。

?

点这里查看 ButtomUpSort

点这里查看 MergeSort


最后再用著名的 Fibonacci 序列来稍微比较一下递归和迭代所耗费的时间。

?

在数学上,Fibonacci 序列是用递归来定义的,它的性质如下所示:

?

而递归算得却很慢,特别是当 index=33-35 时,几乎要花掉1秒钟来计算,而且越到后面需要的时间更是成指数增长

热点排行