《软件技术基础》之《算法复杂度分析》

《软件技术基础》之《算法复杂度分析》

算法复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要空间资源的量称为空间复杂性。这个量应该只依赖于算法要解的问题的规模、算法的输入和算法本身的函数。如果分别用N、I和A表示算法要解问题的规模、算法的输入和算法本身,而且用C表示复杂性,那么,应该有C=F(N,I,A)。一般把时间复杂性和空间复杂性分开,并分别用T和S来表示,则有:T=T(N,I)和S=S(N,I)。

通常让A隐含在复杂性函数名当中

规定输入:
在这里插入图片描述

程序的算法分析方法

抛开软件和硬件因素,只和问题规模有关。编写程序前预先估计算法优劣,改进或者选择最佳编程实现。
一个算法用程序设计语言表示后,算法就是由一组语句构成,算法的执行效率就由各语句执行的次数所决定。

一个算法花费的时间与算法中语句执行次数成正比例 ,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数 (计算步)称为语句频度或时间频度,记为 T(n) 。

一般情况下,算法的基本操作重复执行的次数是模块n的某一个函数f(n),因此,算法的时间复杂度记做:T(n)=f(n)。随着模块n的增大,算法执行时间的增长率和f(n)的增长率成正比,所以f(n)越小,算法的时间复杂度越低,算法的效率高。

示例1:求线性序列元素之和
在这里插入图片描述

示例2:顺序存储结构中实现插入运算
算法实现:

Status List_Insert(ListPtr L,int pos,ElemType elem)
{
	Status status=range_error;
	int len=L->length,i;
	if(len == MAXSIZE) status=overflow;
	else if(1<=pos && pos<=len+1)
	{
		for(i=len;i>=pos;i--) L->elem[i+1]=L->elem[i]; // 数据后移一个位置
		L->elem[pos]=elem;
		L->length++;
		status=success;
	}
	return status;
}

在这里插入图片描述
示例3:选择排序

void swap(int *a,int *b) //交换2个数
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
void select_sort(int arr[], int len)
{
    int i,j;

        for (i = 0 ; i < len - 1 ; i++)
    {
                int min = i;
                for (j = i + 1; j < len; j++)     //走访未排序的元素
                        if (arr[j] < arr[min])    //找到目前最小值
                                min = j;    //记录最小值
                swap(&arr[min], &arr[i]);    //做交换
        }
}

在这里插入图片描述

Q:为什么是3?
A:交换2个数的swap函数有3条语句。

其他参考博客:
算法复杂度分析
算法的时间复杂度和空间复杂度-总结

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值