- 博客(13)
- 资源 (2)
- 收藏
- 关注
原创 有向无环图求单源最短路径问题
1,有向无环图可以用拓扑排序先求得拓扑序列;对于得到的拓扑序列,我们遍历一遍,对于每一个元素,我们看它的邻接边,(因为拓扑序列中当前元素只可能存在指向在它之后的元素的边),对它的邻接边做松弛操作,这样一遍过后,就得到了给定源节点的单源最短路径!2,时间复杂度分析:拓扑排序的时间复杂度为O(n+e),遍历一遍拓扑序列,以及松弛操作的代价为O(n+e);所以总的时间代价为O(n+e).3,
2015-11-28 22:20:36 1693
原创 队列的基本操作
队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。队列有下面几个操作:InitQueue() 初始化队列EnQueue() 进队列DeQueue() 出队列QueLength( ) 队列元素个数 DestroyQueue( ) 销毁队列队列可以由数组和链表两种形式
2015-11-28 11:59:12 1325 1
原创 汉诺塔问题
1,(n阶汉诺塔问题)假设有3个分别命名为X,Y和Z的塔座,在塔座X上插有n个直径大小各不相同,依照大小编号为1,2,...,n的圆盘。现在要求将X塔座上的圆盘移动到Z他坐上并按同样顺序叠排,圆盘移动时必须遵循下来规则:(1)每次只能移动一个圆盘;(2)圆盘可以插在X,Y,Z中的任意一个;(3)任何时刻都不能将一个大圆盘压在小圆盘上。看如何移动?2,当n=1时很简单,只要将1号
2015-11-26 21:51:14 2336
原创 栈的基本操作
1. 栈的定义栈是一种特殊的线性表。其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行。如下所示:结论:后进先出(Last In First Out),简称为LIFO线性表。栈的基本运算有六种:构造空栈:InitStack(SqStack &S)判栈空: StackEmpty(SqStack S)判栈满: Stack
2015-11-26 21:26:12 834
原创 Bellman-Ford求图的单源最短路径
1,Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。这时候,就需要使用其他的算法来求解最短路径,Bellman-Ford算法就是其中最常用的一个。该算法由美国数学家理查德•贝尔曼(Richard Bellman, 动态规划的提出者)和小莱斯特•福特(Lester Ford)发明
2015-11-24 21:08:00 673
原创 B树到B+树再到B*树
一,有一点,再次强调下:B-树,即为B树。因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解。如人们可能会以为B-树是一种树,而B树又是一种树。而事实上是,B-tree就是指的B树!二,B树!B树是为了减少磁盘IO操作或为了其它存储设备而设计的多路平衡查找树。与之前介绍的红黑树很相似,但在降低磁盘I/0操作方面要更好
2015-11-19 17:03:36 375
转载 多路查找树开篇
转载地址:http://blog.csdn.net/dazhong159/article/details/79642451、引言 以前我们所讨论的数据结构,处理数据都是在内存中。假如我们所要操作的数据集非常大,大到内存无法处理了怎么办?如数据库上千万记录的数据表、硬盘中上万个文件等。在这种情况下,对数据的处理需要不断的从硬盘等存储设备中调入或者调出内存页面。而过多
2015-11-19 15:19:07 925 1
原创 对红黑树的一些理解
1,红黑树(RBT)的定义:它或者是一颗空树,或者是具有一下性质的二叉查找树:1.节点非红即黑。2.根节点是黑色。3.所有NULL结点称为叶子节点,且认为颜色为黑。4.所有红节点的子节点都为黑色。5.从任一节点到其叶子节点的所有路径上都包含相同数目的黑节点。2,如何理解和记忆这5个定义?称为“红黑树”,即节点非红即黑,给节点着色的目的
2015-11-18 20:17:29 2407
原创 平衡二叉树(AVL树)的查找,插入和删除
1,http://blog.csdn.net/zzuchengming/article/details/49824561这是我转载的一个讲解AVL树的文章,思路很好,内容也很清晰,这里基础知识不再赘述!2,下边是我参考这篇文章写的代码,发现了其中的一个小错误!#include "stdafx.h"#include using std::cin;using std::cout;usi
2015-11-15 22:41:27 1423 1
转载 一步一步写平衡二叉树(AVL树)
转载:http://www.cppblog.com/cxiaojia/archive/2012/08/20/187776.html平衡二叉树(Balanced Binary Tree)是二叉查找树的一个进化体,也是第一个引入平衡概念的二叉树。1962年,G.M. Adelson-Velsky 和 E.M. Landis发明了这棵树,所以它又叫AVL树。平衡二叉树要求对于每一
2015-11-13 22:27:13 832 6
原创 二叉搜索树(二叉排序树,二叉查找树,二叉检索树)的查找,插入,删除
1,二叉搜索树定义?(1)每个节点有一个唯一的key值,且所有结点互不相同;(2)左子树所有key值小于根的key值;(3)右子树所有key值大于根的key值;(4)左右子树都是二叉搜索树。这就是一棵二叉搜索树。2,二叉搜索树的查找操作:(1)与根结点的key值比较,相等则 查找成功;(2)小于则查找左子树;(3)大于则查找右子树。3,二
2015-11-13 17:28:51 3600
原创 动态规划求最长递增子序列(longest increasing subsequence)
1,什么是动态规划?在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线,这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段
2015-11-04 22:00:28 6200
转载 动态规划解最长公共子序列问题
转载地址:http://blog.csdn.net/yysdsyl/article/details/4226630动态规划法经常会遇到复杂问题不能简单地分解成几个子问题,而会分解出一系列的子问题。简单地采用把大问题分解成子问题,并综合子问题的解导出大问题的解的方法,问题求解耗时会按问题规模呈幂级数增加。为了节约重复求相同子问题的时间,引入一个数组,不管它们是否对最终解有
2015-11-04 10:58:50 644
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人