算法导论巩固笔记(1)

下个月开始要从事服务器工作了,于是捡起一些CS的基础课,巩固一下原先的知识。

先从算法开始,配合网易的公开课,传送门


第一课介绍了两种排序算法,插入和归并。


1. 影响运行时间的因素:

·输入(比如已经排序好的输入)

·输入规模(输入6个数或输入6X10^9)

-将输入规模参数化

·运行时间的上限

-对用户的保证(比如运行时间少于3秒,这就是一个用户如何使用该程序的真实信息)


2.算法分析:

·最坏情况分析

-T(n)定义为输入规模n的最长运行时间

·平均消耗时间:

-T(n)此时定义为输入规模n的期望时间


3.渐近分析(Asymptotic analysis),即时间复杂度

·忽略硬件因素

·不关注实际运行了多少时间,而是关注了增长 (T(n), n->∞)

·Θ符号(即O(n)的O)代表忽略低阶项

特例:


如图有时候我们会对O(n^3)的算法感兴趣,因为n0可能是一个非常大的数,大到计算机无法处理,这时O(n^3)的算法就比O(n^2)的更优


4.插入算法和归并算法时间复杂度比较,并推导归并算法时间复杂度:

·插入排序分析

-最坏情况:O(n^2) 算术级数

-插入排序快吗: 规模n足够小时,比较快;但是规模n变大后就很慢了。

·归并算法分析:

-具体算法: 

a.如果n为1,则结束排序  O(1)

b.递归操作,划分元素: 前一半元素 1到Ceil(n/2) 后一半元素 Ceil(n/2) + 1到n     2T(n/2)

c.合并当前两组元素:顺序或逆序比较两张表的元素大小,放入最后的结果表中         O(n)

-推导

T(n) = O(1) if n =1; 2T(n/2) + O(n) if n > 1

递归树:



解读:

a.每一层都是线性复杂度c*n

b.树的高度为lgn (n折半到1,复杂度lgn)

c.所有叶子节点的时间复杂度O(n)

d.总时间复杂度为 T(n) = (c*n)*lgn + O(n)  省略低阶项O(n)即为O(n*lgn)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值