摘要: 矩阵连成问题属于DP问题。主要分三个步骤:假设原数据为ABCD1. 链长从2到N:假设链长为3 2. 根据链长划分区间:则有ABC, BCD 两种区间3. 对每个区间的数据进行切分,从第二个位置切到倒数第二个位置,即A'BC, AB'C, B'CD, BC'D而A,BC,AB,C,B,CD,BC,D... 阅读全文
posted @ 2015-12-26 22:09 xfei.zhang 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 把每一层递归函数化分为三部分:第一部分:是递归调用前的一些数据处理,判断以及递归结束判断(当然了结束条件肯定在递归调用前,要不每次递归就不会结束了);第二部分:就是递归函数本身了;而第三部分:当然就是递归函数的后续处理代码了!在这里我想我们得想明白一件事情了,每一层的函数都是在上一层递归函数结束时才... 阅读全文
posted @ 2015-12-26 22:00 xfei.zhang 阅读(498) 评论(0) 推荐(0) 编辑
摘要: 递归思想的概念:即将一个复杂问题分解成一系列小的问题,并且这些小问题都具有相同的情形。此时可运用递归的思想来解决更易于理解(但并不一定是效率最高的哦);递归算法有三个关键点:(1)了解题意是否适用递归来解决;(2) 有明确的终止条件(通常是分解出来的一系列小问题里最简单的那种情况); (3) 随着递... 阅读全文
posted @ 2015-12-26 21:56 xfei.zhang 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 该算法主要用来对给定数据集进行排序的,可以快速求出第N大的数字,时间为常数时间。缺点:数据的范围不能太大。步骤如下:1. 给定一个待排序数组(相当于一群鸽子),创建一个备用数组(叫鸽巢数组)并初始化元素为0,备用数组的索引(鸽巢的编号)即是待排序数组的值(鸽子的重量)。2. 把待排序数组的值(鸽子)... 阅读全文
posted @ 2015-12-26 21:54 xfei.zhang 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 贝尔曼-福特算法的最多运行O(|V|·|E|)次,|V|和|E|分别是节点和边的数量)。该算法是对Dijstra算法的补充,弥补其不能处理负权的缺陷,但是效率不及Dijstra算法。下面是几个基本的步骤:procedure BellmanFord(list vertices, list edges,... 阅读全文
posted @ 2015-12-26 21:44 xfei.zhang 阅读(109) 评论(0) 推荐(0) 编辑
摘要: 前面介绍过Dijstra算法,该算法主要用于求单源最短路径。对于求任意两点间的最短路径,这里介绍一种新的算法 Floyd。算法比较简单:Floydfor ( int k = 0; k < 节点个数; ++k ){ for ( int i = 0; i < 节点个数; ++i ){ ... 阅读全文
posted @ 2015-12-26 21:38 xfei.zhang 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 求单源最短路径用得最多的算法应该就是Dijstra算法了,但是该算法有一个缺点就是不能处理负权,如果遇到负权大家可以参考后面介绍的BellMan Ford算法进行处理。下面介绍下Dijstra算法的主要步骤:1. 初始化集合U,该集合表示已经入选最小的节点集合2. 初始化D,该数组表示源点s到该点的... 阅读全文
posted @ 2015-12-26 21:33 xfei.zhang 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 前面讲述了Prim算法,这里讲解另一种产生最小生成树的算法:Kruskal算法,该算法对边进行处理。主要分为以下几个步骤:1. 对所有的顶点创建互斥集Make2. 对所有边从小到大排序3. 从第一条边开始,对边的两个顶点进行判定Find: a:如果两个顶点祖宗为同一个,则忽略b:如果两个顶点祖宗不是... 阅读全文
posted @ 2015-12-26 21:18 xfei.zhang 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 求最小生成树主要有两种基本的算法:Prim算法和Kruskal算法。Prim算法主要是着眼于顶点,而Kruskal算法主要是着眼于边。下面介绍Prim算法的过程。PRIM(G, s) for u in G.V u.key ← ∞ // u.key: 包含U的边中,最... 阅读全文
posted @ 2015-12-26 21:08 xfei.zhang 阅读(126) 评论(0) 推荐(0) 编辑
摘要: 互斥集主要用于Kruskal算法中,用于求图的最小生成树。互斥集主要有3个基本操作:1. 初始化各个集合Make(a) p[a] ← a2. 查找各个集合的老祖宗Find(a) if a == p[a] : return a else : ... 阅读全文
posted @ 2015-12-26 21:05 xfei.zhang 阅读(382) 评论(0) 推荐(0) 编辑