算法
该栏主要内容为个人学习算法时的笔记
云子谣
这个作者很懒,什么都没留下…
展开
-
(C++)算法刷题记录:通过迭代遍历求二叉树最大深度
(C++)算法记录:通过迭代遍历求二叉树最大深度最近重新刷算法题,有道题需要求二叉树最大深度,发现对迭代遍历方法有点犯迷糊,为此通过本篇文章记录下来,方便以后复习时看。 1. 问题:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。题目给出了二叉树节点的定义,如下所示:/** * Definition for a binary tree node. * struct TreeNode { * int va原创 2021-09-05 21:08:17 · 266 阅读 · 0 评论 -
(C++)通过深度优先搜索得到无向图中的所有连通分量
(C++)通过深度优先搜索得到无向图中的所有连通分量我们知道一个图的极大连通子图是这个图的连通分量,而一个连通图只有一个连通分量,就是图本身。本篇的内容是DFS的应用之一:找到一个图中所有的连通分量,代码参考《算法》第四版。一.构造一个无向图从本篇开始,我使用模版图类来表达一个无向图,图类及相关函数声明如下所示:/* 节点类,图的节点数据类型可以任意给定 */template<typename VertexType> class Vertex_new{public: Ver原创 2020-07-07 16:03:03 · 2879 阅读 · 2 评论 -
C++实现简单的广度优先搜索及路径查询(无向图)
C++实现简单的广度优先搜索及路径查询(无向图)当我们在遍历一张连通无向图时,可能会有这样的需求:给定起点,找出到某一指定顶点的路径,该路径长度是最短的可以使用广度优先搜索来解决上面的问题,广度优先搜索就是按照顶点与起点的距离的顺序来遍历所有顶点。...原创 2020-05-14 19:31:58 · 1544 阅读 · 0 评论 -
C++实现简单的深度优先搜索及路径查询(无向图)
C++实现简单的深度优先搜索及路径查询(无向图)深度优先搜索(DFS)可以通过一个递归方法遍历图的所有顶点,如果该图是连通的,那么每个邻接表的元素都会被检查到。1.构造一个无向图本篇使用《算法》第4版上的一个测试用例,如下所示graph_initial.txt6 <–V8 <–E0 52 42 31 20 13 43 5...原创 2020-05-09 10:17:05 · 2700 阅读 · 0 评论 -
C++实现无向图类
C++实现无向图本篇主要记录一下最近学习的较简单的无向图实现,主要参考了《算法》第四版中关于图的内容。该无向图支持自环但不支持平行边,日后慢慢优化吧。首先我们知道图是由一组顶点和一组能够将两个顶点相连的边组成。这里我们定义一个顶点类,顶点类中有该顶点的value以及该顶点的邻居顶点的集合,这个集合对应了在《算法》书中使用了bag类的对象,本篇使用C++的list类似乎也问题没那么大。最后一个...原创 2020-05-01 22:57:15 · 3643 阅读 · 2 评论 -
C++ 2-3树实现(红黑树)学习笔记
C++ 2-3树实现(红黑树)学习笔记 在使用二叉查找树时,二叉查找树的运行时间取决于树的形状,树的形状取决于插入数据的顺序,最好的情况是叶子节点到根节点到距离为LogN。2-3树可以允许“每个节点保存2个数据”的情况发生,从而提高了二叉查找树的灵活性,最终实现了无论以什么顺序插入,都可以保持树的平衡性和有序性。一. 2-3树的节点类型本次通过红黑树实现2-3树,在树进行操作的过程中,2-...原创 2020-04-06 17:03:14 · 1237 阅读 · 0 评论 -
C++实现基于二叉查找树的有序符号表(下)——学习笔记
C++实现基于二叉查找树的有序符号表(上)——学习笔记二. 二叉查找树的实现 / (5) deleteMin / delete deleteMin方法作用主要是删除二叉树当中的拥有最小键的节点,下面从简单的情况开始理解。还是这样一个简单的二叉查找树,如何删除最小键的节点呢,当然是不断地深入根节点的左子树,直到找到最小的键,在此图当中,根节点只有一个左子节点,这个左子节点的左子节点指针为...原创 2020-03-10 09:43:40 · 343 阅读 · 0 评论 -
C++实现基于二叉查找树的有序符号表(上)——学习笔记
C++实现基于二叉查找树的有序符号表若使用无序链表实现符号表,虽然插入数据相比有序数组更有灵活性,但是每次查找都需要对该链表进行遍历来完成查找任务;若使用有序数组,尽管有序数组可以通过索引快速查找到指定数据,但要解决插入数据的问题,通常需要移动插入位置后面的所有数据,代价较大。而此次使用二叉查找树来实现有序符号表,它链表的灵活性,又能保持数据有序性,以便我们通过指定键的相对顺序对数据进行查...原创 2020-03-07 11:55:31 · 238 阅读 · 0 评论 -
基于二分查找的有序符号表(C++实现)———学习笔记
基于有序数组的符号表查找(二分法)相比于无序链表的符号表顺序查找,使用基于有序数组的符号表二分法查找可以根据索引,有效减少每次查找所需比较次数,因为每次都可以快速找到数组的中间元素,而如果想通过无序链表找到中间节点的数据,唯一的方法就是遍历链表。在开始前,需要明确的是,我们要维护两个数组,使他们作为实现本次符号表查找的数据结构。这两个数组分别是key(键)数组和value(值)数组,并且保证...原创 2020-02-27 22:27:48 · 328 阅读 · 0 评论 -
优先队列学习笔记
优先队列学习(上)本篇为优先队列学习笔记,优先队列与队列相似,但优先队列中的元素整体上是有序的。在插入一个元素时,优先队列的有序状态有可能会被打破,使用从下到上的堆有序化进行重新排序,确定每个元素的优先级,删除一个元素时,有序状态也有可能被打破,使用使用从上到下的堆有序化进行重新排列,最终使优先队列重新回到有序状态。想要构建一个优先队列,一个数组即可作为其载体。本次使用完全二叉树作为实现优...原创 2020-02-25 22:57:32 · 233 阅读 · 0 评论