数据结构绪论(B站王卓老师)

- 一,相关概念

  + 1,<font color=green>**数据(DATA)**</font>:各种符号的集合

分为:①数值型数据 实数等

②非数值型数据 文字图象等

  + 2,<font color=green>**数据元素(DATA element)**</font>数据的基本单位,在计算机中通常作为一个<u>整体</u>进行考虑和处理,别名为元素,顶点,记录,结点。

  + 3,<font color=green>**数据项(DATA item)**</font>是构成数据元素的不可分割的最小单位

  + 小结:数据>数据元素>数据项

  + 4,<font color=green>**数据对象(DATA object)**</font>是性质相同的数据元素的集合,是数据的一个子集

- 二,数据结构  

  + 1,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,包括:①逻辑结构 ②存储结构 ③数据运算

  + 2,逻辑结构的种类

    + 划分方法一:

    + 划分方法二:

  + 3,存储结构的分类

    + 1,顺序存储结构:

    将数据元素存放在地址连续的存储单元中,其数据间的逻辑关系与物理关系一致。

    + 2,链接存储结构:

    将数据元素存放在任意的存储单元中,这组存储单元之间通过链接的方式建立起来。(C语言中用指针实现链式存储结构)

    + 3,索引存储结构:

    在存储数据元素的同时,还建立附加的索引表。

    + 4,散列存储结构:

    根据元素的关键字直接计算出该元素的存储地址,又称哈希存储结构。

  + 4,数据类型(DATA type):

    + 是指一个值的集合和定义在这个值集上的一组操作的总称。

    作用:

    1,数据类型决定了数据对象取值范围

    2,数据类型决定了数据对象所能进行的操作

    + 抽象数据类型(Abstract data type,**ADT**)

    定义格式如下:

    ```c

        ADT 抽象数据类型名{

        数据对象:

        数据关系:

        基本操作:

        }ADT 抽象数据类型名

    ```

    基本操作的定义格式为:

    ```c

        操作名(参数表)

        初始条件:

        操作结果:

    ```

    + 基本操作的定义格式说明

    + ***概念小结***

三,算法效率(时间效率和空间效率)

+ 1,两种度量方法:

  + ①事后统计方法:

    通过设计好的测试程序和数据,利用计算机计时器对不同算法的运行时间进行比较。

  + ②事前分析估算法:

    在计算机程序编写前,依据算法所处理的数据规模大小和算法实现所消耗的时间资源、空间资源等,对算法进行估算。

+ 2,算法运行时间=一个操作所需时间(假设均为单位时间)×算法中该操作重复执行的次数(语句频度)

  算法执行时间约等于语句频度总和

+ 3,两个n*n矩阵相乘算法效率分析

  ```c

    for(i=1;i<=n;i++)  //n+1

        for(j=1;j<=n;j++)  //n*(n+1)

            for(k=1;k<=n;k++) //n*n*(n+1)

                c[i][j]+=a[i][k]*b[k][j];//n*n*n

    ```

    算法耗费时间等于每条语句频度之和

T(n)=(n+1)+n*(n+1)+n*n*(n+1)+n*n*n=n^3+3n^2+2n+1

+ 4,算法的渐进时间复杂度(O是数量级符号)

  简称时间复杂度(T(n)的数量级)

  + 1,忽略低次幂项和最高次幂系数

  + 2,

  + 3,对于复杂的算法,可以分为几个部分,利用加法和乘法法则计算时间复杂度

    + 加法法则

    :T(n)=T1(n)+T2(n)  取两个函数中数量级最大的

    + 乘法法则

    :T(n)=T1(n)*T2(n)  数量级为两个函数的乘积

  + 4,时间复杂度T(n)按数量级递增顺序为

    O(1)<O(log2n)<O(n)<O(nlog2n)<O(n^2)<O(n^3)<O(2^n)<O(n!)

+ 5,渐进空间复杂度(S(n)的数量级)

  + 1,空间复杂度S(n)分析

    + 1,算法原地工作:算法所需 Workspace 的空间为常量,O(1)

    + 2,递归算法的空间复杂度:递归深度n*每次递归调用所需空间

    + 3,循环工作算法的空间复杂度:循环中使用的变量所占空间

  + 2,空间复杂度S(n)按数量级递增顺序为

    O(1)<O(n)<O(n^2)<O(n^3)<O(2^n)<O(n!)

    例子:

   

全部评论

相关推荐

羊村懒哥:刚想骂一看是友军对不起
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务