【数据结构——绪论】

绪论

  • 一、基本概念
    • 1、术语概念
      • (1)数据
        • 信息载体
        • 描述客观事物属性的…符号集合
        • 程序加工的原料
      • (2)数据元素
        • 数据的基本单位
        • 整体处理
        • 若干数据项组成,数据项是元素的 最小单位
      • (3)数据对象
        • 数据元素的集合
        • 数据的子集
      • (4)数据类型
        • 一个值的集合和定义在此集合上一系列操作的总称
        • 类型
          • 原子类型:值不可再分
          • 结构类型:值可再分若干成分
          • 抽象数据类型:抽象数据组织及相关操作
      • (5)数据结构
        • 数据结构:相互存在特定关系的数据元素的集合
        • 结构:数据元素之间的相互关系
    • 2、数据结构三要素:
      • (1)逻辑结构:

        • 数据元素之间的逻辑关系,算法 设计 的决定因素
        • 主要分为线性和非线性两大类
        • 【数据结构——绪论】_第1张图片
      • (2)存储(物理)结构:

        • 数据结构(元素和关系)在计算机的表示(映像),用计算机语言实现的逻辑结构,算法 实现 的依赖因素
          • #错题 栈是一种抽象数据类型,可采用顺序存储或链式存储,只表示逻辑结构。
        • 分类:
          • 顺序存储
            • 特点:逻辑和物理位置均相邻
            • 优点:可 随机存储 ,且元素占用最少存储空间
            • 缺点:只使用一整块相邻存储单元,可能产生较多外部碎片
          • 链式存储
            • 特点:不要求物理相邻,指针表示关系
            • 优点:无碎片现象
            • 缺点:指针占用额外空间,只能 顺序存取
              • #错题 链式存储设计时,各个不同结点的存储空间可以不连续,但 结点内的存储单元(值域和指针域) 地址必须连续。
          • 索引存储
            • 特点:附加索引表,索引项(形式:关键字+地址)
            • 优点:速度快
            • 缺点:索引表占额外空间,增删需改表占额外时间
          • 散列(哈希)存储
            • 特点:关键字计算存储地址
            • 优点:检索、增删结点操作较快
            • 缺点:散列函数不好的情况下会出现存储单元冲突,解决需额外时间成本
      • (3)数据运算

        • 运算定义针对逻辑结构→功能
        • 运算实现针对存储结构→操作步骤
  • 二、算法和算法评价
    • 1、算法概念
      • (1)定义
        • 问题求解步骤的描述 ,是指令的有限序列,每个指令可有多个操作
          • #错题 算法代表对问题求解步骤的描述,而程序则是算法在计算机上的特定实现
      • (2)五个特征
        • 有穷性:有穷步,每步时间有穷
        • 确定性:指令含义确定,同输入得同输出
        • 可行性:可通过已实现有限次基本操作实现
        • 输入
        • 输出
      • (3 )“好”算法的标准
        • 正确性
        • 可读性
        • 健壮性:可及时处理非法输入,无不合理输出
        • 效率与低存储量需求:与问题规模有关
    • 2、效率度量
    • 时间复杂度和空间复杂度

      • (1)时间复杂度
        • ① 相关概念
          • 频度:语句被重复执行次数
          • 算法问题规模函数T(n):所有语句频度之和
            • 最深层循环内语句(基本运算)的频度为 f(n)
            • f(n) 和T(n) 同数量级
        • ② 时间复杂度:T(n) = O(f(n))
        • ③ T(n) 依赖于
          • 问题规模n
          • 输入数据的性质(如初始状态)
        • ④ 一般算法的时间复杂度是:最坏时间复杂度
          • 其他:
            • 平均时间复杂度:算法期望运行时间,所有输入示例等概率出现情况下
            • 最好时间复杂度
        • ⑤ 分析规则
          • 加法:T(n) = O (max (f(n), g(n)) )
          • 乘法:T(n) = O(f(n)×g(n))
        • ⑥ 常见渐进时间复杂度比较
          • O ( 1 ) < O ( log ⁡ 2 n ) < O ( n ) < O ( n log ⁡ 2 n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) < O ( n n ) O(1)O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
        • #技巧 ⑦ 特定的T(n) 求解
          • a、嵌套for循环
            • f o r ( i = 1 ; i < = n ; i + + ) f o r ( j = 1 ; j < = i ; j + + ) f o r ( k = 1 ; k < = j ; k + + ) x + + ; { for }(i=1 ; i<=n ; i++) \\ \quad{ for }(j=1 ; j<=i ; j++) \\ \quad\quad{ for }(k=1 ; k<=j ; k++) \\ \quad\quad\quad x++; for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x++;​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
            • 计算: ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ T ( n ) = O ( ∑ i = 1 n ∑ j = 1 i ∑ k = 1 j 1 ) = O ( ∑ i = 1 n i ( i + 1 ) 2 ) = O ( 1 6 n 3 ) = O ( n 3 ) T(n)=O\left(\sum_{i=1}^{n} \sum_{j=1}^{i} \sum_{k=1}^{j} 1\right)=O\left(\sum_{i=1}^{n} \frac{i(i+1)}{2}\right)=O(\frac{1}{6}n^3)=O(n^3) T(n)=O(i=1nj=1ik=1j1)=O(i=1n2i(i+1))=O(61n3)=O(n3)
              • ∑ i = 1 n i ( i + 1 ) 2 = 1 2 ( ∑ i = 1 n i 2 + ∑ i = 1 n i ) \sum_{i=1}^{n} \frac{i(i+1)}{2}=\frac{1}{2}(\sum_{i=1}^{n} i^2+\sum_{i=1}^{n} i) i=1n2i(i+1)=21(i=1ni2+i=1ni)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
              • ∑ n 2 = n ( n + 1 ) ( 2 n + 1 ) 6 \sum n^{2}=\frac{n(n+1)(2 n+1)}{6} n2=6n(n+1)(2n+1)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
          • b、递归程序一般使用公式进行递推
            • 递归算法方程: T ( n ) = { 1 , n = 1 2 T ( n / 2 ) + n , n > 1 T(n)=\left\{\begin{array}{ll}1, & n=1 \\2 T(n / 2)+n, & n>1\end{array}\right. T(n)={1,2T(n/2)+n,n=1n>1 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ,假设n是2的整次幂
            • 设 ​​​​​​​​​​ n = 2 k ( k ≥ 0 ) n=2^k(k≥0) n=2k(k0) ,有 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ T ( 2 k ) = 2 T ( 2 k − 1 ) + 2 k = 2 2 T ( 2 k − 2 ) + 2 × 2 k T\left(2^{k}\right)=2 T\left(2^{k-1}\right)+2^{k}=2^{2} T\left(2^{k-2}\right)+2 \times 2^{k} T(2k)=2T(2k1)+2k=22T(2k2)+2×2k
            • 一般递推公式: ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ T ( 2 k ) = 2 i T ( 2 k − i ) + i × 2 k T\left(2^{k}\right)=2^{i} T\left(2^{k-i}\right)+i \times 2^{k} T(2k)=2iT(2ki)+i×2k
            • 进而 ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ T ( 2 k ) = 2 k T ( 2 0 ) + k × 2 k = ( k + 1 ) 2 k T(2^k)=2^kT(2^0)+k\times 2^k=(k+1)2^k T(2k)=2kT(20)+k×2k=(k+1)2k
            • T ( n ) = 2 log ⁡ 2 n + log ⁡ 2 n × n = n ( log ⁡ 2 n + 1 ) = O ( n log ⁡ 2 n ) T(n)=2^{\log_2n}+\log_2n\times n=n(\log_2n+1)=O(n\log_2n) T(n)=2log2n+log2n×n=n(log2n+1)=O(nlog2n)​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
      • (2)空间复杂度
        • ① 空间复杂度:S(n) = O(g(n))
          • 算法所费存储空间,取决于问题本身,与算法无关
            • 指令、常数、变量和输入数据外+辅助空间(额外)

你可能感兴趣的:(计算机408笔记,数据结构,算法)