数据结构笔记

哈希表构造散列表

视频教程

  1. 线性探测法
    通过表达式依次进行计算,如果碰到冲突,则往后顺延一位(如果是最后一位往后移,则回到第0位)
    在这里插入图片描述
  2. 二次探测法
    如果碰到冲突,1, -1, 22, -22, 33, -33……在冲突的位置的两边交替的搜索。
    在这里插入图片描述
  3. 双散列法
    如果有冲突,则根据另一个哈希函数(rehash)来计算偏移,加上偏移如果还是冲突,则偏移翻一倍
    在这里插入图片描述

最小生成树算法

视频教程

  1. 没有环
  2. 连接图结构中的所有顶点,任意两个顶点之间都是互通的
  3. n 个顶点,n-1条边

Kruskal (克鲁斯卡尔)

思想:将所有边按照权重从小到大排序,依次选择权重最小的边(不能与其他已经选好的边形成环,如果成环,则舍去这条边,选择下一条边)当边的数量达到顶点数n-1时,结束选择,此时的树就是最小生成树。
在这里插入图片描述
在这里插入图片描述

Prim(普里姆)

普里姆算法也是采取贪心算法的思想,与克鲁斯卡尔算法不一样的是,它是从任意指定的顶点开始,比如说0开始,然后找出其他与 0 连接最小的边 4 ,与之连接的 1 顶点加入,然后再从剩下的顶点中找与[0, 1]连接权重最小的边,然后进行连接,依此类推……
在这里插入图片描述
分别创建三个列表
select 用来储存该顶点是否被选取
minDist 表示连接该顶点到已选顶点集合中的边中权值最小的那条边的大小
parent 表示待顶点的父亲节点
过程
以顶点 0 为起点,循环执行下面3个步骤,直到所有顶点都被选取

  1. Update
    每加入一个新的顶点,更新与该顶点相连的所有顶点的列表信息
  2. Scan
    扫描 minDist 列表,找出权值最小的连接边
  3. Add
    添加上一步找到的最小权值边的顶点到已选顶点集合中,然后以该顶点为目标顶点重复第一步的操作

最短路径算法

Dijkstra(迪杰斯特拉)

视频教程
找出某个点到其他所有点的最小路径
思路:假设从 0 出发,找出路径最小的点 1,然后将该点设置为已经找到最小值,然后根据新加入的点更新未加入的点的最小路径,然后将路径值最小的点设置成找到了最小值……依次类推,直到所有点都找到了最小路径。

Floyd(弗洛伊德)

找到图中任意两点之间的最短路径
视频教程
思路:用一个n * n 的矩阵记录点与点之间的最小边的权值,如果没有边,则记录为∞
然后在点之间依次加入所有点,在插入点之后路径如果更小则矩阵,当所有点都插入结束后得到的矩阵就记录了所有点与点之间的最短路径。
在这里插入图片描述

平衡二叉树

定义:

  1. 二叉排序树
  2. 满足每个结点的平衡因子绝对值不大于1
    在这里插入图片描述

调整最小不平衡二叉树

  1. LL (右旋)
    在这里插入图片描述

  2. RR(左旋)
    在这里插入图片描述

  3. LR(先左旋再右旋)
    在这里插入图片描述

  4. RL(先右旋再左旋)
    在这里插入图片描述

五叉查找树

视频教程
在这里插入图片描述

B & B+ 树

B 树

在这里插入图片描述
在这里插入图片描述

B+ 树

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

红黑树

算法动态演示网站
红黑树的性质:
在这里插入图片描述
插入的都是红色结点(因为红色节点可能会破坏上面的规则相对要少)

平衡修复策略

根据下面的情况进行调整,直到满足性质为止

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变化后
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变化后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
变化后:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值