python 数据结构 基础

算法
算法是解决问题的方法和思想。
算法复杂度
对于算法的时间性质和空间性质,最重要的是其数量级和趋势.可以认为 3n2 3 n 2 1000n2 1000 n 2 ,都是 n2 n 2

算法完成工作最少需要多少基本操作,即最优时间复杂度
算法完成工作最多需要多少基本操作,即最坏时间复杂度
无特殊说明时,算法的时间复杂度都是指最坏时间复杂度

基本操作,即只有常数项,认为其时间复杂度为O(1)
顺序结构,时间复杂度按加法进行计算
循环结构,时间复杂度按乘法进行计算
分支结构,时间复杂度取最大值

例子

如果 a+b+c=1000,且 a2+b2=c2 a 2 + b 2 = c 2 (a,b,c 为自然数),求abc所有可能组合
算法1:

for a in range(0, 1001):  # 执行n次
    for b in range(0, 1001):  # 执行n次
        for c in range(0, 1001):  # 执行 n次
            if a**2 + b**2 == c**2 and a+b+c == 1000:
                print("a, b, c: %d, %d, %d" % (a, b, c))

算法复杂度为 T(n)=O(nnn)=O(n3) T ( n ) = O ( n ∗ n ∗ n ) = O ( n 3 )

算法2:

for a in range(0, 1001):  # 执行n次
    for b in range(0, 1001):  # 执行n次
        c = 1000 - a - b
        if a**2 + b**2 == c**2:
            print("a, b, c: %d, %d, %d" % (a, b, c))

算法复杂度为 T(n)=O(nn(1+1))=O(n2) T ( n ) = O ( n ∗ n ∗ ( 1 + 1 ) ) = O ( n 2 )

import matplotlib.pyplot as plt
from math import log
n=11
x = [i for i in range(1,n)]
O1 = [1 for i in range(1,n)]
Ologn = [log(i,2) for i in range(1,n)]
On = [i for i in range(1,n)]
Onlogn = [i*log(i,2) for i in range(1,n)]
On2 = [i*i for i in range(1,n)]
On3 = [i*i*i for i in range(1,n)]

plt.plot(x,O1,label="1")
plt.plot(x,Ologn,label="logn")
plt.plot(x,On,label="n")
plt.plot(x,Onlogn,label="nlogn")
plt.plot(x,On2,label="n^2")
plt.plot(x,On3,label="n^3")
plt.legend()

这里写图片描述

数据结构
在python中list和dict都是一种数据结构.在list查询一个值需要的时间复杂度是O(n),而在dict里查询一个值的时间复杂则为O(1).
数据存储方式不同会导致需要不同的算法进行处理,我们希望算法解决问题的效率越快越好,玉石就要研究数据应该如何保存,这就是数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值