算法的优化实现

 

这篇文章记录算法的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,实际中高效的实现是将这个递归过程迭代化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值