算法时间复杂度剖析

上传人:hao****an 文档编号:218198411 上传时间:2023-06-18 格式:PPT 页数:18 大小:489.47KB
收藏 版权申诉 举报 下载
算法时间复杂度剖析_第1页
第1页 / 共18页
算法时间复杂度剖析_第2页
第2页 / 共18页
算法时间复杂度剖析_第3页
第3页 / 共18页
资源描述:

《算法时间复杂度剖析》由会员分享,可在线阅读,更多相关《算法时间复杂度剖析(18页珍藏版)》请在装配图网上搜索。

1、算法时间复杂度(The Complexity of Algorithms)1算法时间复杂度的数学意义算法时间复杂度的数学意义 从数学上定义,给定算法A,如果存在函数f(n),当n=k时,f(k)表示算法A在输入规模为k的情况下的运行时间,则称f(n)为算法A的时间复杂度。其中:输入规模是指算法A所接受输入的数据量的多少算法效率分析 对于同一个算法,每次执行的时间不仅取决于输入规模,还取决于输入的特性和具体的硬件环境在某次执行时的状态。所以想要得到一个统一精确的F(n)是不可能的。为此,通常忽略硬件及环境因素,假设每次执行时硬件条件和环境条件是完全一致的。影响程序运行时间的因素机器的速度(假设完

2、全一样)算法的好坏输入数据规模运行时间=执行次数*每次执行所需的时间。由于每次执行所需的时间必须考虑到机器和编译程序的功能,因此通常只考虑执行的次数而已。例如:x=x+1;for(i=1;i=n;i+)for(i=1;i=n;i+)x=x+1;for(j=1;j=n;j+)x=x+1;1次 n次 n2次4数组数组int sum(int arr,int n)int i,total=0;for(i=0;i n;i+)total+=arri;return total;执行次数 1 n+1 n 1_ 2n+35假设两矩阵a,b皆为n*n。void add(int a ,int b ,int c ,in

3、t n)int i,j;for(i=0;in;i+)for(j=0;jn;j+)cij=aij+bij;6 执行次数 1 n+1 n(n+1)n2 _ 2n2+2n+2 void mul(int a ,int b ,int c ,int n)int i,j,k,sum;for(i=0;i n;i+)for(j=0;j n;j+)sum=0;for(k=0;k n;k+)sum=sum+aik*bkj;cij=sum;7执行次数 1 n+1 n(n+1)n2 n2(n+1)n3 n2_ 2n3+4n2+2n+2算法的渐近时间复杂度算法的渐近时间复杂度 很多时候,我们不需要进行如此精确的分析,究其

4、原因:1.在较复杂的算法中,进行精确分析是非常复杂的。2.实际上,大多数时候我们并不关心F(n)的精确度量,而只是关心其量级。Big-O算完执行次数后,通常利用Big-O来表示此算法的运行时间,如O(n),亦称为该程序的时间复杂度(time complexity)。Big-O取执行次数中最高次方或最大指数部份的项目即可。如:阵列元素相加为2n+3=O(n)矩阵相加为2n2+2n+1=O(n2)矩阵相乘为2n3+4n2+2n+2=O(n3)运用时间复杂度的观念,我们可以判断该程序的执行效率是否良好。91.O(1):常数时间(constant time)运行时间为常量2.O(logn):次线性时间

5、(sub-linear)二分搜索算法3.O(n):线性时间(linear)n个数内找最大值4.O(nlogn)快速排序算法5.O(n2):平方时间(quadratic)选择排序,冒泡排序6.O(n3):立方时间(cubic)两个n阶矩阵的乘法运算7.O(2n):指数时间(exponential)n个元素集合的所有子集的算法8.O(n!):阶乘时间(factorial)N个元素的全排列的算法如果n很大时 1 log n n n log n n2 n3 2n n!优-0)if(n%2=1)ans=(ans*a)%c;n=n/2;a=(a*a)%c;return ans;12int PowerMod

6、(int a,int n,int c)int ans=1;a=a%c;for(int i=0;in;i+)ans=ans*a%c;return ans;O(log2n)O(n)顺序搜索13int search(int data,int target,int n)int i;for(i=0;i n;i+)if(target=datai)return i;return-1;最佳次数:当数据是第一个时,第一次就找到。最差次数:当数据不存在或数据在最后一个时,需要N次。平均次数:O(n)通常比较最差次数最差次数。二分查找int search(int A,int n,int target)int low

7、=0,high=n-1;while(low=high)int mid=(low+high)/2;if(Amid=target)return mid;else if(Amid target)low=mid+1;else high=mid-1;return-1;14O(log2n)void quicksort(int a,int low,int up)if(lowup)int i=low;int j=up;int t=alow;while(i!=j)while(i=t)j-;if(ij)ai+=aj;while(ij&ait)i+;if(ij)aj-=ai;ai=t;quicksort(a,low

8、,i-1);quicksort(a,i+1,up);O(nlog2n)voidselectsort(intd,intn)for(inti=0;in-1;i+)intm=i;for(intj=i+1;jdj)m=j;if(m!=i)intt=di;di=dm;dm=t;16O(n2)全排列void dfs(int k)void dfs(int k)int i;int i;if(k=n+1)if(k=n+1)couta1;couta1;for(i=2;i=n;i+)for(i=2;i=n;i+)cout ai;cout ai;coutendl;coutendl;else else for(i=1;i=n;i+)for(i=1;i=n;i+)if(tagi=false)if(tagi=false)ak=i;ak=i;tagi=true;tagi=true;dfs(k+1);dfs(k+1);tagi=false;tagi=false;17O(n!)假设机器是每秒108次基本运算,1秒钟内,各种复杂度的算法能够解决的问题的最大规模,如下表:18n!2nn3n2nlog2nN

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!