0%

StudyNote-3

408

数据结构 7 查找

B树

所有节点平衡因子均为0的多路平衡查找树

  1. 所有节点都在同一层

  2. 至少有m/2向上取整个子树

  3. 插入 从底部向上插入,如有必要进行分裂

  4. 分裂 中间数值向上,两边分裂

  5. 删除 不在终端,找前驱后继;终端,足够直接删除,不够找兄弟借,其次合并兄弟和上方

B+树

关键字代表子树最大值的B树变形

  1. 叶节点包含全部关键字,非叶节点仅索引

  2. 叶节点穿成一线性链表

散列表Hash

通过散列函数确定

  1. 冲突-函数分配,聚集-处理冲突不当

  2. 构建方法直接定值 - ax+b线性函数;除留余数 - x%a;数字分析 - 其中几位比较均匀;平方取中 - 不够均匀

  3. 处理冲突-拉链法:同一位置的用链表相连

  4. 处理冲突-开放定值线性探测 - 直接123;平方探测 - 数平方加符号,4k+3的素数;双散列法 - 乘第二个表;伪随机 - 直接给出

  5. 查找效率:散列函数,处理冲突方式和装填因子。装填因子为记录数/长度

数据结构 8 排序

稳定性指同数值的两个数在排序中是否改变位置

插入排序

前方一部分有序

直接插入

稳定,n2,适用链式和顺序

折半插入排序:插入时折半,只适用于顺序

希尔排序

缩小增量排序,按子表顺序缩小间隔,不稳定,只适用于顺序,时间复杂度未知

交换排序

将一个值交换到正确位置

冒泡排序

稳定,n2,适用链式和顺序

快速排序

分治法,选择一个数,将左右分为大小区域,不稳定,适用顺序

时空效率:空间,使用递归,从log n到n;时间效率n2,实践最好

选择排序

选择正确的顺序插入

简单选择排序

遍历选择再插入,不稳定,适用链式和顺序,始终n2

堆排序

构建堆并拿走根节点

构建从下往上,删除后,将最后值提上,再向下调整

构建时间n,堆排序时间n log n,不稳定,适用顺序

归并排序

不断归并相邻组,时间n log n,空间n,稳定,适用链式和顺序

基数排序

对各位数字进行比较,稳定,适用链式和顺序,时间d(n+r),d是次数,n数量,r类别

计数排序

累积出现次数,根据出现次数判断顺序,稳定,时间n+k,k辅助队列长度,适用顺序

内部排序比较

时间,空间,稳定性,适用性,过程特征综合考虑

数据数量,初始状态,关键字结构和分布,稳定性要求,存储结构和辅助空间考虑

外部排序

要和外存沟通的排序

基本法

归并处理,输入区+输出区,

先得到初始归并段,再归并

时间:内部排序时间 + IO + 归并时间

提高:初始归并段减少或增加归并路数

败者树

减少归并次数,完全二叉树,存储失败数,新数直接比较自己的路径叶子到根,log n

并非越大越好,会减少每路长度

置换选择排序

保存已经输出的最大值,将大于最大值的输入的不断输出,直到全部小于

最佳归并树

让记录少的先归并,哈夫曼树,IO=WPL*2

不满足严格K叉数(度为0或K),加入0的段,k度的节点(n-1)/(k-1)