什么是算法。算法的时间复杂度和空间复杂度

【数据结构算法时间复杂度空间复杂度 一、前言 数据结构算法是程序的灵魂,这是某位程序员大佬所言,学习了这门,我们便可以在 编程之路越走越远。时间复杂度一般是我们所关心的。 二、时间复杂度 时间复杂度简单的说就是一个程序运行所消耗的时间,叫做时间复杂度,我们无法目测 一个程序具体的时间复杂度,但是我们可以估计大概的时间复杂度。 一段好的代码的就根据算法时间复杂度,即使在大量数据下也能保持高效的运行速率,这也是 我们学习算法的必要性。 2.1时间复杂度表示形式 一般用O()来表示算法时间复杂度,我们叫做大O记法。 阅读详情

以图书馆为例,如果一本一本找累死人,要是有个索引,先找哪一类这样会快很多。如何查找其实就是算法。

算法是解决问题步骤的有限集合,通常用某一种计算机语言进行伪码描述。通常用时间复杂度和空间复杂度来衡量算法的优劣。

算法的五大特征:输入、输出、有穷性、确定性、可行性。

输入:零个或多个输入。

输出:一个或多个输出。

有穷性:有限步骤后在可接受时间内完成。

确定性:每个步骤都有确定含义,无二义性。

可行性:每一步都是可行的。

算法设计要求:正确性、可读性、健壮性、时间效率高和存储低。

正确性:有输入输出,无二义性,有正确答案。

可读性:方便阅读。

健壮性:输入不合法能处理

时间效率高和存储低:时间空间复杂度越低越好。

1.时间复杂度:

时间复杂度是一个函数,它定性描述了该算法的运行时间。

意义:同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。
定义:
关于这是一个代表算法输入值的字符串的长度n的函数。

   时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。

   使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。

实例:
以冒泡排序为例,时间复杂度分析如下:

若文件的初始状态是正序的,一趟扫描即可完成排序。所需的关键字比较次数C和记录移动次数M均达到最小值:
在这里插入图片描述
所以,冒泡排序最好的时间复杂度为 O(n)

若初始文件是反序的,需要进行n-1趟排序。每趟排序要进行 n-1次关键字的比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

在这里插入图片描述
冒泡排序的最坏时间复杂度为在这里插入图片描述

综上,因此冒泡排序总的平均时间复杂度为 在这里插入图片描述

2.空间复杂度:

我们在写代码时,完全可以用空间来换去时间。

举个例子说,要判断某年是不是闰年,你可能会花一点心思来写一个算法,每给一个年份,就可以通过这个算法计算得到是否闰年的结果。

另外一种方法是,事先建立一个有2050个元素的数组,然后把所有的年份按下标的数字对应,如果是闰年,则此数组元素的值是1,如果不是元素的值则为0。这样,所谓的判断某一年是否为闰年就变成了查找这个数组某一个元素的值的问题。

第一种方法相比起第二种来说很明显非常节省空间,但每一次查询都需要经过一系列的计算才能知道是否为闰年。第二种方法虽然需要在内存里存储2050个元素的数组,但是每次查询只需要一次索引判断即可。

这就是通过一笔空间上的开销来换取计算时间开销的小技巧。到底哪一种方法好?其实还是要看你用在什么地方。

定义:
算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。
————————————————
版权声明:本文为CSDN博主「萝卜头LJW」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013164931/article/details/80189351

算法时间复杂度空间复杂度 阅读详情

相关推荐

什么是时间复杂度空间复杂度

目录算法效率时间复杂度概念大O的线性表示法时间复杂度举例空间复杂度空间复杂度的定义空间复杂度举例 时间复杂度空间复杂度是用来分析一个算法的效率的。 算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已

qq_45967533的博客 3万+

算法算法概述【时间复杂度空间复杂度

1、算法定义 算法:为了实现业务目的的各种方法思路就是算法。同样的数据,同样的目的, 不同的算法,不同的方法思路,效率就会不同 算法是一种独立的存在 , 它并不依附于代码 , 代码只是实现算法思想的方式而已。 算法是独立存在的一种解决问题的方法思想 对于算法而言,实现的语言并不重要,重要的是思想 算法可以有不同的语言描述实现版本(如C描述、C++描述、Python描述等) 2、算法的五大特性 输入: 算法具有0个或多个输入 输出: 算法至少有1个或多个输出 有穷性: 算法在有限的步骤之后会自动结

u013250861的博客 1986

时间复杂度空间复杂度解析

1.算法的效率 虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。 算法的效率主要由以下两个复杂度来评估: 时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的使用程度。 空间复杂度:评估执行程序所需的存储空间。可以估算出程序对计算机内存的使用程度。 设计算法时,一般是要先考虑系统环...

qq_43558142的博客 1848

算法时间复杂度空间复杂度是什么?

文章目录一、算法时间复杂度定义二、推导大O阶方法三、推导示例1、常数阶2、线性阶3、对数阶4、平方阶5、立方阶四、常见的时间复杂度五、最坏情况与平均情况六、算法空间复杂度 一、算法时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法时间复杂度,也就是算法的时间量度。记作:T(n)=O(f(n))。它表示...

RunFromHere的博客 3312

什么是算法时间复杂度空间复杂度

空间复杂度描述的是算法在最坏情况下所需的额外内存空间,包括算法中使用的辅助数据结构临时变量等。算法时间复杂度空间复杂度都是用来衡量算法的效率资源消耗的。时间复杂度描述的是算法在最坏情况下执行所需的时间,即算法的最大运行时间。需要注意的是,时间复杂度空间复杂度只是对算法的一种理论分析,实际执行时间空间占用也受到计算机硬件、编程语言优化等方面的影响。因此,在选择评估算法时,需要综合考虑时间复杂度空间复杂度以及实际环境等因素。算法时间复杂度空间复杂度是衡量算法效率的两个重要指标。

wzxue1984的博客 740

算法时间复杂度空间复杂度计算

1、算法时间复杂度 1.1算法时间复杂度的定义:        在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度,是一种“渐进表示法”。...

K-fall的博客 4万+

时间复杂度空间复杂度的概念及各种算法时间复杂度 及举例

时间复杂度空间复杂度的概念及各种算法时间复杂度 及举例 算法的复杂度可分为俩种 一种时间复杂度 另一种是空间复杂度。 俩者的概念:时间复杂度是指执行这个算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。时间空间(即寄存器)都是计算机资源的重要体现,而算法的复杂性就是体现在运行该算法时的计算机所需的资源多少。 各种算法的复杂度如下: 时间复杂度: 1:算法时间复杂度反映...

zengxianglei的博客--手指星辰 奈何天! 1万+

【数据结构与算法时间复杂度空间复杂度

介绍了衡量一个算法效率的两个重要指标,时间复杂度空间复杂度,以及它们的计算思路方法。

weixin_63726869的博客 2181

算法时间复杂度空间复杂度详解

通常,对于一个给定的算法,我们要做 两项分析。第一是从数学上证明算法的正确性,这一步主要用到形式化证明的方法及相关推理模式,如循环不变式、数学归纳法等。而在证明算法是正确的基础上,第二部就是分析算法时间复杂度算法时间复杂度反映了程序执行时间随输入规模增长而增长的量级,在很大程度上能很好反映出算法的优劣与否。因此,作为程序员,掌握基本的算法时间复杂度分析方法是很有必要的。 算法执...

yjclsx的博客 7736

算法时间复杂度空间复杂度-概念

在计算机科学中,时间复杂度是一个函数,它定量地描述了一个算法运行所耗费的时间;从理论上来说,这是不能算出来的,只有把这个算法放在编译器里面运行去比较才能得知这个算法的运行时间长短;所以为了方便衡量,才有了时间复杂度的分析方式:一个算法的运行时间与语句的执行次数成正比,算法中基本操作的执行次数,成为算法时间复杂度。那么如何来确定算法的语句执行次数呢?// 请计算一下Func1中++count语句总共执行了多少次?i < N;++ i)j < N;k < 2 * N;

zc331的博客 1891
上一篇: 数据结构的三要素
OneITman
博客等级 码龄7年 0粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值