数据结构与算法
昵称五个字
...
展开
-
数据结构与算法(13):最短路径
最短路径树定义。给定一幅加权有向图和一个顶点s,以s为起点的一棵最短路径树是图的一幅子图,它包含s和从s可达的所有顶点。这棵有向树的根结点为s,树的每条路径都是有向图中的一条最短路径。数据结构加权有向边的数据类型package Graph;public class DirectedEdge implements Comparable<DirectedEdge>{ ...原创 2020-07-06 20:53:42 · 462 阅读 · 0 评论 -
数据结构与算法(12):最小生成树
原理树的两条基本性质:用一条边连接树中的任意两个顶点都会产生一个新的环。从树中删去一条边将会得到两课独立的树。切分定理在一幅加权图中,给定任意的切分,它的横切边中的权重最小者必然属于树的最小生成树。最小生成树的贪心算法将含有V个顶点的任意加权连通图中属于最小生成树的边标记为黑色:初始状态下所有边均为灰色,找到一种切分,它产生的横切边均不为黑色。将它权重最小的横切边标记为黑色。反复...原创 2020-07-06 20:53:36 · 508 阅读 · 0 评论 -
数据结构与算法(11):有向图
数据类型有向图的表示我们使用邻接表来表示有向图,其中边v->w表示为顶点v所对应的邻接链表中包含一个w顶点,与无向图的区别是,每条边都只会出现一次。有向图的取反利用有向图的取反可以找出“指向”每个顶点的所有边。和无向图的区别在用邻接表表示无向图时,如果v在w的链表中,那么w必然也在v的链表中。但在有向图中这种对称性是不存在的。这个区别在有向图的处理中影响深远。有向图中的可达性...原创 2020-07-06 20:53:31 · 3079 阅读 · 0 评论 -
数据结构与算法(9):散列表
数据结构与算法(9):散列表原创 2020-07-06 20:53:19 · 150 阅读 · 0 评论 -
数据结构与算法(8):平衡查找树
散列表原创 2020-07-06 20:53:12 · 166 阅读 · 0 评论 -
数据结构与算法(10):无向图
表示无向图的数据类型邻接表:将每个顶点的所有相邻顶点都保存在该顶点对应的元素所指向的一张链表中。深度优先搜索搜索类API:要搜索一幅图,只需用一个递归方法来遍历所有的顶点。在访问其中一个顶点时:将它标记为已访问;递归地访问它的所有没有被标记过的邻居顶点。这种方法称为深度优先搜索(DFS)。它使用一个boolean数组来记录和起点想通的所有顶点。递归方法会标记给定的顶点并调用自己...原创 2020-07-06 20:53:24 · 797 阅读 · 0 评论 -
数据结构与算法(7):二叉查找树
定义一棵二叉查找树(BST)是一棵二叉树,其中每个结点都含有一个Comparable的键(以及相关联的值)且每个结点的键都大于其左子树中的任意结点的键而小于右子树的任意结点的键。基本实现数据表示和链表一样,我们嵌套定义了一个私有类来表示二叉查找树上的一个结点。每个结点都含有一个键、一个值、一条左链接、一条右链接和一个结点计数器。左链接指向一棵由小于该结点的所有键组成的二叉查找树,右链接指...原创 2020-07-06 20:53:06 · 242 阅读 · 0 评论 -
数据结构与算法(6):优先队列
介绍优先队列是一种抽象数据类型,它表示了一组值和对这些值的操作,优先队列最重要的操作就是删除最大元素和插入元素。其API如下:初级实现数组实现(无序)类似栈的数组实现。inser()方法的代码和栈的push()方法完全一样。要实现删除最大元素,我们可以添加一段类似于选择排序的内循环的代码,将最大元素和边界元素交换然后删除它。和栈类似,我们也可以加入调整数组大小的代码来保证...原创 2019-03-15 09:14:39 · 306 阅读 · 0 评论 -
数据结构与算法(5):快速排序
介绍快速排序实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。快速排序的特点是它是原地排序,且将长度为N的数组排序的时间和NlgN成正比。它的主要缺点是非常脆弱,在实现时要非常小心才能避免低劣的性能。基本算法快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。当两个子数组都有序时整个数组就有序了。在快速排序中,切分的位置取决于数组的内容...原创 2019-03-12 19:41:24 · 252 阅读 · 0 评论 -
数据结构与算法(4):归并排序
归并排序要将一个数组排序,可以先(递归地)将它分成两半分别排序,然后将结果归并起来。原地归并的抽象方法我们需要创建辅助数组aux,首先对应下标范围(low到high,包括low和high)的元素复制到aux数组的对应下标,再遍历aux数组进行归并。归并流程类似于对两堆已经排好序的纸牌进行合并。假设有两堆分别排序完成的纸牌(假设从小到大排序,小的在上面),我们需要将它们合并时一堆。基本的...原创 2019-01-22 21:22:00 · 218 阅读 · 0 评论 -
数据结构与算法(3):初等排序算法
辅助函数介绍首先我们为每一种排序类创建less()和exchange()这两个辅助函数用于对象的比较和位置的交换。为了让我们的排序类支持不同类型的对象,我们使用了Comparble接口。private static boolean less(Comparable v, Comparable w) { return (v.compareTo(w) < 0);}privat...原创 2019-01-22 16:30:35 · 287 阅读 · 0 评论 -
数据结构与算法(2):并查集
基本概念和API下图是并查集基本的API。一个并查集可以将两个触点合并,可以查询某个触点的标识符,可以判断两个触点之间是否连接,可以返回并查集中的连通分量。我们用一个以触点为索引的数组id[]作为基本数据结构来表示所有分量。我们将使用分量中的某个触点的名称作为分量的标识符,因此你可以认为每个分量都是由它的触点之一所表示的。它的大体框架如下:public class Unio...原创 2019-01-21 12:18:48 · 216 阅读 · 0 评论 -
数据结构与算法(1):背包、队列和栈的实现
本文将介绍三种数据类型,分别是背包(Bag)、队列(Queue)和栈(Stack)。它们的不同之处在于删除或者访问对象的顺序不同。其次是介绍【链式数据结构】的重要性,特别是经典数据结构【链表】,有了它们我们才能高效实现背包、队列和栈。集合结构介绍及API背包背包是一种不支持从中删除元素的集合数据类型——它的目的就是帮助用例收集元素并迭代遍历所有收集到的元素(用例也可以检查背包是...原创 2019-01-20 20:28:14 · 348 阅读 · 0 评论