数据结构与算法(1)——时间和空间复杂度

简介: 时间和空间复杂度该系列参考b站up视频:https://space.bilibili.com/31337561/channel/seriesdetail?sid=389852后续会继续更新

时间复杂度

算法的执行效率,算法执行时间与算法输入值之间的关系

def test(num):
    total=0
    for i in range(num):
        total+=i
    return total
# 大O表示法中不关心系数和两个小的时间复杂度。
# 该算法的时间复杂度为O(N)

一般看时间复杂度查看算法中有没有for/while循环 无循环一般都为O(1)

# 案例分析
# O(1)
def O1(num):
    i = num
    j = num*2
    return i+j
# O(logN)
def OlogN(num):
    i=1
    while(i<num):
        i=i*2
    return i
# O(N)
def ON(num):
    total=0
    for i in range(num):
        total+=i
    return total
# O(M+N) 两个循环并列
def OMN(num1,num2):
    total=0
    for i in range(num1):
        total+=i
    for j in range(num2):
        total+=j
    return total
# O(NlogN)
def ONlogN(num1,num2):
    total=0
    j=0
    for i in range(num1):#N
        while(j<num2):#logN
            total+=i+j
            j=j*2
    return total
# O(N^2)
def ON2(num):
    total=0
    for i in range(num):
        for j in range(num):
            total+=i+j
    return total

整体思路:先看有没有循环,没有循环就是O(1)

写程序时候力求时间复杂度最低

img

O(1)<O(logN)<O(N)<O(NlogN)<O(N^2)<O(2^N)<O(N!)

二分查找:O(logN),排序:O(NlogN)


算法的空间复杂度

大O表示法

算法存储空间与输入值之间的关系

def test(num):
    total=0        #变量占空间了,空间复杂度O(1)
    for i in range(num):
        total+=i
    return total
# 空间复杂度O(1) 一个int型占四个字节,一直不变的

def test(nums):
    array=[]    #声明了列表变量
    for num in nums:
        array.append(num)
    return array
#空间复杂度O(N)

占空间的都是声明的变量,1.看空间复杂度直接找变量

变量如果是常量,就是O(1),里面有多个数据,随着输入改变变化时候,就是O(N),eg:array list等等。

常用空间复杂度O(1),O(N)

很少有O(N^2)

2.看有无递归,每一层信息都保留在递归栈,递归一般都有空间复杂度O(N)


总结:时间复杂度和空间复杂度只能二选一,鱼和熊掌不可兼得。可以写出两种不同的程序,工作时候时间复杂度>空间复杂度

相关文章
|
13天前
|
机器学习/深度学习 缓存 算法
Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【10月更文挑战第4天】在Python编程中,算法的设计与优化至关重要,尤其在数据处理、科学计算及机器学习领域。本文探讨了评估算法性能的核心指标——时间复杂度和空间复杂度。通过详细解释两者的概念,并提供快速排序和字符串反转的示例代码,帮助读者深入理解这些概念。同时,文章还讨论了如何在实际应用中平衡时间和空间复杂度,以实现最优性能。
46 6
|
2月前
|
机器学习/深度学习 算法 程序员
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
本文是作者阅读《趣学算法》后的笔记,介绍了算法复杂度的基本概念,包括时间复杂度和空间复杂度的不同阶表示,并通过具体例子展示了如何计算和理解算法的效率。
61 2
读《趣学算法》:重开算法之门,时间复杂度与空间复杂度
|
3月前
|
机器学习/深度学习 存储 算法
颠覆认知!Python算法设计中的时间复杂度与空间复杂度,你真的理解对了吗?
【7月更文挑战第22天】在Python算法设计中,时间与空间复杂度是评估算法效能的核心。时间复杂度不仅限于大O表示法,还涵盖平均与最坏情况分析。空间复杂度虽关注额外存储,但也反映内存效率。平衡二者需视场景而定,如利用原地算法减少内存消耗,或牺牲空间加速执行。算法优化技巧,如分治与动态规划,助你在资源与速度间找寻最优解,从而高效应对大数据挑战。
43 3
|
18天前
|
存储 算法
算法的时间复杂度和空间复杂度
本文详细讨论了算法的时间复杂度和空间复杂度,包括它们的概念、计算方法和常见复杂度的对比,并通过多个实例解释了如何计算算法的时间和空间复杂度。
18 0
算法的时间复杂度和空间复杂度
|
19天前
|
机器学习/深度学习 存储 算法
【初阶数据结构】算法效率大揭秘 | 时间与空间复杂度的深度剖析
【初阶数据结构】算法效率大揭秘 | 时间与空间复杂度的深度剖析
|
6天前
|
算法
[数据结构] -- 时间复杂度和空间复杂度
[数据结构] -- 时间复杂度和空间复杂度
8 0
|
1月前
|
算法 Python
震惊!Python 算法设计背后,时间复杂度与空间复杂度的惊天秘密大起底!
在 Python 算法设计中,理解并巧妙运用时间复杂度和空间复杂度的知识,是实现高效、优雅代码的必经之路。通过不断地实践和优化,我们能够在这两个因素之间找到最佳的平衡点,创造出性能卓越的程序。
37 4
|
1月前
|
缓存 算法 数据处理
时间&空间复杂度,Python 算法的双重考验!如何优雅地平衡两者,打造极致性能?
在Python算法中,时间与空间复杂度的平衡至关重要。时间复杂度反映算法执行时间随输入规模的变化趋势,空间复杂度则关注额外存储空间的需求。优秀的算法需兼顾两者,如线性搜索时间复杂度为O(n),空间复杂度为O(1);二分查找在时间效率上显著提升至O(log n),空间复杂度保持为O(1);动态规划通过牺牲O(n)空间换取O(n)时间内的高效计算。实际应用中,需根据具体需求权衡,如实时数据处理重视时间效率,而嵌入式系统更关注空间节约。通过不断优化,我们能在Python中找到最佳平衡点,实现高性能程序。
55 3
|
18天前
|
算法 C语言
深入理解算法效率:时间复杂度与空间复杂度
深入理解算法效率:时间复杂度与空间复杂度
|
2月前
|
搜索推荐
九大排序算法时间复杂度、空间复杂度、稳定性
九大排序算法的时间复杂度、空间复杂度和稳定性,提供了对各种排序方法效率和特性的比较分析。
119 1