数据结构与算法-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)
顺序结构: 时间复杂度按加法进行计算
循环结构: 时间复杂度按乘法进行计算
分支结构: 时间复杂度取最大值

 

最坏时间复杂度

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

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

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

 

常见的时间复杂度

执行次数函数举例 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n2+2n+1 O(n2) 平方阶
5log2n+20 O(logn) 对数阶
2n+3nlog2n+19 O(nlogn) nlogn阶
6n3+2n2+3n+4 O(n3) 立方阶
2n O(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)是对一个算法在运行过程中临时占用存储空间大小的量度。

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

你可能感兴趣的:(python与数据结构)