Tools
文章平均质量分 89
韩亚振
这个作者很懒,什么都没留下…
展开
-
有向图
有向图术语有向图的可达性单点最短有向路径环和有向无环图有向图中的强连通性在有向图中,边是单向的:每条边所连接的两个顶点都是一个有序对,它们的邻接性是单向的。术语一幅有方向的图(或有向图)是由一组顶点和一组有方向的边组成的,每条有方向的边都连接着有序的一对顶点处理有向图就如同在一座只有单行道的城市中穿梭,而且这些单行道的方向是杂乱无章的。我们使用邻接表来表示有向图。有向图取反的操作很有用,它返回该有向图的一个副本,但将其中所有的边反转。这样用例就可以找出“指向”每个顶点的所有边。class原创 2021-01-08 09:55:26 · 1369 阅读 · 0 评论 -
无向图
无向图术语表表示无向图的数据类型深度优先搜索广度优先搜索连通分量在很多计算机应用中,由相连的节点所表示的模型起到了关键作用。为了描述这些问题,我们要使用一种抽象的数学对象,叫做图。图论作为数学领域中的一个重要分支已经有数百年的历史了,关于图的算法研究相对来说才开始不久。尽管有些基础的算法在几个世纪前就已经发现了,但大多数有趣的结论都是近几十年才被发现。图论有着广泛的应用,比如地图、计算机网络、电路、任务调度、社交网络等等。术语表在无向图中,边仅仅是两个顶点之间的连接。图是由一组顶点和一组能够将原创 2021-01-01 21:40:05 · 4038 阅读 · 0 评论 -
二叉查找树
二叉查找树定义基本实现查找插入删除返回特定位置的键分析代码定义二叉查找树是一种能够将链表插入的灵活性和有序数组查找的高效性结合起来的符号表实现。二叉查找树得以广泛应用的一个重要原因是它能够保持键的有序性,因此它可以作为实现有序符号表 API 中众多方法的基础,这是计算机科学中最重要的算法之一。一棵二叉查找树(BST)是一棵二叉树,其中每个节点都含有一个 Comparable 的键(以及相关联的值),且每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键基本实现和链表一样,在类中原创 2020-12-22 13:59:00 · 176 阅读 · 0 评论 -
符号表的顺序查找和二分查找
符号表表示一张抽象的表格,我们将信息存储到其中,然后按照指定的键来搜索并获取这些信息。键和值的具体意义取决于不同的应用。符号表中可能会保存很多键和很多信息,因此实现一张高效的符号表也是一项很有挑战性的任务。符号表也称为字典。符号表最主要的目的就是将一个键和一个值联系起来。用例能够将一个键值对插入符号表中,并希望在之后能够从符号表的所有键值对中按照键直接找到相对应的值。符号表是一种存储键值的数据结构,支持两种操作:插入( put ),即将一组新的键值对存入表中;查找( get ),即根据给定的键得到相应原创 2020-12-15 14:16:31 · 369 阅读 · 0 评论 -
优先队列和堆排序
许多应用程序都需要处理有序的元素,但不一定要求它们全部有序,或是不一定要一次就将它们排序。这种情况下,一个合适的数据结构应该支持两种操作:删除最大元素和插入元素。这种数据结构叫做优先队列。通过插入一列元素然后一个个地删掉其中最小的元素,我们可以用优先队列实现排序算法。一种名为堆排序的重要排序算法也来自基于堆的优先队列的实现。初级实现数组实现(无序)可以很容易想到,我们可以维护一个数组,插入操作可以直接将元素插到数组末尾,删除操作可以遍历整个数组,找到最大的然后删除,并将末尾元素插入到删除位置。数组原创 2020-12-14 20:18:56 · 273 阅读 · 0 评论 -
快速排序
快速排序可能是应用最广泛的排序算法,快速排序流行的原因是它实现简单,适用于各种不同的输入,且在一般应用中比其他排序算法快得多。快速排序是原地排序(只需要一个很小的辅助栈),且将长度为N的数组排序所需的时间和 NlgNNlgNNlgN 成正比。快速排序是一种分治的排序算法,它将一个数组分成两个子数组,两部分独立的排序。快速排序和归并排序是互补的,归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序。而快速排序将数组排序的方式则是当两个子数组有序时整个数组也就自然有序了。前者递归调用发生原创 2020-12-14 15:15:20 · 105 阅读 · 0 评论 -
归并排序
目录归并排序原地归并的抽象方法自顶向下的归并排序自底向上的归并排序归并排序归并排序基于归并这个简单的操作,即将两个有序的数组归并成一个更大的有序数组。要将一个数组排序,可以先递归的将它分成两半分别排序,然后将结果归并起来。归并排序能保证将任意长度为N的数组排序所需时间和NlogN成正比,它的主要缺点是它所需的额外空间和N成正比。原地归并的抽象方法将涉及到的所有元素复制到一个辅助数组中,再把归并的结果放回原数组中代码:void MergeSort::merge(std::vector<in原创 2020-12-14 12:10:01 · 143 阅读 · 1 评论 -
选择排序、插入排序和希尔排序
目录选择排序插入排序希尔排序选择排序首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置,如此往复。选择排序交换的总次数是N,算法的时间效率取决于比较的次数。对于长度为N的数组,选择排序需要大约 N2/2N^{2} / 2N2/2 次比较和 N 次交换。选择排序是一种很容易理解和实现的简单排序算法。它有两个很鲜明的特点:运行时间和输入无关一个已经有序的数组和一个元素随机排列的数组排序时间一样长数据移动是最少的交换次数和数组的大小是线性关系代码:void select原创 2020-12-12 22:13:11 · 145 阅读 · 0 评论 -
Git Github 默认分支名称
今天踩了一个坑,顺便把之前的也总结一下,主要是平时用到的。GitHub从今年十月份开始默认分支改成main了,我第一个项目是在Windows下建立的,用的GUI,所以没有注意。可是刚刚在Ubuntu下用命令行初始化git,竟然默认还是master,上传到GitHub之上才发现。git是一个分布式版本控制系统,GitHub是一个托管网站。我们平时是在工作区,git add是把文件添加到暂存区git commit是提交更改...原创 2020-11-18 00:04:33 · 657 阅读 · 0 评论