首页 > 其他分享 >时间复杂度与空间复杂度

时间复杂度与空间复杂度

时间:2023-11-23 18:34:20浏览次数:24  
标签:函数 int 渐进 复杂度 表示法 ++ 时间 空间

时间复杂度:主要衡量的是一个算法的运行速度。

空间复杂度:主要衡量一个算法所需要的额外空间。

在计算机发展的早期,计算机的存储容量很小,所以对空间复杂度很是在乎。但是随着计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

大O的渐进表示法规则

时间复杂度和空间复杂度一般都使用大O的渐进表示法进行表示,大O的渐进表示法规则如下:

1、所有常数都用常数1表示。
2、只保留最高阶项。
3、如果最高阶项存在且不是1,则去除与这个项的系数,得到的结果就是大O阶。

时间复杂度:基本操作的执行次数。

例子:

//计算Func1的时间复杂度
void Func1(int N)
{
    int count = 0;
    for (int i = 0; i < 2 * N; i++)
    {
        for (int j = 0; j < 2 * N; j++)
        {
            count++;
        }
    }
    for (int k = 0; k < 2 * N; k++)
    {
        count++;
    }
}

Func1函数执行了一个嵌套的for循环(共执行了4 * N2次),又执行了一个单独的for循环(共执行了2 * N次),所以Func1函数的时间复杂度为:T(N) = 4 * N2 + 2 * N 。

根据大O的渐进表示法,只保留最高阶项(即4 * N2),去除最高项的系数后(即N2),就是最终结果。所以,用大O的渐进表示法表示Func1函数的时间复杂度为:O(N2)

//计算Func2的时间复杂度
void Func2(int N)
{
	int count = 0;
	for (int k = 0; k < 100; k++)
	{
		++count;
	}
}

Func2函数内部执行了一个for循环(共100次),Func2函数内语句的执行次数不会随着传入的变量N的改变而改变,即执行的次数为常数次。Func2函数的时间复杂度为T(N) = 100

根据大O的渐进表示法,所有的常数都用常数1来表示,所以,用大O的渐进表示法表示Func2函数的时间复杂度为:O(1)

注意:在刷题时看到题目要求时间复杂度为O(1),并不是要求函数内部不能含有循环,而是要求循环的次数为常数次。
空间复杂度:算的是变量的个数

//计算冒泡排序函数的空间复杂度
void BubbleSort(int* a, int N)
{
	assert(a);
	for (int i = 0; i < N; i++)
	{
		int exchange = 0;
		for (int j = 0; j < N - 1 - i; j++)
		{
			if (a[j]>a[j + 1])
			{
				int tmp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = tmp;
				exchange = 1;
			}
		}
		if (exchange == 0)
			break;
	}
}

冒泡排序函数中使用了常数个额外空间(即常数个变量),所以用大O的渐进表示法表示冒泡排序函数的空间复杂度为O(1) 。  

  

标签:函数,int,渐进,复杂度,表示法,++,时间,空间
From: https://www.cnblogs.com/Super-scarlett/p/17852212.html

相关文章

  • java常用时间日期类总结
    前置知识:UTC时间(CoordinatedUniversalTime):协调世界时,主要的世界时间标准,0时区的时间UTC+8:东八区时间Epoch(纪元):1970-01-0100:00:00UTC(北京时间1970-01-0100:08:00UTC+8) 常用类描述 System.currentTimeMillis()返回Epoch至今的毫秒数 java.ut......
  • 管理时间的四象限法则
    在管理工作和生活中,我们经常面临着各种各样的任务和事务。为了更好地处理这些任务,可以借鉴“重要紧急”、“重要不紧急”、“不重要紧急”以及“不重要不紧急”这四个象限的概念。重要紧急:这类任务需要立刻行动,因为它们对目标或责任的实现产生直接影响。应该全身心投入这类任务,确......
  • 2023-2024-1 20232315 《网络空间安全导论》第二周学习
      一、 我最近初步了解了密码学基础,了解了其起源、初步发展与应用、包含的主要内容以及在当下的情况,下面是大概的思维导图: 二、下面是我学习后的问题:1、信息加密与信息隐藏有何本质区别?解决方法:问AI答案: 问题2:当今密码学面临哪些挑战,该如何迎接这些挑战?答案:......
  • 性能提升至2.5倍!新款极空间Z4 Pro图赏
    日前极空间召开新品发布会,Z4Pro迎来升级,处理器换新,CPU性能提升至此前标准版的2.5倍。现在这款新品已经来到我们评测室,下面为大家带来图赏。极空间Z4Pro新款提供标准版8GB、标准版16GB、性能版16GB三款产品。其中,标准版8GB、标准版16GB采用全新一代英特尔处理器N97,4核3.6G,24核......
  • 2023-2024-1学期20232423《网络空间安全导论》第三周学习总结
    防火墙的那个部分最容易被攻陷,加固方法有哪些教材学习——网络安全基础3.1网络安全概述3.2网络安全防护技术对于计算机来说,可攻破的入口有很多,所以需要我们不断地提升技术、寻找防护方法,并不断加固我们的防御。3.3网络安全工程与管理3.4新型网络及安全技术对于新生......
  • 大规模神经网络优化:神经网络损失空间“长”什么样?
    前言 如何刻画网络的优化性质呢?在优化相关的论文中,通常通过分析Hessian矩阵及其特征值,或者将损失函数进行一维或二维的可视化来分析网络的优化性质。我们希望这些指标能够帮助我们更好的理解网络损失的landscape,优化器优化轨迹的性质等等。我们希望将这些指标刻画的性质与优化......
  • oracle 日期时间函数使用总结
    常用日期数据格式获取年的最后一位,两位,三位,四位--获取年的最后一位selectto_char(sysdate,'Y')fromdual;--获取年的最后两位selectto_char(sysdate,'YY')fromdual;--获取年的最后三位selectto_char(sysdate,'YYY')fromdual;--获取年的最后四位select......
  • pandas datetime 获取当前时间之前一个月的时间
    在Python中,我们可以使用pandas和datetime模块来获取当前日期之前一个月的时间。以下是一个示例:使用pandas:importpandasaspdfrompandas.tseries.offsetsimportDateOffset#获取当前日期now=pd.to_datetime('today')#计算一个月前的日期one_month_ago=now-DateOf......
  • Date、Calendar(日历对象)、LocalDateTime三大时间日期类的各种处理方式【精选集】
    Date类:1.1、将字符串型时间日期转化为date类型StringtimeString="2023-11-1709:27:00";SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//创建"简单时间格式化"对象,格式为:yyyy-MM-ddHH:mm:sstry{D......
  • Java时间截和日期格式相互转换的方法。
    1.将时间戳转换为日期格式: 2.将日期格式转换为时间戳: ......