码迷,mamicode.com
首页 > 编程语言 > 详细

第二章算法总结

时间:2019-10-13 18:29:56      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:排序算法   分治法   经验   span   net   导致   return   turn   归并排序   

递归的概念:直接或者间接地调用自身的算法称为递归算法。

递归让一些复杂的问题变得简单易懂易于分析,如汉诺塔问题和Ackerman函数,在排序快排算法和归并排序算法中也有递归的运用。

 

汉诺塔:

技术图片

ackerman函数:

技术图片

 

递归的缺点:需要不断开拓堆栈空间,占用空间大,可能导致内存溢出,并且运行效率低,不能记录已经计算过的结果,和动态规划比速度慢。

 

分治法的基本思想:

分治法将一个规模为n的问题分解为k个规模较小的子问题,这些子问题相互独立且与原问题相同。递归地解决这些子问题,然后将各个子问题的解合并得到原问题的解

 

一般的设算法设计模式

 

void 分支法(P问题){
  设置问题边界
  if(P 小于等于最小问题规模)

    调用解决最小规模的方法
  将P问题分成k分   
for( i : 1 -> k) {     yi = 分支法(pi)   }   return 合并(y1 -> yk) }

 

 

分治算法复杂度分析:https://www.cnblogs.com/MarcusJr19/p/11661392.html (已获得作者同意进行转载)

技术图片

 

技术图片

 

 补充 T(n) = aT(n/b) + O(n^d)

a:分成a个子问题

b:将问题规模变为n/b

d:分解和合并a个子问题的时间复杂度为O(n^d)

 

 

 

分治法的核心是找到与原问题相同的子问题,一个题目看是否能用分治法要看它能否分成若干个与原问题相同的子问题,至于怎么看出来的主要看编程经验了。

 

下面是自己写的快排和归并排序代码 方便使用

https://blog.csdn.net/qq_19841133/article/details/100568593

https://blog.csdn.net/qq_19841133/article/details/100568124

第二章算法总结

标签:排序算法   分治法   经验   span   net   导致   return   turn   归并排序   

原文地址:https://www.cnblogs.com/likeghee/p/11667378.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!