首页 > 其他分享 >1. 时间复杂度和空间复杂度的计算(1)

1. 时间复杂度和空间复杂度的计算(1)

时间:2024-11-01 20:51:42浏览次数:3  
标签:次数 int 复杂度 ++ 算法 时间 计算 空间

1. 什么是时间复杂度和空间复杂度?

1.1 算法效率

**算法效率分析分为两种:第一种是时间效率,第二种是空间效率。**时间效率被称为时间复杂度,而空间效率被称为空间复杂度。时间复杂度主要衡量一个算法的运行速度,空间复杂度主要衡量一个算法所需要的额外空间

1.2 时间复杂度的概念

定义:在计算机科学中,算法的时间复杂度是一个函数,定量描述了该算法的运行时间。算法中的基本操作的执行次数就是算法的时间复杂度

1.3 空间复杂度的概念

空间复杂度是对一个算法在运行过程中临时占用存储空间大小的量度使用大O渐进表示法

2. 如何计算时间复杂度

2.2 大O的渐进表示法

实际我们计算时间复杂度时候,并不一定要计算精确的执行次数,而只需要大概执行次数,使用大O阶方法

推导大O阶方法:

  1. 用常数1取代运行时间中的所以加法常数
  2. 再修改后的运行次数函数中,只保留最高阶项
  3. 如果最高阶存在且不是1,则去除与中国项目相乘的常数。得到的结果就是大O阶
实例1:
//请计算一下Func1基本操作执行了多少次?
void Func1(int N)
{
	int c=0;
    for(int i=0;i<N;++i)
    {
		for(int j=0;j<M;++j)
        {
			++c;
        }
    }
    for(int k=0;k<2*N;k++)
    {
		++c;
    }
    int M=10;
    while(M--)
    {
        ++c;
    }
    printf("%d\n",c);
}

准确次数:N*N+2 * N +10

F(N) = N^2+2*N+10 (随着N的增大,N^2对结果的影响最大)

根据例子分析,时间复杂度可以分为三个部分。

  1. 两个for循环的嵌套 —— O(N^2)
  2. 单独的for循环 —— O(N*2)
  3. while的递减 —— O(1)

因此该例子的时间复杂度就为O(N^2)

注:时间复杂度就是一个估算,看表达式中影响最大的那一项

实例2:
//计算Func2的时间复杂度
void Func2()
{
	int c=0;
    for(int k=0;k<M;++k)
    {
		++c;
    }
    for(int k=0;k<N;++k)
    {
		++c;
    }
    printf("%d\n",c);
}

通过分析,我们发现题目没有给出M和N的值 ,因此该例子的时间复杂度就为O(N+M)

如果给了具体条件就比较M和N的大小 ,来得出时间复杂度

实例3
//计算Func4的时间复杂度
void Func4(int N)
{
	int c=0;
	for(int k=0;k<100;++k)
	{
		++c;
	}
	printf("%d\n",c);
}

时间复杂度为 O(1)

如果是确定的常数次,时间复杂度都是 O(1)

实例4
//计算strchr的时间复杂度
const char*strchr(const char*str,char character)
{
	while(*str != '\0')
    {
		if(*str==character)
            return str;
        ++str;
    }
    return null;
}

如果字符串长度只有1 那结果就是 O(1)

如果字符串长度为N 那结果就是 O(N)

得看最坏情况所以应该为 O(N)

补充:

有些 算法的时间复杂度存在最好、平均和最坏的情况:

  • 最坏情况:任意输入规模的最大运行次数(上界)
  • 平均情况:任意输入规模的期望运行次数
  • 最好情况:任意输入规模的最小运行次数(下界)

例如:在一个长度为N的数组中搜索一个数据x

最好情况:1次找到

最坏情况:N次找到

平均情况:N/2次找到

在实践中一般情况关注的是算法的最坏运行情况,所以数组中搜素数据时间复杂度为O(N)

实例5
//计算BubbleSort的时间复杂度
void BubbleSort(int*  a,int n)
{
	assert(a);
	for(size_t end=n;end<0;++i)
	{
		if(a[i-1]>a[i])
		{
			Swap(&a[i-1],&a[i]);
			exchange=1;
		}
	}
	if(exchange==0)
		break;
}

冒泡排序的时间复杂度分析:

第一趟冒泡:N

第二趟冒泡:N-1

第三趟冒泡:N-2

……

第N趟冒泡:1

利用等差数列公式计算: (N+1)*N/2 ————准确的次数

而影响最大的是 N^2

即时间复杂度为O(N^2)

实例6
//计算BinarySearch的时间复杂度
int BinarySearch(int*a,int n,int x)
{
	assert(a);
	int begin=0;
	int end=n;
	while(begin<end)
	{
		int mid=begin+((end_begin)>>1)
		if(a[mid]<x)
			begin=mid+1;
		else if(a[mid]>x)
			end=mid;
		else
			return mid;
	}
	return -1;
}

二分查找为折半查找

最好情况为 O(1) , 即一次就找到

假设找了X次

1 * 2 * 2…* 2=N

2^X = N

X = log N (log的底数为2)

实例7
//计算阶乘递归Factorial的时间复杂度
long long Factorial(size_t N)
{
	return N < 2 ? N: Factorial(N-1)*N;
}

递归调用了N次,每次递归运算多少次 ——> O(1)

整体就是 O(N)

注: 常见的时间复杂度:O(N^2) O(logN) O(1)

标签:次数,int,复杂度,++,算法,时间,计算,空间
From: https://blog.csdn.net/2301_78837849/article/details/143440406

相关文章

  • 云计算和边缘计算有哪些本质区别
    云计算和边缘计算之间的本质区别体现在:1.定义和核心概念不同;2.数据处理位置不同;3.延迟和带宽不同;4.安全性保障不同;5.应用场景和适用性不同;6.成本和资源消耗不同;7.技术成熟度和发展趋势不同。通过这些方面的比较,旨在为企业和技术人员提供明晰的指导,帮助他们在不同的应用场......
  • 2025年软件工程/计算机专业最新SSM框架毕业设计选题精选推荐
    ......
  • 2025年计算机专业最新毕业设计专题推荐
    ......
  • zroi3054 教育题:正交补空间的引入和应用
    题意相信大家都看过了。注意最后要求的其实是这两个东西:\(\sum[a_i\neqa_{i+1}]\)最小值,以及在前面这个最小的情况下的填数方案数。如果无法填数,输出\(0\)。考虑一个暴力dp:设\(f1_i\)和\(f2_i\)表示只考虑\(a_1\sima_i\),原问题的最小值\(f1\)以及在此时情况下的方案......
  • 基于node.js+vue核酸检测预约系统后台(开题+程序+论文)计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容选题背景在全球公共卫生事件的背景下,核酸检测成为防控疫情的重要手段。关于核酸检测相关的研究,现有研究主要集中在检测技术、检测试剂的研发等方面,专门针对核酸检测......
  • 《上海市计算机学会竞赛平台2024年8月月赛丙组题目T1 统计得分 T2 等差数列的素性 T3
    T1统计得分内存限制: 256 Mb时间限制: 1000 ms题目描述在一场知识竞赛中,选手答对一题得 11 分,答错不得分且要倒扣 11 分,但扣分不能让分数小于 00。给定一个由 Y 及 N 构成的字符序列,答对记为 Y,答错记为 N。选手一开始从 00 分开始,请输出选手最后的得分......
  • JS中计算时数据有误差解决方案
    首先判断需要计算的数字是否为整数//判断一个数字是否为一个整数exportfunctionisInt(num){num=Number(num);returnMath.floor(num)===num}将一个浮点数转为整数,返回整数和倍数。如3.14返回314100exportfunctiontoInt(num){varret={times:1,......
  • 2025年计算机专业小程序选题大全
    weixin001基于小程序的购物系统设计与实现+ssmweixin002家庭记账本的设计与实现+ssmweixin003教学辅助微信小程序设计+ssmweixin004校园水电费管理微信小程序的设计与实现+ssmweixin005基于小程序的老孙电子点菜系统开发设计与实现+ssmweixin006优购电商小程序的设计与......
  • NodeJS动漫论坛-计算机毕业设计源码09947
    基于微信小程序的动漫论坛摘 要随着移动互联网的飞速发展,智能手机和移动互联网已经成为人们日常生活中不可或缺的一部分。在这样的背景下,微信小程序应运而生,凭借其无需下载安装、即用即走的特点,迅速成为连接用户与服务的桥梁。动漫作为一种深受年轻人喜爱的文化形式,拥有庞......
  • 【机器人学导论】简明学习笔记2.1——空间描述和变换(1/2)
    主要参考学习资料:《机器人学导论(第4版)》JohnJ.Craig著台大机器人学之运动学——林沛群(本文插图来自该课程课件)本章前置知识:矢量和矩阵的四则运算-单位矩阵-转置矩阵-逆矩阵-正交矩阵码字不易,求点赞收藏(´•ω•̥`)有问题欢迎评论区讨论~目录空间描述和变换描......