拦截过滤器模式
摘要:拦截过滤器模式 拦截过滤器模式(Intercepting Filter Pattern)用于对应用程序的请求或响应做一些预处理/后处理。定义过滤器,并在把请求传给实际目标应用程序之前应用在请求上。过滤器可以做认证/授权/记录日志,或者跟踪请求,然后把请求传给相应的处理程序。以下是这种设计模式的实体。
阅读全文
posted @
2024-10-06 12:17
AtlasLapetos
阅读(18)
推荐(0) 编辑
广度优先遍历与最短路径
摘要:广度优先遍历与最短路径 广度优先遍历从某个顶点 v 出发,首先访问这个结点,并将其标记为已访问过,然后顺序访问结点v的所有未被访问的邻接点 {vi,..,vj} ,并将其标记为已访问过,然后将 {vi,...,vj} 中的每一个节点重复节点v的访问方法,直到所有结点都被访问完为止。 我们可以分为三个
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(14)
推荐(0) 编辑
寻路算法
摘要:寻路算法 图的寻路算法也可以通过深度优先遍历 dfs 实现,寻找图 graph 从起始 s 点到其他点的路径,在上一小节的实现类中添加全局变量 from数组记录路径,from[i] 表示查找的路径上i的上一个节点。 首先构造函数初始化寻路算法的初始条件,from = new int[G.V()] 和
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(4)
推荐(0) 编辑
深度优先遍历与连通分量
摘要:深度优先遍历与连通分量 深度优先遍历(Depth First Search)的主要思想是首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点。当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直至所有的顶点都被访问过。 下图示例的图从 0 开始遍历顺序如右图所示: 无向
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(39)
推荐(0) 编辑
相邻节点迭代器
摘要:相邻节点迭代器 图论中最常见的操作就是遍历邻边,通过一个顶点遍历相关的邻边。邻接矩阵的遍历邻边的时间复杂度为 O(V),邻接表可以直接找到,效率更高。 邻接矩阵迭代: ... public Iterable<Integer> adj(int v) { assert v >= 0 && v < n;
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(3)
推荐(0) 编辑
图论基础和表示
摘要:图论基础和表示 一、概念及其介绍 图论(Graph Theory)是离散数学的一个分支,是一门研究图(Graph)的学问。 图是用来对对象之间的成对关系建模的数学结构,由"节点"或"顶点"(Vertex)以及连接这些顶点的"边"(Edge)组成。 值得注意的是,图的顶点集合不能为空,但边的集合可以为
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(41)
推荐(0) 编辑
并查集路径压缩
摘要:并查集路径压缩 并查集里的 find 函数里可以进行路径压缩,是为了更快速的查找一个点的根节点。对于一个集合树来说,它的根节点下面可以依附着许多的节点,因此,我们可以尝试在 find 的过程中,从底向上,如果此时访问的节点不是根节点的话,那么我们可以把这个节点尽量的往上挪一挪,减少数的层数,这个过程
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(10)
推荐(0) 编辑
并查集 rank 的优化
摘要:并查集 rank 的优化 上一小节介绍了并查集基于 size 的优化,但是某些场景下,也会存在某些问题,如下图所示,操作 union(4,2)。 根据上一小节,size 的优化,元素少的集合根节点指向元素多的根节点。操作完后,层数变为4,比之前增多了一层,如下图所示: 由此可知,依靠集合的 size
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(7)
推荐(0) 编辑
并查集 size 的优化
摘要:并查集 size 的优化 按照上一小节的思路,我们把如下图所示的并查集,进行 union(4,9) 操作。 合并操作后的结构为: 可以发现,这个结构的树的层相对较高,若此时元素数量增多,这样产生的消耗就会相对较大。解决这个问题其实很简单,在进行具体指向操作的时候先进行判断,把元素少的集合根节点指向元
阅读全文
posted @
2024-10-02 14:05
AtlasLapetos
阅读(1)
推荐(0) 编辑
索引堆及其优化
摘要:索引堆及其优化 一、概念及其介绍 索引堆是对堆这个数据结构的优化。 索引堆使用了一个新的 int 类型的数组,用于存放索引信息。 相较于堆,优点如下: 优化了交换元素的消耗。 加入的数据位置固定,方便寻找。 二、适用说明 如果堆中存储的元素较大,那么进行交换就要消耗大量的时间,这个时候可以用索引堆的
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(6)
推荐(0) 编辑
优化堆排序
摘要:优化堆排序 上一节的堆排序,我们开辟了额外的空间进行构造堆和对堆进行排序。这一小节,我们进行优化,使用原地堆排序。 对于一个最大堆,首先将开始位置数据和数组末尾数值进行交换,那么数组末尾就是最大元素,然后再对W元素进行 shift down 操作,重新生成最大堆,然后将新生成的最大数和整个数组倒数第
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(3)
推荐(0) 编辑
基础堆排序
摘要:基础堆排序 一、概念及其介绍 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。 堆是一个近似 完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 二、适用说明 我们之前构造堆的过程是一个个数据调用 insert 方法使用 shift u
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(5)
推荐(0) 编辑
堆的 shift down
摘要:堆的 shift down 本小节将介绍如何从一个最大堆中取出一个元素,称为 shift down,只能取出最大优先级的元素,也就是根节点,把原来的 62 取出后,下面介绍如何填补这个最大堆。 第一步,我们将数组最后一位数组放到根节点,此时不满足最大堆的定义。 调整的过程是将这个根节点 16 一步一
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(2)
推荐(0) 编辑
堆的 shift up
摘要:堆的 shift up 本小节介绍如何向一个最大堆中添加元素,称为 shift up。 假设我们对下面的最大堆新加入一个元素52,放在数组的最后一位,52大于父节点16,此时不满足堆的定义,需要进行调整。 首先交换索引为 5 和 11 数组中数值的位置,也就是 52 和 16 交换位置。 此时 52
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(6)
推荐(0) 编辑
堆的基本存储
摘要:堆的基本存储 一、概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称。 堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值。 堆总是一棵完全二叉树。 二、适用说明 堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(7)
推荐(0) 编辑
排序算法衍生问题
摘要:排序算法衍生问题 本小节对本教程的排序算法做一个总结。 (1)归并排序和快速排序都使用了分治算法。 顾名思义,就是将原问题分割查能同等结构的子问题,之后将子问题逐一解决后,原问题也就得到了解决。 (2)逆序对的定义 如果存在正整数 i, j 使得 1 ≤ i < j ≤ n 而且 A[i] > A[
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(6)
推荐(0) 编辑
三路排序算法
摘要:三路排序算法 一、概念及其介绍 三路快速排序是双路快速排序的进一步改进版本,三路排序算法把排序的数据分为三部分,分别为小于 v,等于 v,大于 v,v 为标定值,这样三部分的数据中,等于 v 的数据在下次递归中不再需要排序,小于 v 和大于 v 的数据也不会出现某一个特别多的情况),通过此方式三路快
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(48)
推荐(0) 编辑
双路快速排序
摘要:双路快速排序 一、概念及其介绍 双路快速排序算法是随机化快速排序的改进版本,partition 过程使用两个索引值(i、j)用来遍历数组,将 <v 的元素放在索引i所指向位置的左边,而将 >v 的元素放在索引j所指向位置的右边,v 代表标定值。 二、适用说明 时间和空间复杂度同随机化快速排序。 对于
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(27)
推荐(0) 编辑
随机化快速排序
摘要:随机化快速排序 一、概念及其介绍 快速排序由 C. A. R. Hoare 在 1960 年提出。 随机化快速排序基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达
阅读全文
posted @
2024-10-02 14:04
AtlasLapetos
阅读(62)
推荐(0) 编辑
归并排序
摘要:归并排序 一、概念及其介绍 归并排序(Merge sort)是建立在归并操作上的一种有效、稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表
阅读全文
posted @
2024-10-02 14:03
AtlasLapetos
阅读(3)
推荐(0) 编辑