当前位置:   article > 正文

数据结构基本概念及算法与时间复杂度_数据结构的理解以及算法时间复杂度的认识。

数据结构的理解以及算法时间复杂度的认识。

一、数据结构基本概念

  1.数据:是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。

        数值型数据和非数值性数据

  2.数据元素:数据的基本单位,也称结点或记录。一个数据元素可由若干个数据项组成。

  3.数据项:是构成数据元素的不可分割的最小单位,也称域。

      例:学生记录就是一个数据元素,它由学号、姓名、性别等数据项组成。

      数据>数据元素>数据项

        学生表>个人记录>学号,姓名...

  4.数据对象:是具有相同性质的数据元素的集合,是数据的一个子集

  5.数据类型:是一个值的集合和定义在此集合上的一组操作的总称。

      原子类型:其值不可再分的数据类型

      结构类型:其值可以再分解为若干成分(分量)的数据类型

      抽象数据类型:抽象数据组织及与之相关的操作。

  6.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。  

        结构:数据元素相互之间的关系称为结构。

        数据结构包括:逻辑结构   存储结构   数据的运算

        算法的设计取决于所选定的逻辑结构,算法的实现依赖于所采用的存储结构。

逻辑结构:是指数据元素之间的逻辑关系。与数据的存储无关,是独立于计算机的。

   划分方法1:

        线性结构:有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直
接前趋和一个后继。

             例:线性表、栈、队列、串

       非线性结构:一个结点可能有多个直接前趋和直接后继。

             例:集合  树   图

  划分方法2:

        1.集合结构:结构中的数据元素之间除了同属于一个集合的关系之外,没有其他任何的关系。

        2.线性结构:结构中的数据元素之间存在着一对一的线性关系。

        3.树形结构:结构中的数据元素之前存在着一对多的层次关系。

        4.网状结构:结构中的数据元素之间存在着多对多的任意关系。

存储结构:是指数据结构在计算机中的表示(又称映像),也称为物理结构。

   1.顺序存储:把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

      优点:可以实现随机存取,每个元素占用最少的存储空间。

      缺点:只能使用相邻的一块存储单元,可能产生较多的外部碎片。

          C语言中用数组来实现顺序存储结构

   2.链式存储:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针来表示。不要求逻辑上相邻的元素在物理位置上也相邻。

       优点:不会出现碎片现象,能充分利用所有存储单元。

       缺点:每个元素因存储指针而占用额外的存储空间,且只能实现顺序存取。

          C语言中用指针来实现链式存储结构

          存储着每个元素本身的同时,还存储着下一个元素的地址。

    3.索引存储:在存储结点信息的同时,还建立附加的索引表。存储真正的信息的同时还
建立了个索引表(目录),方便查找。

       索引表中的每一项称为索引项。索引项一般形式是(关键字,地址) 关键字是能唯一标识一个结点的那些数据项。

        优点:检索速度快。

        缺点:附加的索引表额外占用存储空间。增加和删除数据时也要修改索引表,会花费时间。

   4.散列存储:根据结点的关键字直接计算出该结点的存储地址。 又称哈希存储。

         优点:检索、增加和删除结点的操作都很快。

         缺点:若散列函数不好,则可能出现元素存储单元的冲突,而解决冲突会增加时间和空间的开销。

数据的运算:分为运算定义和运算实现。

   运算定义:是针对逻辑结构的,指出运算的功能

   运算实现:是针对存储结构的,指出元素的具体操作步骤。

     逻辑结构和存储结构都相同, 但运算不同, 则数据结构不同。

二、算法与时间复杂度

   算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,其中的每条指令表示一个或多个操作。

    算法特性:
       有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
       确定性:算法中的每一条指令必须有确切的含义,没有二义性,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。
       可行性:算法是可执行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现。
       输入:一个算法有零个或多个输入,算法可以没有输入。
       输出:一个算法有一个或多个输出,算法必须要有输出。

  算法效率的度量:通过时间复杂度和空间复杂度来描述。

       1.时间效率:指的是算法所耗费的时间
         • 事后统计:将算法实现,测算其时间开销。
         • 事前分析:
            算法运行时间 = ∑ 每条语句的执行次数 x 该语句执行一次所需要的时间。
            其中,每条语句的执行次数称为语句频度。

       2.空间效率:指的是算法执行过程中所耗费的存储空间
          • 算法本身要占据的空间,输入/输出,指令,常数,变量等
          • 算法要使用的辅助空间

时间复杂度-完整执行程序所用次数的数量级

        1.找出语句频度最大(执行次数最多)的那条语句作为基本语句;
        2.计算基本语句(执行多少次)的频度得到问题规模 n 的某个函数 f(n);
        3.取其数量级用符号 “O” 表示。(函数 f(n) 抓大头,并且去掉大头的系数,剩下的就是数量级)。

  最坏时间复杂度:指在最坏情况下,算法的时间复杂度。
  平均时间复杂度:指在所有可能输入实例在等概率出现的情况下,算法的期望运行时间。
  最好时间复杂度:指在最好情况下,算法的时间复杂度。
  一般总是在考虑最坏情况下的时间复杂度,以保证算法的运行时间不会比它更长。

空间复杂度-算法所耗费的存储空间。

    算发原地工作:是指算法所需的辅助空间为常量,即O(1)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/747207
推荐阅读
相关标签
  

闽ICP备14008679号