【1906】算法设计与分析学习笔记——复杂度分析

一、典型插入排序复杂度

 1 template<class Type>
 2 void insertion_sort(Type *a, intn)
 3 {
 4   Type key; // cost times 
 5   for (inti= 1; i< n; i++){                  // c1   n
 6           key=a[i];                          // c2   n-1
 7           intj=i-1;                          // c3   n-1
 8           while( j>=0 && a[j]>key ){         // c4   sum of ti
 9           a[j+1]=a[j];                       // c5   sum of (ti-1)
10           j--;                               // c6   sum of (ti-1)
11       }
12      a[j+1]=key;                             // c7    n-1
13      }
14 }

 

 归并排序:

二、复杂度分析方法

计算递推式通常有三种方法:代入法迭代方法(iterating)和主方法(master method)。

 1、代入法
 
2、递归树

 

 

 

 

3、主定理方法

主方法 主定理:设a1a1a≥1和b>1b>1b>1为常数,f(n)f(n)f(n)是一个函数,T(n)T(n)T(n)由下面的递推式定义: 

                                       T(n)=aT(n/b)+f(n)
 
 

 

 

三、摊还分析

摊还分析(Amortized analysis)

  • 求取数据结构的一个操作序列中所执行的所有操作的平均时间,来评价操作的代价
  • 不同于平均情况分析,它并不涉及概率,可以保证最坏情况下每个操作的平均性能
  • 即使操作序列中某个单一操作的代价很高,但其平均代价可能是很低的

基本方法

  • 聚合分析(aggregate analysis)
  • 核算法(accounting method)
  • 势能法(potential method)

动态给数据分配空间,提高空间利用率!

 

转载于:https://www.cnblogs.com/HONG-QI/p/11006611.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值