数据结构与算法-python(一)--概念

数据结构的基本概念

数据结构可以分为 逻辑结构 物理结构 

逻辑结构:

  •   集合结构 :元素之间是相等关系
  •   线性结构 :元素之间一对一关系
  •   树形结构 : 元素之间一对多关系
  •   图形结构 :元素之间多对多关系

物理结构:是指数据在计算机的存储形式 

  •   顺序存储;
  •   链式存储: 通过该地址就可以找到相关的数据元素的位置;

算法分析

时间复杂度的概念

程序执行的总时间 = 程序总的执行步骤 * 每一步执行的时间

例如: 

for  a in range(1001):     # 1000次
    for b in range(1001):  # 1000次
        c = 1000 - a -b    # 3次
        li = []
        li.append(c)

程序执行的总时间: 1000 * 1000 * 3 = 1000^2 *3   如果是n次则 

抽象: n^2 * 3 

渐进函数表示: n^2

大O表示法: O(N^2)

大O表示法

对于算法进行特别具体的细致分析虽然很好,但在实践中的实际价值有限。对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些是分析算法效率的主要部分。而计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。例如,可以认为3n2和100n2属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率“差不多”,都为n2级。

 

大O表示法的几条基本计算规则

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

 

最坏时间复杂度

分析算法时,存在几种可能的考虑:

  • 算法完成工作最少需要多少基本操作,即最优时间复杂度
  • 算法完成工作最多需要多少基本操作,即最坏时间复杂度
  • 算法完成工作平均需要多少基本操作,即平均时间复杂度

主要关注算法的最坏情况,亦即最坏时间复杂度。

 

常见的时间复杂度

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

注意,经常将log2n(以2为底的对数)简写成logn

消耗时间的大小关系

 

O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)

算法效率关系

 

空间复杂度

类似于时间复杂度的讨论,一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间,它也是问题规模n的函数。

渐近空间复杂度也常常简称为空间复杂度

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

算法的时间复杂度和空间复杂度合称为算法的复杂度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值