算法导论学习笔记

一 算法运行时间的刻画

对于足够大的输入,精确运行时间中的倍增常量和低阶项被输入的规模本身的影响所支配。当输入规模足够大,使得只有运行时间的增长量级有关时,需要研究渐近效率。渐近地更有效的某个算法对除很小的输入规模外的所有情况将是最好的选择。

二 关于一些数学符号

O:f(n) = O(g(n)) -->存在c>0,n0>0 ; 使得0≤f(n)≤cg(n)当n≥n0时;

集合定义:

O(g(n)) = {f(n);存在c>0,n0>0; 使得0≤f(n)≤cg(n)当n≥n0时}

即:f(n)∈O(g(n))

Ω:f(n) = Ω(g(n)) -->存在c>0,n0>0 ; 使得0≤cg(n)≤f(n)当n≥n0时;

Θ:O∩Ω;可以存在,可以不存在;

o :f(n) = o(g(n)) -->任给c>0,存在n0>0 ; 使得0≤f(n)≤cg(n)当n≥n0时;

ω :f(n) = ω(g(n)) -->任给c>0,存在n0>0 ; 使得0≤cg(n)≤f(n)当n≥n0

 

O

上界

 

Ω

下界

 

Θ

O∩Ω

类似 =

 

o

上界

 

ω

下界

 

三 递归的渐近解

1.    代入法;需要先猜测渐近界的解,然后用归纳法证明此解正确。

2.    递归树法:适用于所有情况,但是此方法不够严谨,一般解出后需要使用代入法验证一下。

3.    主方法:可求解的递归式形式如下:

主定理:

T(n) = aT(n/b)+f(n); 令a≥1和b>1是常数,f(n)是一个函数。

其中将n/b解释为|n/b」或「n/b|。T(n)有如下渐近界。

a:f(n)=O(n^logb(a-ε)) 常数ε>0 --> T(n)=Θ(n^logba);

b:f(n)=Θ((n^logba)) k≥0 --> T(n)=Θ((n^logba)*(log2n));

c:f(n)=Ω(n^logb(a+ε)) ε>0  &  af(n/b)≤cf(n) 0<c<1

 --> T(n)=Θ(f(n));

视频课上的b情况如下:

b:f(n)=Θ((n^logba)*(log2n)K)  k≥0 --> T(n)=Θ((n^logba)*(log2n)K+1);

主定理刻画的分治算法为:生成a个子问题,每个子问题的规模为1/b,分解和合并的步骤共花费时间为f(n);

四 快速排序算法

快速排序随机主元的复杂度期望为nlgn

* 随机选择主元以消除输入顺序对排序复杂度的影响

1 选择主元

2 循环每个元素

3 递归进行

4 优化递归头

* A[]={13 6 9 5 14 8 7 26 3 }

 * 1 选择主元 13   

 * 2 循环j比较数组中的元素大小

 *   {13 6 9 5 14 8 7 26 3 }

 *    i  j               

 *   {13 6 9 5 14 8 7 26 3 }

 *            i j        

 *   {13 6 9 5 14 8 7 26 3 }

 *            i    j

 *   {13 6 9 5 8 14 7 26 3 }

 *              i    j

 *   {13 6 9 5 8 7 14 26 3 }

 *                i       j

 *   {13 6 9 5 8 7 3 26 14 }

 *                  i     j

 * 3 调换主元和A[i]的位置,并记住i

p = i

for j = 1 -> n-1

if p > A[j]

i++

A[j] <--> A[i]

j++

A[p] <--> A[i]

return i

 


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值