数据结构:时间复杂度

数据结构老师要求我们每周做一篇数据结构的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;							// 1
	int sum = 0;						// 2
	for (int i = 0; i < 10; i++) {		// 3
		for (int j = 0; j < 10; j++) {	// 4
			sum += i * j;				// 5
		}
	}	
	cout << sum << endl;				// 6

	return 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值