算法导论第一,第二部分总结

最近正在看一部大著《算法导论》,这本书无论从严密还是从思维上面都达到了一个难以企及的高度。里面的算法分析与设计基本上都在理论性上,如果想实用的话自己还需要看点其它的东西。接下来,就自己学了的前两章做一个总结。

  1. 第一章:算法在计算中的作用:算法可以理解为把输入转化为输出的计算步骤的序列。算法的重要性不言而喻,不仅给你找工作,从事某些行业带来便利,而且这代表这一种思维方式,去解决问题的做法。学习本书的目的不仅仅是了解这些算法,更重要的是学会自己去设计算法,分析自己设计的算法。分析算法主要是分析算法的正确性,及算法的效率,本书中的算法分析主要分析时间复杂度。

  2. 第二章:算法基础,在上一章对算法有了一个大概的了解之后,这一章开始讲述一些简单的算法。首先是插入排序,先上伪码:

for i=2 to A.length
  key=A[i]
  j=i-1
  while(A[j]>key and j>0)
    A[j]=A[j-1]
    j=j-1
  A[i+1]=key

这个插入排序的代码比较简单,不需要多解释,然后利用循环不变式证明了插入排序的正确性,循环不变式类似于数学归纳法,找到初始条件,即循环迭代开始之前是否满足条件,之后用数学归法的思想去证明能够逐步递推,最后判断结束的时候能否满足条件即可。接下来是算法分析,需要一定的数学基础,插入排序的时间复杂度为O(n^2)。

接下来是归并排序,其思想是:先将数据看成每组数据只有一个元素,然后将两组合并起来,相当于把两组有序的数据排序。需要开辟一组临时空间,然后逐个比较,赋值到新开辟的空间即可。

MERGE_SORT(A,p,r)
if  p<r
  q=(p+r)/2                 //将数组分解成两个数组
  MERGE_SORT(A,p,q)         //递归归并
  MERGE_SORT(A,q,r)
  MERGE(A,p,q,r)

归并排序是一种分治的思想,就是将大问题逐步分解成小问题,解决小问题之后,将这些合并起来,便将整个问题解决了。归并算法的时间复杂度可以用二叉树的思想分析,得到时间复杂度为O(nlgn)。
在思考题中,出现了一道冒泡排序的题,这是一个比较常见的排序算法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值