关于数据结构的基础知识

1.数据结构的三要素:

  1. 数据的逻辑结构
  2. 数据的物理结构
  3. 数据的运算

2.数据的逻辑结构

  1. 集合结构:数据元素间的次序是任意的
  2. 线性结构:数据元素之间构成一个有序序列
  3. 树状结构:数据元素之间形成一个层次结构
  4. 图状结构:最一般的逻辑结构,图中的每个元素的前驱和后继数目都不限

3.数据结构常见的运算有以下几种

  1. 创建
  2. 清除
  3. 插入
  4. 删除
  5. 搜索
  6. 更新
  7. 访问
  8. 遍历

4.数据结构的实现

一个数据结构就是针对讨论某一个逻辑结构讨论数据的存储以及运算的实现,通常称为存储实现运算实现

  1. 储存实现的基本目标是建立数据的机内表示
    1. 它包括两部分:数据元素的存储,数据元素之间关系的存储
    2. 物理结构由三个部分组成:
      1. 存储结点,每个存储结点存放一个数据元素;
      2. 数据元素之间的关系的存储,也就是逻辑结构的机内表示;
      3. 附加信息,便于运算实现而设置的一些“哑结点”,如链表中的头结点。
  2. 存储节点之间的关联通常有以下4种方式
    1. 顺序实现:用存储的位置表示元素之间的关系。  主要用数组实现
    2. 链接实现:用指针显式地指出元素之间的关系,如单链表就是表示线性关系的
    3. 散列存储方式(哈希存储方式):是专用于集合结构的数据存放方式。在哈希存储中,各个结点均匀地分布在一块连续的存储区域中,用一个哈希函数将数据元素和存储位置关联起来。
    4. 索引存储方式:所有的存储结点按照生成的次序连续存放。另外设置一个索引区域表示结点之间的关系

5.算法的时间复杂度

  1. 定义:算法所需的运算量与问题规模之间的关系

6.渐近表示法:

概括:在算法分析中不考虑具体的运行时间函数,只考虑运行时间函数的数量级。

  1. 最常用的渐近表示法是大O(Order)表示法
    1. 定义:如果存在两个正常数c和N0,使得当N>=N0时有T(N)<=cF(N),则记为T(N)=O(F(N))
    2. 大O表示法并不需要给出运行时间的精确值,而只需要给出一个数量级,表示当问题规模很大时算法运行时间的增长是受限于哪一个数量级的函数
    3. 大O表示法的定理
      1. 求和定理:假定T1(n)、T2(n)是程序P1、P2的运行时间,并且T1(n)是O(f(n))的,而T2(n)是O(g(n))的。那么,先运行P1、再运行P2 的总的运行时间是:T1(n)+T2(n)=O(MAX(f(n),g(n))
      2. 求积定理:如果T1(n) 和 T2(n)分别是O(f(n))和O(g(n))的,那么T1(n)×T2(n)是O(f(n)×g(n)) 的。
    4. 大O表示法的计算规则
      1. 简单语句:如赋值语句、输入输出语句,它们的运行时间与问题规模无关,在每个计算机系统中运行时间都是一个常量,因此时间复杂度为 O(1)
      2. 条件语句:if <条件> then <语句> else <语句>,的运行时间为执行条件判断的代价 ,一般为O(1),再加上执行 then 后面的语句的代价(若条件为真),或执行else 后面的语句代价(若条件为假)之和,即max(O(then子句),O(else子句))
      3. 循环语句的执行时间是循环控制行和循环体执行时间的总和。循环控制一般是一个简单的条件判断,因此循环语句的执行时间是循环体的运行时间乘循环次数。
      4. 嵌套循环语句:对外层循环的每个循环周期,内存循环都要执行它的所有循环周期,因此,可用求积定理计算整个循环的时间复杂度,即最内层循环体的运行时间乘所有循环的循环次数。
      5. 连续语句:利用求和定理把这些语句的时间复杂性相加。
    5. 大O的简化计算
      1. 在程序中找出最复杂、运行时间最长的程序段,计算它的时间复杂度。也就是整个程序的时间复杂度
      2. 当两个循环的时间复杂度都是相同的,例如为O(n),则整个程序的时间复杂度是O(n)的

7.根据时间复杂度将算法分类

时间复杂度为多项式的算法称为多项式时间算法,时间复杂度为指数函数的算法称为指数时间算法。

  1. 常见时间复杂度之间的关系(n->∞):O(1)<O(logN)<O(N)<O(NlogN)<O(N^2)<O(2^N)<O(N!)<O(N^N)

  2.  在实际应用中,通常取运行时间函数的主项

8.时间复杂度举例

  1. 对数阶
    s=0;
    for(j=1; j<=n; j*=2)
        s++;
    

    时间复杂度为O(log2n)

  2. 立方阶

    // 矩阵乘法:n x n
    for( i = 0; i < n; i++)                                    //(n+1)
        for( j = 0; j < n; j++)                               //n(n+1)
        {   c[i][j] = 0;                                    //n2
    	    for( k= 0; k< n; j++)                           // n2(n+1)
    		    c[i][j] = c[i][j]+a[i][k]* b[k][j];        // n3
    	}
    

    时间复杂度为O ( n3)

9.空间复杂度

  1. 固定空间需求:与处理的问题规模无关
  2. 可变空间需求:与处理的数据量有关
  3. 渐进的空间复杂度:当n->∞占用的空间量与n的关系
  4. 空间复杂度一般按最坏情况处理
  5. 空间复杂度的计算比较简单,表示方法与时间复杂度相同
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值