python开发之算法&数据结构(一)

这篇博客详细介绍了算法的基础知识,包括时间复杂度、空间复杂度和递归的概念。探讨了Python中常见的几种时间复杂度,并通过实例分析了二分查找、冒泡排序、选择排序和插入排序的时间复杂度和空间复杂度。文章还强调了在实际应用中如何通过空间换时间来优化算法。
摘要由CSDN通过智能技术生成

一、算法基础

1. 时间复杂度

在计算机科学中,时间复杂性,又称时间复杂度(Time Complexity ),算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。

  • Python的效率大概1秒能计算107个基本运算。

例1. 时间复杂度为:O(1)

print("hello world")

例2. 时间复杂度为:O(n)

for i in range(n):
    print("hello world")

例3. 时间复杂度为:O(n²)

for i in range(n):
    for j in range(n):
        print("hello world")

例4. 时间复杂度为:O(n³)

for i in range(n):
    for j in range(n):
        for k in range(n):
            print("hello world")

例5. 时间复杂度为:O(n²)

for i in range(n):
    for j in range(i):
        print("hello world")

例5分析:当i=0时,第二层循环执行0次;当i=1时,第二层循环执行1次;当i=2时,第二层循环执行2次;以此类推…当i=n-1时,第二层循环执行n-1次;整个程序执行了0+1+2+3+…+(n-1)次,利用等差数列求和公式,求得整个程序执行了 n²/2-n/2 次。但是时间复杂度考虑的是规模趋于无穷大的情况,不包括低阶项和首项系数,故例5的时间复杂度为:O(n²)

例6. 时间复杂度为:O(logn)

while n > 1:
    print(n)
    n = n // 2

例6分析:假设n=64,发现打印的n分别是64,32,16,8,4,2,一共打印了6次,由2^6=64 => 6 = log264,所以时间复杂度为:O(log2n);又因为计算机处理的是二进制数据,多数情况都是以2为底的情况,所以时间复杂度可以写为:O(logn)

常见时间复杂度效率排序:
O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n²logn) < O(n³)

一眼法判断时间复杂度:

  1. 先看是否有循环减半的过程,如果有—> O(logn);
  2. 几层循环就是n的几次方的复杂度(循环要是关于n的)。

2. 空间复杂度

空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间(内存)大小的量度。

空间换时间:

  • 在实际公司应用中,更注重的是时间复杂度尽可能的小,毕竟空间可以通过加内存条解决,所以会有“空间换时间”的思想。

3. 递归

递归的两个特点:

  • 调用自身
  • 结束条件

对比以下两个递归函数:

def func1(x):
    if x > 0:
        print(x)
        func1(x-1)
def func2(x):
    if x > 0:
        func2(x-1)
        print(x)

分析:假设x = 4,func1打印输出:4,3,2,1;而func2打印输出:1,2,3,4。原因是func1是先打印再调用递归,func2是先调用递归再打印,当x = 4时执行到 func2(x-1),就会跳回代码开头执行 func2(x),第一层递归此时x = 3,执行到 func2(x-1)时,又跳回代码开头执行 func2(x),第二层递归此时x = 2ÿ

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值