数据结构的算法分析(C++描述)

程序=数据结构+算法

因此算法分析对于程序设计非常重要。

主要从时间分析空间分析入手。时间分析:执行代码所需要的时间,反映了代码的时间效率;空间分析:执行代码所需要的空间,反映了空间效率。

tips:程序设计中空间与时间效率常常矛盾,因此需要根据实际问题设计程序。

时间复杂度分析:

算法频度的引入:问题规模为n的函数,表示算法输入量的大小。(用T(n)表示)

#include<iostream>
using namespace std;
bool solve(int a[10][20], int m, int n, int& s) {
    if (m != n)
        return 0;//算法频度为O(1)
    s = 0;//同上
    for (int i = 0; i < m; i++) {
        s += a[i][i];
    }//算法频度为O(n)
    return 0;
}

时间复杂度求解:

表示:T ( n )= O ( f ( n ) );

其中O是取数量级算法,主要取f(n)的数量级,f(n)是每一行代码的执行次数;

主要步骤:

1.找出基本语句(执行次数最多的语句),一般为循环;

2.计算f(n);

3.用O取最大的数量级即可。

tips:复杂的代码可以采用演绎法:

如:void example(int& x, int n) {//x=1
    for (int i = 0; i < n; i++) {
        x = 5 * x;
    }
}

解:基本语句:for循环;

第一次循环x=5;

第二次循环x=5*5;

第三次循环x=5*5*5;

。。。。。。。

第k次循环x=5^k;

5^k=n;

得出k=f(n)=log5(n);

例题
例题一:
​

void fun(int n) {
	int i = 0;
	while (i <= n)
		i += 2;
}

1.基本语句:while循环

2.第一次:i=i+2;

   第二次:i=i+2+2;

   第三次:i=i+2+2+2;

    第k次:i=i+2*k;

    假设此时刚好脱离循环:i+2*k=n;

k=n-i/2;故T(n)=O(n);

例题二:

即第一段代码,不做赘述;

例题三:
​

void fun(int n) {
	int i = 0;
	int s = 0;
	while (s <= n) {
		i += 1;
		s += i;
	}
}

​

1.基本语句:while循环

2.第一次:i=1;s=0+1;

   第二次:i=2;s=1+2;

   第三次:i=3;s=1+2+3;

   第k次:i=k;s=1+2+3+......+k;

 故T(n)=O(sqrt ( n ) );

空间复杂度:

空间=形参占用空间+临时变量占用空间;

注:空间复杂度只考虑临时变量占用空间

同时间复杂度,空间复杂度也用O取数量级;

步骤:找临时变量个数;本文所有代码S(n)=O(1);

int Max(int a[], int n) {
	int maxi = 0;
	for (int i = 0; i < n; i++) {
		if (a[i] > a[maxi])
			maxi = i;
		return a[maxi];
	}
}

S(n)=O( n );

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值