上一页 1 ··· 19 20 21 22 23
摘要: 算法目标:在一个有向图中寻找出所有长度在3到7之间的环,环的数量可达百万级。 数据结构定义: #define maxID 200000 vector<int> Vout[maxID]; // 存储每个结点出边所连的所有结点。Vout[i].size()即为所有的出度 vector<int> Vin[ 阅读全文
posted @ 2020-04-24 07:46 _yanghh 阅读(1857) 评论(0) 推荐(1) 编辑
摘要: 算法描述: Dijkstra解决的是带权重的有向图上单源最短路径问题,该算法要求所有边的权重都为非负值。 算法在运行过程中维持的关键信息是一组结点集合S,从源点s到该集合中每个结点之间的最短路径都已经被找到。 算法重复从结点集V-S中选择最短路径估计最小的结点u,将u加入到集合S,然后对所有从u出发 阅读全文
posted @ 2020-04-12 15:01 _yanghh 阅读(369) 评论(0) 推荐(0) 编辑
摘要: AVL树说明: 该树是一种高度平衡的二叉搜索树,该树中的每一个结点左右子树的高度至多相差1。 AVL树本身也是一个二叉搜索树。 AVL基本结构定义如下: #define LH +1 // 左高 #define EH 0 // 等高 #define RH -1 // 右高 struct BTNode 阅读全文
posted @ 2020-04-11 23:19 _yanghh 阅读(692) 评论(0) 推荐(0) 编辑
摘要: 算法描述: 快速排序也使用分治思想,其过程为: 分解:将原数组划分为两个子数组,但要求左边数组的每个元素都小于右边数组的每个元素。 解决:通过递归调用快速排序,对子数组进行排序。 合并:因为子数组是原址排序,所以不需要合并操作。 快速排序划分数组的方法: 1. 单方向遍历 选择最后一个元素为基准元素 阅读全文
posted @ 2020-04-11 15:41 _yanghh 阅读(207) 评论(0) 推荐(0) 编辑
摘要: 分治法: 将原问题分解为几个规模较小但类似于原问题的子问题,递归得求解这些子问题,然后再合并这些子问题的解 来建立原问题的解。即遵循3个步骤: 分解:将原问题分解为规模较小的若干实例。 解决:递归求解各个子问题。然而,若子问题的规模足够小,则直接求解。 合并:将子问题的解合并成原问题的解。 归并排序 阅读全文
posted @ 2020-04-11 12:30 _yanghh 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 算法描述: 搜索时,只要尽可能,就在图中尽量深入。 深度优先搜索总是对最近才发现的结点v的出发边进行探索,直到该结点的所有出发边都被发现为止。一旦 结点v的所有出发边都被发现,探索则回溯到v的前驱结点,来探索该前驱结点的出发边。该过程一直持续到从 源节点可以到达的所有结点都被发现为止。 深度优先搜索 阅读全文
posted @ 2020-04-11 09:41 _yanghh 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 广度优先搜索是最简单的图搜索算法之一,也是许多重要的图算法原型。 算法描述: 给定图 $G=(V,E)$ 和一个可识别的源结点 $s$, 广度优先搜索对图 $G$ 中的边进行系统性的搜索来发现从源结点 $s$ 可以到达的所有结点。 该算法能够计算从 $s$ 到每个可达节点的最短距离(即最少边数),同 阅读全文
posted @ 2020-04-10 21:30 _yanghh 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 聚合分析:我们证明对所有n,一个n个操作的序列最坏情况下花费的总时间为T(n), 因此在最坏情况下每个操作的平均代价或摊还代价为T(n)/n。 所以,聚合分析中的每个操作的聚合代价都是相同的。那怎么分析呢?聚合分析要求我们要总体看问题。 下面举几个例子。 1. 栈操作 push(s)每次只能压一个数 阅读全文
posted @ 2020-04-09 22:46 _yanghh 阅读(344) 评论(0) 推荐(0) 编辑
上一页 1 ··· 19 20 21 22 23