数据结构与算法
文章平均质量分 92
@阿清
每天进步一点点,向着未来前进
展开
-
算法分析与设计之并查集详解
本文主要介绍解决动态连通性一类问题的一种算法,使用到了一种叫做并查集的数据结构,称为Union-Find。更多的信息可以参考Algorithms一书的Section 1.5,实际上本文也就是基于它的一篇读后感吧。原文中更多的是给出一些结论,我尝试给出一些思路上的过程,即为什么要使用这个方法,而不是别的什么方法。我觉得这个可能更加有意义一些,相比于记下一些结论。原创 2023-03-06 09:47:22 · 566 阅读 · 0 评论 -
数据结构与算法之图的进阶(有向图、拓扑排序、加权无向图、最小生成树、加权有向图、最短路径)
目录一、有向图1.1 有向图的定义及相关术语1.2 有向图API设计1.3 有向图实现二、拓扑排序2.1 检测有向图中的环2.1.1 检测有向环的API设计2.1.2 检测有向环实现2.2 基于深度优先的顶点排序2.2.1 顶点排序API设计2.2.2 顶点排序实现2.3 拓扑排序实现三、加权无向图3.1 加权无向图边的表示3.2 加权无向图的实现四、最小生成树4.1 最小生成树定义及相关约定4.2 最小生成树原理4.2.1 树的性质4.2.2 切分定理4.3 贪心算法4.4 Prim算法4.4.1 Pri原创 2021-12-11 19:40:32 · 545 阅读 · 0 评论 -
数据结构与算法之图的入门(图的基础介绍 以及无向图的深度优先搜寻、广度优先搜索)
目录一、图的入门1.1 图的实际应用:1.2 图的定义及分类1.3 无向图1.3.1 图的相关术语1.3.2 图的存储结构1.3.2.1 邻接矩阵1.3.2.2 邻接表1.3.3 图的实现1.3.3.1 图的API设计1.3.3.2 代码实现1.3.4 图的搜索1.3.4.1 深度优先搜索1.3.4.2 广度优先搜索1.3.5 案例-畅通工程续 11.3.6 路径查找1.3.6.1 路径查找API设计1.3.6.2 路径查找实现一、图的入门1.1 图的实际应用:在现实生活中,有许多应用场景会包含很多点原创 2021-12-10 06:57:49 · 476 阅读 · 0 评论 -
数据结构与算法之并查集
目录一、并查集1.1 并查集结构1.2 并查集API设计1.3 并查集的实现1.3.1 UF(int N)构造方法实现1.3.2 union(int p,int q)合并方法实现1.3.3 代码1.3.4 并查集应用举例1.3.5 UF_Tree算法优化1.3.5.1 UF_Tree API设计1.3.5.2 find(int p)查询方法实现1.3.5.3 union(int p,int q)合并方法实现1.3.5.4 代码1.3.5.5 优化后的性能分析1.3.6 路径压缩1.3.6.1 UF_Tree原创 2021-12-08 11:06:43 · 101 阅读 · 0 评论 -
数据结构与算法之树的进阶(平衡树(2-3查找树、红黑树)、B-树、B+树)
目录一、平衡树1.1、 2-3查找树1.1.1、 2-3查找树的定义1.1.2 查找1.1.3 插入1.1.3.1 向2-结点中插入新键1.1.3.2 向一棵只含有一个3-结点的树中插入新键1.1.3.3 向一个父结点为2-结点的3-结点中插入新键1.3.1.4 向一个父结点为3-结点的3-结点中插入新键1.3.1.5 分解根结点1.3.4、 2-3树的性质1.3.5 2-3树的实现1.2 红黑树1.2.1 红黑树的定义1.2.2 红黑树结点API1.2.3 平衡化1.2.3.1 左旋1.2.3.2 右旋1原创 2021-12-07 17:12:15 · 159 阅读 · 0 评论 -
数据结构与算法之优先队列(最大优先队列、最小优先队列、索引优先队列)
目录优先队列前言1.1 最大优先队列1.1.1 最大优先队列API设计1.1.2 最大优先队列代码实现1.2 最小优先队列1.2.1 最小优先队列API设计1.2.2 最小优先队列代码实现1.3 索引优先队列1.3.1 索引优先队列实现思路1.3.2 索引优先队列API设计1.3.3 索引优先队列代码实现优先队列前言普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在某些情况下,我们可能需要找出队列中的最大值或者最小值,例如使用一个队列保存计算机的任务,一般情况下计算机的任务都是有优原创 2021-12-06 10:10:50 · 416 阅读 · 0 评论 -
数据结构与算法之堆heap
目录一、堆1.1 堆的定义1.2 堆的API设计1.3 堆的实现1.3.1 insert插入方法的实现1.3.2 delMax删除最大元素方法的实现1.3.3 堆的实现代码1.4 堆排序1.4.1 堆构造过程1.4.2 堆排序过程一、堆1.1 堆的定义堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。堆的特性:它是完全二叉树,除了树的最后一层结点不需要是满的,其它的每一层从左到右都是满的,如果最后一层结点不是满的,那么要求左满右不满。它通常用数组来实原创 2021-11-30 21:29:06 · 259 阅读 · 0 评论 -
数据结构之树的入门(二叉树)
目录一、二叉树入门1.1树的基本定义1.2 树的相关术语1.3 二叉树的基本定义1.4 二叉查找树的创建1.4.1二叉树的结点类1.4.2 二叉查找树API设计1.4.3 二叉查找树实现1.4.4 二叉查找树其他便捷方法1.4.4.1 查找二叉树中最小的键1.4.4.2 查找二叉树中最大的键1.5 二叉树的基础遍历1.5.1 前序遍历1.5.2 中序遍历1.5.3 后序遍历1.6 二叉树的层序遍历1.7 二叉树的最大深度问题1.8 折纸问题一、二叉树入门之前我们实现的符号表中,不难看出,符号表的增删查操原创 2021-11-30 11:16:17 · 136 阅读 · 0 评论 -
数据结构之符号表
目录一、符号表1.1 符号表API设计1.2 符号表(无序符号表)实现1.3 有序符号表一、符号表符号表最主要的目的就是将一个键和一个值联系起来,符号表能够将存储的数据元素是一个键和一个值共同组成的键值对数据,我们可以根据键来查找对应的值。符号表中,键具有唯一性。符号表在实际生活中的使用场景是非常广泛的,见下表:1.1 符号表API设计结点类:符号表:1.2 符号表(无序符号表)实现public class SymbolTable<Key,Value> { //记录原创 2021-11-28 12:25:57 · 451 阅读 · 0 评论 -
数据结构之线性表(顺序表、链表、栈、队列)
目录一、线性表1.1 顺序表1.1.1 顺序表的实现1.1.2 顺序表的遍历1.1.3 顺序表的容量可变1.1.4 顺序表的时间复杂度1.1.5 java中ArrayList实现1.2 链表1.2.1 单向链表1.2.1.1 单向链表API设计1.2.1.2 单向链表代码实现1.2.2 双向链表1.2.3 链表的复杂度分析1.2.4 链表反转1.2.5 快慢指针1.2.5.1 中间值问题1.2.5.2 单向链表是否有环问题1.2.5.3 有环链表入口问题1.2.6 循环链表1.2.7 约瑟夫问题一、线性表原创 2021-11-28 07:37:34 · 934 阅读 · 0 评论 -
数据结构之排序算法
目录一、简单排序1.1 Comparable接口介绍1.2 冒泡排序1.3 选择排序1.4 插入排序二、高级排序2.1希尔排序(shell)前面学习插入排序的时候,我们会发现一个很不友好的事儿,如果已排序的分组元素为{2,5,7,9,10},未排序的分组元素为{1,8},那么下一个待插入元素为 1 ,我们需要拿着 1 从后往前,依次和10,9,7,5,2进行交换位置,才能完成真正的插入,每次交换只能和相邻的元素交换位置。那如果我们要提高效率,直观的想法就是一次交换,能把 1 放到更前面的位置,比如一次交换就原创 2021-11-25 21:25:19 · 756 阅读 · 0 评论