【算法分析与设计】——算法及效率分析基础(一)

一、算法的概念

1、算法 :解决问题的一种方法或一个过程,是一个由若干运 算或指令组成的有穷序列

2、算法—问题 :求解问题的算法可以看作是输入实例与输出之间的函数

3、算法的特点 :input, output(输入,输出) 

                            Deterministic (确定性)

                            Feasible(可行性)

                             Finite(有穷性)

二、算法的正确性

1、正确的算法 :对任意一个输入,算法能得到一个正确的输出

2、循环不变量 :与程序变量有关的一个语句,它在循环刚开始前,以及在 循环的每个迭代执行后为真,特别是在循环结束后,仍然 为真。

3、 插入排序的循环不变量  :在for循环第j个迭代执行前,子数组A[1.. j-1]由最初A[1.. j-1]中的元素构成,不过现在是有序的。

4、利用循环不变量证明算法的正确性 

三、算法的效率:

  • 最好情形时间复杂度(顺序)
  • 平均情形时间复杂度 A(n) :在给定同样规模为 n 的输入实例的概率分布下,算法求解这些实例所需要的平均时间
  • 最坏情形时间复杂度 W(n) (逆序):算法求解输入规模为 n 的实例所需要的最长时间

       最坏情形是任何规模为的问题实例运W行时间的上界,即任何规模为的实例,其运行时间都不会超过最坏情形的运行时间。 知道最坏情形运行时间后,我们就知道算法最差到什么程度。对某些算法,最坏情形经常发生。例如在某个数据库中查询不存在的某条数据就是查询算法的最坏情形,平均情形有时跟最坏情形差不多。

四、算法的伪码表示:

  1. 赋值语句:←
  2. 分支语句:if …then … [else…]
  3. 循环语句:while,  for,repeat  until
  4. 转向语句:goto
  5. 输出语句:return
  6. 调用:直接写过程的名字
  7. 注释://…

五、问题计算的复杂度的界定--排序问题:

算法最坏情况下平均情形下
插入排序O(n^2)O(n^2)
冒泡排序O(n^2)O(n^2)
快速排序O(n^2)O(nlogn)
堆排序O(nlogn)O(nlogn)
二分归并排序O(nlogn)O(nlogn)

六、问题求解的关键:

• 建模:对输入参数和解给出形式化或半形式化的描述

• 设计算法: 采用什么算法设计技术 正确性——是否对所有的实例都得 到正确的解

• 分析算法——效率

 

七、函数的渐近的界:

  •  大O符号

         定义:设  f  和 g是定义域为自然数集  N上的函数.  若存在正数 c 和 n0,使得 对一切 n > n0有                      

         0 < f(n) < c g(n)  成立,

         则称 f(n) 的渐近的上界是 g(n), 记作 f (n) = O(g(n)) 

例子:设 f(n) = n^2 + n,则      

f(n)=O(n^2),取 c = 2,n0 =1 即可      

f(n)=O(n^3),取 c = 1,n0 =2 即可 

1.  f (n) = O(g(n)) ,f(n)的阶不高于g(n)的阶.

2. 可能存在多个正数c,只要指出一个即可. 

3. 对前面有限个值可以不满足不等式. 

4. 常函数可以写作O(1). 

  • 大Ω符号

定义:设  f  和 g是定义域为自然数集  N上的函数.  若存在正数 c 和 n0,使 得对一切 n >= n0有                    

0 <= cg(n) <= f(n) 成立,

 则称 f(n) 的渐近的下界是 g(n), 记作 f (n) = Ω (g(n)) 

例子:

设 f(n) = n^2 + n,则      

f(n) = Ω (n^2),  取 c = 1, n0 =1即可      

f(n) = Ω (100n), 取 c=1/100,  n0 =1即可 

1.  f (n)= Ω (g(n)),f(n)的阶不低于g(n)的阶.

2. 可能存在多个正数c,指出一个即可.

3. 对前面有限个 n 值可以不满足上述不等式.

  • 小o符号

定义 :设  f  和 g是定义域为自然数集 N上 的函数. 若对于任意正数 c 都存在 n0,使得对一切 n >= n0有                      

0 <=  f(n) < c g(n)  成立,

则记作 f (n) = o(g(n))  

例子:

f(n)=n^2+n,则f(n)=o(n^3)例子 c>=1显然成立,因为n^2+n<cn^3(n0=2)

任给1>c >0, 取 n0 > [2/c] 即可.  因为cn >= cn0 > 2        (当n > n0)                

n^2+n < 2n^2 < cn^3 

1.  f (n) = o(g(n)) , f(n)的阶低于g(n)的阶

2. 对不同正数c, n0不一样.  c越小n0越大 

3. 对前面有限个 n 值可以不满足不等式

  • ω符号

定义:设  f  和 g是定义域为自然数集 N上 的函数.  若对于任意正数 c 都存在 n0,使 得对一切 n >= n0有

0 <= cg(n) < f(n) 成立,

则记作f (n) = ω (g(n))  

例子:

设 f (n) = n^2 + n,则f (n) = ω (n),不能写  f (n) =ω (n^2),因为取 c = 2,不存在n0使得对一切 n> n0有下式成立                 c n^2 = 2n^2< n^2 + n   

1.  f (n)= ω (g(n)), f (n)的阶高于g(n) 的阶.  

2. 对不同的正数c, n0不等,c 越大n0 越大.  

3. 对前面有限个 n 值可以 不满足不等式. 

  • Θ符号

若 f (n) = O (g(n)) 且 f (n) = Ω (g(n)),  则记作 f (n) =Θ (g(n))   

例子:f(n) =n^2 + n, g(n) =100n^2,那么有 f (n) =Θ (g(n))
 

1.  f(n) 的阶与 g(n) 的阶相等.

 2.  对前面有限个n 值可以不满足条件.

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值