算法的优化实现

来源:互联网 发布:大数据板块龙头股 编辑:程序博客网 时间:2024/06/12 00:44

 

这篇文章记录算法的C/C++实现中,应该注意的几个可以改进算法效率的地方

1,提高cache利用率

在<几个基础的排序算法>中实现的快速排序算法,利用这点可以做很大的改进。

 

改进的实现:

 

改进后的实现,没有对原来实现中的基准元素作交换移动,在划分过程中基准始终出现在data_array[left]位置,提高了cache利用率。经测试,改进后的排序时间在数据规模为10,000,000时,由9秒变为4秒,算法效率提高了一倍。

 

2,递归函数迭代化

递归在代码的简洁和直观背后是性能的牺牲。举些例证。

在动态规划算法中,根据最优子结构观察出的递推式的计算,有两种方式,一种是直接的自顶向下的递归计算,并且标记子问题是否已解决和子问题的答案,使下次不必递归计算这个子问题,另外一种是自底向上的迭代计算过程。显然,迭代计算在时间和空间商都更优良,它产生更紧凑的计算指令,而且避免了递归计算过程中的堆栈开销和额外的簿记信息。

在对性能要求严格的算法中,迭代化也是极力推荐的。比如多项式的DFT过程,借助于A(x) = A0(x^2) + xA1(x^2)分解,和n次单位复根的性质,可以用递归分治策略以sita(nlgn)时间计算DFT,实际中高效的实现是将这个递归过程迭代化。

原创粉丝点击