关闭

算法导论巩固笔记(1)

81人阅读 评论(0) 收藏 举报
分类:

下个月开始要从事服务器工作了,于是捡起一些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)


0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7770次
    • 积分:170
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:25篇
    • 译文:0篇
    • 评论:0条