算法导论学习笔记(1)

课时1:程序员

在程序设计方面,什么是比性能更重要的?算法

1 正确性 2 简洁 3 可维护性 4 程序员的时间成本5 健壮性 6 特性(功能)7 模块化 8 安全 9 用户友好安全

为何关注性能?ide

1 性能的好与坏,直接决定着可行仍是不可行模块化

2 算法是一种描述程序行为的语言,普遍应用于计算机科学领域,被全部的实践者所采用的理论语言,一种让程序最为简洁的思考方式。性能是基础函数

 

 

insert on sort(插入排序)性能

运行时间的问题:idea

  * 输入是否有序设计

  * 输入规模:将输入的规模将其参数化,time=f(input size);blog

  * 运行时间的上限

最须要关注的一种分析:最坏状况分析

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

有时讨论:平均状况

T(n)成了输入规模n之下全部可能输入的指望时间:每种输入的运行时间*那种输入出现的几率

 假象,可能永远不会出现,而且有必定的欺骗性:最好状况

 

算法的大局观(big idea):渐进分析

1 忽略掉那些依赖于机器的常量

2 不是去检查实际的运行时间,而是关注运行时间的增加 

渐进符号:Θ(theta)去掉低阶项,忽略前面的常数因子

 

课时2:

Θ符号:

f(n)=Θ(g(n)),表示存在正常数c一、c2和n0,使对全部的n>=n0,有0<=c1g(n)<=f(n)<=c2g(n);

对任一个函数f(n),若存在正常数c一、c2,使当n充分大时,f(n)能被夹在c1g(n)和c2g(n)中间,则f(n)属于集合Θ(g(n)),

Ο符号:

f(n)=Ο(g(n)),表示存在正常数c和n0,使对全部的n>=n0,有0<=f(n)<=cg(n);

Ο符号在一个常数因子内给出某函数的一个上界

Ω符号:

f(n)=Ω(g(n)),表示存在正常数c和n0,使对全部的n>=n0,有0<=cg(n)<=f(n);

对全部在n0右边的n值,函数f(n)的数值等于或大于cg(n)

定理:对任意两个函数f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=Ο(g(n))和f(n)=Ω(g(n));

ο符号:

f(n)=ο(g(n)),对任意正常数c>0,存在常数n0>0,使对全部的n>=n0,有0<=f(n)<=cg(n);

非渐近紧确的上界

ω符号:

f(n)=ω(g(n)),对任意正常数c>0,存在常数n0>0,使对全部的n>=n0,有0<=cg(n)<f(n);

非渐近紧确的下界

 

当渐进记号只出如今等式(或不等式)的右边,如n=Ο(n*n)时,等号表示集合的成员关系:n∈Ο(n*n);

当渐进符号出如今某个公式中时,咱们将其解释为一个不在意其名称的匿名函数,例如:2n*n+3n+1=2n*n+Θ(n)即表示2n*n+3n+1=2n*n+f(n),其中f(n)是某个属于集合Θ(n)的函数,

 

经常使用函数:

  指数式:对任意实数a>0、m和n,有下列恒等式:

解递归式的三种方法:

(1) 替换法:

  第1步 猜答案  第2步 数学概括法 第3步 找出参数,使问题成立

(2) 递归树:

(3 )主方法:

 

 

相关文章
相关标签/搜索