zoukankan      html  css  js  c++  java
  • 02 常用数据结构

    数据 -> 整理分析(算法 + 数据结构) -> 信息

    (1) 基本数据类型(Primitive Data Type):或称标量数据类型(Scalar Data Type)。整数、浮点数、布尔、字符。
    (2) 结构化数据类型(Structured Data Type):也称虚拟数据类型(Virtual Data Type)。字符串、数组、指针、列表、文件等。
    (3) 抽象数据类型(Abstract Data Type):堆栈等。

    • 数组 - Array
      一排紧密相邻的可数内存,并提供一个能够直接访问单一数据内容的计算方法。
      Two-dimension Array 二维数组

    • 链表 - Linked List
      由许多相同数据类型的数据,按特定顺序排列而成的线性表。
      链表中的数据项在计算机内存中的位置是不连续且随机(Random)存放的。插入和删除都相当方便,查找麻烦。
      单向链表,除非必要,否则不可移动链表头指针。

    • 堆栈 - Stack
      相同数据类型的组合 有序线性表 LIFO 抽象数据类型(ADT)

      1. 创建 create
      2. 入栈 push
      3. 出栈 pop
      4. 是否为空 isEmpty
      5. 是否已满 full
    • 队列
      有序线性表 FIFO 抽象数据类型(ADT)
      广度优先搜索(BFS),计算机的模拟(simulation),CPU 的作业调度(job scheduling),外围设备联机并发处理的应用
      堆栈只需要一个顶端(top),指针指向堆栈点顶端
      对列必须使用 front 和 rear 两个指针分别指向队列前端和队列尾端

      1. 创建 create
      2. 添加 add
      3. 删除 delete
      4. 返回前端的值 front
      5. 是否为空 empty
    • 树形结构
      二叉空间分割树(BSP tree)
      四叉树(Quadtree)
      八叉树(Octree)
      n 叉树(n-way)
      一棵合法的树,节点间可以互相连接,但不能形成无出口的回路。

      1. 度数(Degree):每个节点所有子树的个数。
      2. 层数(Level)
      3. 高度(Height):树的最大层数。
      4. 树叶/终端节点(Terminal Nodes):度数为 0 的节点。
      5. 父节点(Parent)
      6. 子节点(Children)
      7. 祖先(Ancestor)和子孙(Descendent)
      8. 兄弟节点(Siblings):有共同父节点的节点。
      9. 非终端节点(Nonterminal Nodes)
      10. 同代(Generation):在一棵树上具有相同层数的节点。
      11. 森林(Forest):n 棵(n ≥ 0)互斥树的集合。
      • 一般树形结构在计算机中的存储方式是以链表为主。对于 n 叉树来说,因为每个节点的度数都不相同,所以必须为每个节点预留存放 n 个链接字段的最大存储空间。
        这种 n 叉树特别浪费链接存储空间。假设 n 叉树有 m 个节点,那么此树共有 n*m 个链接字段。因此,除了树根外,每个非空连接都指向一个节点,所以得知空链接个数为 n*m - (m-1) = m(n-1) + 1,而 n 叉树的链接浪费率为 [m(n-1)+1]/m*n。因此得到一下结论:
        n=2 时,二叉树的链接浪费率约为 1/2。
        n=3 时,三叉树的链接浪费率约为 2/3。
        n=4 时,四叉树的链接浪费率约为 3/4。
        ... ...
        当 n = 2 时,浪费率最低,所以为了改善存储空间浪费的缺点,最常使用二叉树。
      • 二叉树 - Binary Tree / Knuth 树
        二叉树与一般树的区别:

        (1) 树不可以为空集合,但二叉树可以

        (2) 树的度数为 d≥0,但二叉树的节点度数为 0 ≤ d ≤ 2

        (3) 树的子树间没有次序关系,二叉树则有
    • 图形结构
      树形结构描述节点间“层次”关系
      图形结构讨论两个顶点间”是否连通“
      加权图 ——“网络”

      • 欧拉环(Eulerian Cycle):当所有顶点的度数都是偶数时,才能从某顶点出发,经过每条边一次,再回到起点。
      • 欧拉链(Eularian Chain):从某一顶点出发,经过每条边一次,不一定回到起点,则只允许其中两个顶点的度数为奇数,其余则必须全部为偶数。
      • 无向图 (V1, V2)
      • 有向图 <V1, V2>
    • 哈希表
      哈希表是一种存储记录的连续内存,通过哈希函数的应用,可以快速存取与查找数据。
      哈希法就是将本身键值,通过特定的数学函数运算或应用其他的方法,转换成相对应的数据存储地址。

      • bucket(桶):哈希表中存储数据的位置,每一个位置对应到唯一的地址(bucket address),桶就好比一个记录。
      • slot(槽):每一个记录中可能包含好几个字段,而 slot 指的就是桶中的字段。
      • collision(碰撞):两个不同的数据,经过 Hash 函数运算后,对应到相同的地址。
      • 溢出:运算后的数据所对应到的 bucket 已满。
      • 哈希表:存储记录的连续内存。一种类似数据表的索引表格,可分为 n 个 bucket,每个 bucket 又可分为 m 个 slot。
      • 同义词(Synonym):两个标识符 I1 和 I2 经过哈希函数运算后所得的数值相同,即 f(I1) = f(I2),就称 I1 和 I2 对于 f 这个哈希函数是同义词。
      • 加载密度(Loading Factor):标识符的使用数量除以哈希表内槽的总数
        α(加载密度)= n(标识符的使用数目)/ [ s(每个桶内的槽数)* b(桶的数目)]
        α 值越大,表示哈希空间的使用率越高,碰撞或溢出的概率也越高。
      • 完美哈希(Perfect Hashing):没有发生碰撞和溢出的哈希函数。
      • 原则:
        1. 降低碰撞和移除的产生
        2. 哈希函数不宜过于复杂,越容易计算越好
        3. 尽量把文字键值转换成数字键值,方便计算
        4. 设计的哈希函数计算得到的值,均匀的分布在每一个桶中
  • 相关阅读:
    线性回归和 逻辑回归 的思考(参考斯坦福 吴恩达的课程)
    数据结构算法基础-内部排序算法
    机器学习《test》
    day1.接口测试(概念、Postman、SoapUI、jmeter)
    SQL2000 3核6核 CUP 安装SP4
    SQL常用语句
    SQL SERVER 2000数据库置疑处理
    常用终端命令
    c++ 位操作
    计算机为什么用补码存储数据?
  • 原文地址:https://www.cnblogs.com/catyuang/p/11506264.html
Copyright © 2011-2022 走看看