[Python]算法 & 数据结构

0 一些定义

  • 什么是数据结构:存储、组织数据的方式
  • 什么是算法:为了满足业务需求、实现业务目的的各种方法和思路
  • 程序=算法+数据结构

1 算法

  • 算法的特性:
    • 独立性:独立于编程语言Python
    • 五大特性:
      • 有输入:>=0
      • 有输出:>0
      • 有穷性:执行有限步
      • 可行性:每一步都能执行
      • 确定性:每一步都有确定的意义

1.1 时间复杂度

  • 时间复杂度表示一个算法随着问题规模不断变化的最主要趋势。
  • 时间效率:算法的总执行步数。
  • 时间复杂度T(n):时间效率中主趋势O()

1.1.1 时间复杂度的计算规则

  • 基本操作:时间复杂度为O(1)
  • 顺序结构:时间复杂度按加法进行计算
  • 循环结构:时间复杂度按乘法进行计算
  • 分支结构:时间复杂度取最大值
  • 判断一个算法的效率时,只需要关注操作数量的最高次项,其他次要项和常数项可以忽略
  • 没有特殊说明,时间复杂度指最坏时间复杂度
# 时间复杂度为O(1)
def f():
    a=100
    b=200
    c=a+b

# 时间复杂度为O(n)
def f(n):
    for i in range(0,n):
        print(i)

# 时间复杂度为O(n),而不是O(2n)
def f(n):
    for j in range(0,2):
        for i in range(0,n):
            print(i)

1.1.2 最优最坏时间复杂度

  • 最优时间复杂度:最少需要多少基本操作。反映最乐观理想的情况,无参考价值。
  • 最坏时间复杂度:最多需要多少基本操作。主要关注的情况。
  • 平均时间复杂度:平均需要多少基本操作。

1.1.3 常见时间复杂度

  • o(1) :基本操作

  • o(logn): 一层循环,二分法

  • o(n): 一层循环

  • o(nlogn) 一层循环+二分法

  • o(n2):二层循环

  • o(n3):三层循环

执行次数函数举例 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1 O(n2) 平方阶
5log2n+20 O(logn) 对数阶
6n3+2n2+3n+4 O(n3) 立方阶

# 时间复杂度为O(log n)
def func(n):
    i=1
    while i<n:
        i*=2
        print(i)

1.2 空间复杂度

算法在运行过程中临时占用存储空间的大小的度量S(n)。

常见的空间复杂度:

  • o(1) : 常量

  • o(logn): list 二分法

  • o(n): list

  • o(nlogn)

  • o(n2): 矩阵

  • o(n3): 三维数据

1.2.1 常数阶O(1)

普通常量、变量、对象、元素数量与输入数据大小N无关的集合

# 空间复杂度为O(1)
for i in range(n):
    a=i
    print(a)

1.2.2 线性阶O(n)

元素数量与n呈线性关系的任一类型集合(一维数组、链表等),均使用线性大小的空间。

# 空间复杂度为O(n)
list1=[]
for i in range(n):
    list1.append(i)

1.2.3 平方阶O(n2)

元素数量与n呈平方关系的任一类型集合(矩阵),使用平方大小的空间。

# 以下代码循环了n次,但是使用的临时空间list1会随n的变化进行平方增长,空间复杂度为O(n2)
list1=[]
for i in range(n):
    list2=[]
    for j in range(n):
        list2.append(j)
    list1.append(list2)

2 数据结构

  • 数据结构式:存储、组织数据的方式。
  • 想通的数据采用不同数据结构的存储,带来的运行或存储效率是不同的
  • 算法是为了解决实际问题设计的,数据结构是算法需要处理的问题的载体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值