• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2023-02-20 15:46 Aet 隐藏边栏 |   抢沙发  15 
文章评分 3 次,平均分 5.0

时间复杂度

  1. O(1)
  2. O(logn)
  3. O(n)
  4. O(nlogn)
  5. O(n^2)
  6. O(n^3)
  7. O(2^n)
  8. O(n!)
  9. O(n^n)

$$
O(1) < O(log_n)<O(n)<O(nlog_n)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
$$

排序

冒泡排序

快速排序

堆排序

查找

顺序查找

折半查找

插值查找

$$
mid = (high - low) \cdot \frac{key-arr[low]}{arr[high]-arr[low]}
$$

二叉排序树

  1. 又叫二叉查找树
  2. 它或者是一颗空树,或者是一颗具有以下性质的二叉树:
    1. 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值
    2. 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值

结构

查找

插入

删除

平衡二叉树(AVL)

  1. 是一种二叉排序树
  2. 其中每一个节点的左子树和右子树的高度差最多等于1
    1. 平衡二叉树是高度平衡的二叉排序树
    2. 它要么是一颗空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1

平衡因子

  1. 将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF
    1. 平衡二叉树上所有节点的平衡因子只可能是-1、0、1
    2. 只要有一个结点的平衡因子的绝对值大于1,该二叉树就是不平衡的

最小不平衡树

  1. 距离插入节点最近的,且平衡因子的绝对值大于1的节点为根的子树,我们称为最小不平衡子树

构建平衡二叉树过程

  1. 每当插入一个结点时,先检查是否因插入而破坏了树的平衡性
    1. 如果破坏了,找出最小不平衡子树
    2. 在保持二叉排序树特性的前提下,调整最小不平衡子树中各节点之间的链接关系,进行相应的旋转
    3. 使之成为新的平衡子树

实现

多路查找树

  1. 又叫B树
  2. 每一个节点的孩子数可以多余两个,且每一个节点处可以存储多个元素

2-3树

  1. 每一个节点都具有两个孩子(2结点)或三个孩子(3结点)
    1. 一个2结点包含一个元素和两个孩子(或没有孩子,要么就是两个孩子,要么就是没有孩子),左子树包含的元素小于该元素,右子树包含的元素大于该元素
    2. 一个3结点包含一小一大两个元素和三个孩子(或没有孩子,要么就是三个孩子,要么就是没有孩子)

2-3-4树

  1. 2-3树概念的扩展
  2. 包含了4结点的使用
    1. 一个4结点包含了小中大三个元素和四个孩子(或没有孩子,要么有4个孩子,要么没有孩子)

B树

  1. B树是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例
  2. 节点最大的孩子称为B树的阶
    1. 因此2-3树是3阶B树,2-3-4树是4阶B数
  3. m阶B树特点:
    1. 如果根结点不是叶结点,则其至少有两颗子树
    2. 每一颗非根的分支结点都有k-1个元素和k个孩子,其中[m/2]<=k<=m
      每一个叶子结点n都有k-1个元素,其中[m/2] <= k <= m
    3. 所有叶子结点都位于同一层次
    4. 所有分支节点包含下列信息数据(n,A0,K1,A1,K2,A2,...,Kn,An),
      n(m/2向上取整 -1 <= n <= m-1)为关键字的个数
      ki(i=1,2,3,...)为关键字,且Ki<Ki+1 (i=1,2,...,n-1) Ai (i=0,2,...,n)为指向子树根节点的指针且子树Ai-1所指子树中所有节点的关键字均小于Ki(i=1,2,3,...,n),An所指子树中所有节点的关键字均大于Kn,n(m/2向上取整-1 <= n <= m-1)为关键字的个数(或n+1为子树的个数)

B+树

  1. 为了能够解决所有元素遍历等基本问题,在原有的B树结构基础上,加上了新的元素组织方式,就是B+树
  2. 在B树中,每一个元素在该树中只出现一次,有可能在叶子结点上,也有可能在分支节点上。而在B+树中,出现在分支结点中的元素会被当作它们在该分支结点位置的中序后继者(叶子结点)中再次列出
  3. 另外,每个叶子结点都会保存一个指向后一个叶子结点的指针

M阶B树与B+树差异

  1. 有n颗子树的节点包含有n个关键字
  2. 所有的叶子结点包含全部关键字信息,及指向包含这些关键字记录的指针,叶子结点本身依赖关键字的大小自小而大顺序链接
  3. 所有分支结点可以看成是索引,节点中仅含有其子树中的最大(或最小)关键字

哈希表

概念

  1. 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)
  2. f称为散列函数,或者哈希函数
  3. 采用哈希函数将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或者哈希表。

哈希函数构造方法

  1. 直接定址法
  2. 平方取中法
  3. 折叠法
  4. 除留余数法
    1. f(key) = key mod p (p <= m)
  5. 随机数法

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2023-02-21
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享