自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

青峰碧陋室

策马前途须努力,莫学龙钟虚叹息。愿乘风破万里浪;甘面壁读廿年书。

原创 【算法导论】幻方算法

说起幻方,大家应该在小学时候就已经接触过了,最简单的就是九宫格,射雕英雄传中的那段至今还记得:戴九履一,左三右七,二四为肩,六八为足。下面我们就来看看这个有趣的问题。 幻方可以分为:奇数阶幻方、双偶阶幻方、单偶阶幻方。 奇数阶幻方 上面所说的九宫格就是典型的奇数阶幻方,奇数阶幻方值得是阶数为奇数的...

2013-12-30 20:39:26 5634 1

原创 【算法导论】地图染色算法

地图染色问题可以根据四色定理来解决。所谓四色定理,就是指可以用不多于四种的颜色对地图着色,使相邻的行政区域不重色,因此我们可以用四色定理的结论,用回溯算法对一幅给定的地图染色。 算法的基本思想是:从第(1)号行政区域开始染色,每个区域逐次用颜色1#、2#、3#、4#进行试探,若当前所取的颜色与周围...

2013-12-28 22:54:29 11343 1

原创 【算法导论】有向图的可达矩阵

有时候,我们关注的不是从一个地点到另一个地点的费用,而是能否从一个顶点到达另一个顶点。因此我们可以假设所有边的权值为单位1,在下面的算法中,我们可以在O(n*n*n)的时间内计算出图中任意两点是否可达,我用可达矩阵来表示有向图中两者是否可达。如果可以从i到j,则定义tij=1,否则tij=0。因此...

2013-12-27 11:05:07 15263 2

原创 【算法导论】每对顶点之间的最短路径算法

对于一个顶点数为N的有向网路图,我们可以通过前面所提到的单源最短路径算法执行N次来获得每一对顶点间的最短路径。这种方法的时间复杂度为O(N*N*N)。如果网络中有负权值的边,则需要使用前面提到的单源最短路径算法之Bellman—Floyd算法。总之,总可以通过单源最短路径来求得每对顶点间的最短路径...

2013-12-26 10:52:57 4453 0

原创 【算法导论】单源最短路径之Dijkstra算法

Dijkstra算法解决了有向图上带正权值的单源最短路径问题,其运行时间要比Bellman-Ford算法低,但适用范围比Bellman-Ford算法窄。、 迪杰斯特拉提出的按路径长度递增次序来产生源点到各顶点的最短路径的算法思想是:对有n个顶点的有向连通网络G=(V, E),首先从V中取出源点u0...

2013-12-23 20:25:10 4225 0

原创 【算法导论】单源最短路径之Bellman-Ford算法

单源最短路径指的是从一个顶点到其它顶点的具有最小权值的路径。我们之前提到的广度优先搜索算法就是一种无权图上执行的最短路径算法,即在所有的边都具有单位权值的图的一种算法。单源最短路径算法可以解决图中任意顶点间的最短路径。        对于单源最短路径问题,一般有两种经典解法:1.对于有权值为负的图...

2013-12-20 18:10:13 6865 1

原创 【算法导论】最小生成树之Prime法

关于最小生成树的概念,在前一篇文章中已经讲到,就不在赘述了。下面介绍Prime算法: 其基本思想为:从一个顶点出发,选择由该顶点出发的最小权值边,并将该边的另一个顶点包含进来,然后找出由这两个顶点出发的最小边,依此类推,直至包含所有的顶点。如果期间构成环,就舍弃该边,继续寻找最小边。下面以具体实例...

2013-12-19 19:45:45 2211 0

原创 【算法导论】最小生成树之Kruskal法

在图论中,树是指无回路存在的连通图。一个连通图的生成树是指包含了所有顶点的树。如果把生成树的边的权值总和作为生成树的权,那么权值最小的生成树就称为最小生成树。因为最小生成树在实际中有很多应用,所以我们有必要了解怎样生成最小生成树。构造最小生成树的两种常用方法:Kruskal算法、Prim算法。本文...

2013-12-17 17:41:15 2699 5

原创 【算法导论】有向图的深度优先搜索遍历

在前面的文章中,我已经讨论了无向图的遍历,现在发现在有向图中,可能会发生无法遍历到所有节点的情况。因此在经历一次深度优先搜索遍历后,如果还存在未被搜索到的节点,则需要再从新的节点开始进行深度优先搜索遍历,直到访问完所有节点。 以下面的有向图为例: 如果从a开始进行深度优先搜索遍历,则会得到  ...

2013-12-15 18:32:31 14017 0

原创 【算法导论】邻接表存储的拓扑排序

上一篇文章中讲述了用邻接矩阵存储的图的拓扑排序,下面本文介绍用邻接表存储的图的拓扑排序。 关于拓扑排序的概念及基本思想,我在上一篇文章中已经较为详细的描述了,这里不在介绍。我们知道利用邻接矩阵进行拓扑排序时,程序实现较为简单,但是效率不高,算法的复杂度为O(n^3).而利用邻接表会使入度为0的顶点...

2013-12-13 16:50:52 5053 1

原创 【算法导论】邻接矩阵存储的拓扑排序

在很多应用中,很多事情都是按照一定的次序来进行的,比如说起床穿衣时,不可能先穿鞋再穿袜子,但是穿袜子和穿裤子可以不分先后次序。这种按照一定顺序进行的活动,可以使用顶点表示活动,顶点之间的有向边表示活动间的先后关系,这种有向无回路图说明了活动的先后次序。 当活动只能单个进行时,如果可以将图中的所有顶...

2013-12-11 17:31:18 6347 1

原创 【算法导论】图的深度优先搜索遍历(DFS)

关于图的存储在上一篇文章中已经讲述,在这里不在赘述。下面我们介绍图的深度优先搜索遍历(DFS)。 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj;访问vj之后,又访问vj的一个邻接点,依次类推,尽可能向纵深方向搜索,所以称为深度优先搜索遍历。显然这种搜索方法具有递归的性质。图的BF...

2013-12-10 19:24:50 3872 0

原创 【算法导论】图的广度优先搜索遍历(BFS)

图的存储方法:邻接矩阵、邻接表         例如:有一个图如下所示: 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表:         邻接表存储方法是一种顺序存储与链式存储相结合的存储方法。在这种方法中,只考虑非...

2013-12-09 20:50:15 5441 0

原创 【算法导论】链表队列

链表队列很简单,之前看到过,没有用程序实现。其原理就是遵循FIFO原则,只能从队首取元素,从队尾插入元素,就和排队模型一样。因此只需要队首指针和队尾指针就可以方便的进行队列操作。因为在最近看的图论算法中,经常用到队列,在这里就先用程序实现链表队列。 和单链表一样,为了运算方便,我们也在队头节点前附...

2013-12-06 17:52:50 1879 0

原创 【算法导论】B树

一棵B树T是具有如下性质的有根树(设根为root): 1.每个节点x有一下域:(a)num,当前存储在节点x的关键字个数,关键字以非降序存放,因此key[i]                                                  (b)isleaf,是一个bool值,如...

2013-12-04 20:21:25 2206 0

原创 【算法导论】贪心算法之背包问题

在讨论贪心算法时,我们先了解贪心算法与动态规划之间的区别与联系,后面我们将发现可以用0、1背包问题和部分背包问题来比较贪心算法和动态规划的关系。 我们知道,对于一个最优解问题,贪心算法不一定能够产生一个最优解。因为,如果想要采用贪心算法得到最优解需要满足两个条件:贪心选择性质、最优子结构。 贪心选...

2013-12-01 11:32:39 7793 1

提示
确定要删除当前文章?
取消 删除