数据结构:时间复杂度

来源:互联网 发布:中盟网络快运 编辑:程序博客网 时间:2024/05/17 23:53

数据结构老师要求我们每周做一篇数据结构的ppt,这周的ppt题目时时间复杂度。

没办法,老板要我们做,我们就做了,顺便我也能用写ppt的资料写博客。

基本概念

元运算:为了便于比较同一问题的不同算法,通常从算法中选取一种对于所研究的问题来说是基本运算的元操作(也称基本运算)
算法执行时间大致为基本运算所需的时间与其运算次数(一条语句的运行次数称为语句频度)的乘积。
在一个算法中,执行基本运算的次数越少,其运行时间也就越少;执行基本运算的次数越多,其运算时间也就越多。
也就是说,一个算法的执行时间可以由其中基本运算的执行次数来计量。

时间复杂度公式

T(n) = O(f(n))
记号“O”读作“大O”,它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同
表达式中的f(n)在最后得出的时候需要忽略其低阶项和常系数,这样既可以简化T(n)的计算,
又能比较客观地反映出当n很大时算法地时间性能。

例题1

计算下面这个程序的时间复杂度
/********************************************************* * Author: crazymad * Last modified: 2016-09-14 21:29 * Filename: main.cpp * Description:  *********************************************************/#include <iostream>using namespace std;int main(int atgc, char* argv[]){int n = 10;// 1int sum = 0;// 2for (int i = 0; i < 10; i++) {// 3for (int j = 0; j < 10; j++) {// 4sum += i * j;// 5}}cout << sum << endl;// 6return 0;}
上边这个简单程序中有6个基本运算操作
int n = 10;   执行1次
int sum = 0;执行1次
for (int i = 0; i < n; i++) {执行n+1次
for (int j = 0; j < n; j++)执行n*(n+1)次
sum += i * j;执行n*n次
cout << sum << endl;执行1次

综合就是:
n+n*(n+1)+3 = n^2+2n+3
忽略低阶项和常数项
最后得出:

T(n)=O(n^2) 

例题2

void fun(int a[], int n, int k) {int i;if (k == n-1) {for (i = 0; i < n; i++)printf("%d\n", a[i]);} else {for (i = k; i < n; i++) a[i] = a[i] + i * i;fun(a, n, k+1);}}        
右边这个简单程序中有6个基本运算操作
int n = 10;   执行1次
int sum = 0; 执行1次
for (int i = 0; i < n; i++) { 执行n+1次
for (int j = 0; j < n; j++) 执行n*(n+1)次
sum += i * j; 执行n*n次
cout << sum << endl; 执行1次

综合就是:
n+n*(n+1)+3 = n^2+2n+3
忽略低阶项和常数项
最后得出:
T(n)=O(n^2)
0 0
原创粉丝点击