时间空间复杂度(入门篇)——数据结构与算法

简介: 正片开始👀数据结构与算法👏终于开始搞这块难啃的骨头了,走上这条漫漫长路之前要明白什么是数据结构?什么是算法?

正片开始👀

数据结构与算法👏

终于开始搞这块难啃的骨头了,走上这条漫漫长路之前要明白什么是数据结构?什么是算法?


是数据之间存在一种或多种特定关系的数据元素集合,为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系,这也就是研究数据结构的意义所在为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系这也就是研究数据结构的意义所在


算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列

,并且每条指令表示一个或多个操作


抛开上面的学术性口水话,简单来说就是:

1.数据结构是计算机存储,组织数据的方式

2.算法是一系列规定的计算步骤,为了实现的特定的计算目的而应用


给个更直观的视图就是:算法+数据结构就等于程序,数据结构可以理解为实现一个程序的基本单位,算法可以看作一个加工过程。


比如我去从一个很大的数组里面提取某个特定的对象,我们既可以老老实实从头到尾遍历查找,也就是所谓的暴力搜索,工程量随着数组的容量增大而增大;我们也可以巧夺智取,用二分查找让我们工作事半功倍。


分析维度👏

在知道基本概念后,我们说在拿到一个算法后,我们怎么去看他的好坏?或者给你多个算法,他们都实现同一个功能,我们怎么去判断他的优缺点去取舍呢?正常情况下,我们会选择把这个代码放在某个环境下运行比较时间,但这个做法有一个致命的缺点,在我们不同机器上,会有不同的结果,在好的机器上,运行时间会很短,但是在比较差一点的主机上,就稍有逊色,这样一来就有失公平。


大O的渐进表示法👏

不要直接计算时间,,我们需要去计算一个渐进的时间复杂度,也就是所谓的Big O (大O表示法),他其实本质上实在求一个量级(时间)在增加时的一个变化趋势


时间复杂度公式:T(n)=O(f(n))


T(n):时间频度(执行次数)

n :问题规模;

f(n):T(n)的同数量级函数;

O :代表正比例关系;

O(f(n)):即算法的渐进时间复杂度


常数阶👏

我们的算加法的完整过程:

int main()
{
int a = 1;
int b = 1;
int sum = a+b;
printf("%d",sum);
}

我们每走一步就会执行一次,上面的代码我就执行了四次;那么如果我把他的sum部分重复执行数十次数百次数千次,但他本质上和执行四次没有区别,执行时间是恒定的,这个层面上,他的时间复杂度就是O(1)(常数阶)。

不管这个常数是多少,4或∞,都不能写成O(4)、O(∞),都要写成O(1)


线性阶👏

我们给出一个 for loop

for(int a = 1;a<=n;a++)
{
 a++;
}

分析线性阶时会比常数阶更复杂因为要分析他的循环结构,上面的代码限制再++,总共执行3次,包括常数阶的赋值就是O(3n+1),在我的n足够大时他会无限接近于无穷,这时的+1就会没有意义。


这时就顺理成章,嵌套循环我们也就可以理解了,两层 for 就是O(n2),三层就是O(n2)for 下面加一个双层for循环就是O(n+n2)……这里面就包含了**平方阶**;此时我O(n)的效率就比O(n2)高。


对数阶👏

我们再给出一个while loop

int n = 0;
while(n<100000)
{
n*=2;
}

我们要看执行次数就要看多少步才能走出循环,就意味着要乘 x 个2能>=10000,则表示为 2^x =100000,假设为随机数 a,则 x= log 2 ^a,

复杂度为O(logn)

除了上面三种之外还有其他的复杂度

image.png

从常数阶到阶乘是越来越复杂,我们看一下直观数据:

image.png

这里横轴是输入(input)量级,纵轴是消耗时间也就是时间复杂度,也就是有个很直观的信息:算法复杂度越高,需要的时间越长,到后面就直接指数级增长。

image.png

空间复杂度👏

空间复杂度是指内存空间增长的趋势,相对就容易理解一些,O(1)就是相当于单次赋值,而 O(n)相当于赋值n次,可以把他想成一个大小为 n 的数组,复杂度越高需要分配的空间就越多;同理,O(n^2)就可以想成一个n行n列的二维数组。

其他时间复杂度指标👏

虽然有下面这些种吧,但我们主要会把重心放在 O 上,毕竟它是最常用的指标。

相关文章
|
7天前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
29天前
|
机器学习/深度学习 存储 算法
颠覆认知!Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【7月更文挑战第22天】在Python算法设计中,时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法,还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储,但也反映内存效率。平衡二者需视场景而定,如利用原地算法减少内存消耗,或牺牲空间加速执行。算法优化技巧,如分治与动态规划,助你在资源与速度间找寻最优解,从而高效应对大数据挑战。
30 3
|
12天前
|
机器学习/深度学习 人工智能 算法
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
本文全面介绍了人工智能(AI)的基础知识、操作教程、算法实现及其在实际项目中的应用。首先,从AI的概念出发,解释了AI如何使机器具备学习、思考、决策和交流的能力,并列举了日常生活中的常见应用场景,如手机助手、推荐系统、自动驾驶等。接着,详细介绍了AI在提高效率、增强用户体验、促进技术创新和解决复杂问题等方面的显著作用,同时展望了AI的未来发展趋势,包括自我学习能力的提升、人机协作的增强、伦理法规的完善以及行业垂直化应用的拓展等...
97 3
AI入门必读:Java实现常见AI算法及实际应用,有两下子!
|
7天前
|
应用服务中间件 nginx C语言
Nginx入门 -- 基本数据结构中之ngx_str_t,ngx_array_t
这两种数据结构是Nginx自定义数据类型的例子,它们证明了Nginx设计者在构建一个为高并发和高性能优化的web服务器时的精确和高效。理解这些数据结构是深入学习Nginx内部机制的基础,同时也是扩展和开发Nginx模块不可或缺的一部分知识。
16 1
|
14天前
|
搜索推荐
九大排序算法时间复杂度、空间复杂度、稳定性
九大排序算法的时间复杂度、空间复杂度和稳定性,提供了对各种排序方法效率和特性的比较分析。
28 1
|
28天前
|
存储 算法 搜索推荐
深度剖析 Python 算法:时间复杂度与空间复杂度的爱恨情仇,你站哪边?
【7月更文挑战第23天】在Python算法设计中,时间复杂度与空间复杂度如影随形,反映算法效率与资源消耗。时间复杂度揭示算法随输入规模增长的计算趋势,空间复杂度关注额外存储需求。找最大值示例中,两种实现均具O(n)时间与O(1)空间复杂度,但在排序等复杂场景下,如冒泡排序与快速排序,或哈希表与二叉树查找,权衡变得关键。实时系统偏好低时间复杂度算法,存储受限环境则需关注空间效率。最佳选择依应用场景而定,掌握二者平衡,方能编写高效代码。
24 10
|
28天前
|
存储 缓存 算法
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
【7月更文挑战第23天】在Python算法设计中,时间与空间复杂度是关键考量,需精妙平衡以优化程序性能。时间复杂度反映算法随输入规模增长的执行时间趋势,空间复杂度关注额外存储需求。线性搜索O(n)时间,O(1)空间;二分搜索O(log n)时间,O(1)空间,提升效率;动态规划如斐波那契数列O(n)时间与空间,利用存储减小计算。实际应用需按场景需求调整,如实时数据偏重时间,资源受限环境优先考虑空间。平衡两者,理解算法本质,结合实践,创造高性能程序。
35 7
|
28天前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
【7月更文挑战第23天】在Python算法设计中,时间与空间复杂度是幕后操控程序效率的双雄。时间复杂度反映算法执行时间随输入规模增长的速度,空间复杂度则计量算法运行时额外内存的使用。如顺序查找的时间复杂度O(n)与固定空间O(1),对比冒泡排序的O(n^2)时间和快速排序的O(n log n)时间优势,后者虽递归消耗空间,但在多数情况下提供更佳性能。根据需求,可权衡选择,如利用哈希表在充足内存下实现O(1)查找,或在空间受限时,偏好空间效率更高的算法,实现Python代码的高性能与优雅。
36 6
|
27天前
|
存储 算法 搜索推荐
揭秘!Python算法设计的隐形杀手:忽视时间复杂度与空间复杂度的后果有多严重?
【7月更文挑战第24天】在 Python 编程中, 算法设计是性能与效率的基石。忽视时间复杂度 (如使用 O(2^n) 的斐波那契数列递归算法而非 O(n) 的动态规划版本) 和空间复杂度 (如在插入排序中每次迭代都复制整个已排序数组, 导致 O(n^2) 的空间复杂度) 可能严重拖累程序。性能优化至关重要, 合理的算法设计保证程序高效稳定, 是攀登技术高峰的坚实阶梯。
36 3
|
27天前
|
算法 搜索推荐 数据处理
震惊!Python算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
【7月更文挑战第24天】在编程世界里, Python以简洁强大备受欢迎, 但算法设计与复杂度分析对程序性能至关重要。算法是程序的灵魂, 其效率直接影响数据处理能力。时间复杂度衡量算法执行速度, 如冒泡排序O(n²)与快速排序O(n log n)的显著差异; 空间复杂度关注内存占用, 递归算法需警惕栈溢出风险。优秀算法需平衡时间和空间效率, 深入理解问题本质, 迭代优化实现高效可靠。
25 2

热门文章

最新文章