- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 从源点到其余各顶点的最短距离--迪杰斯特拉(Dijkstra)算法
<br />问题描述:对于一个带权的有向图,如何求得从源点到其余各顶点的最短路径?<br />解决此问题的算法:迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的次序产生最短路径的长度。<br />在此算法中引进了一个数组D[],这个数组是用来存储,每个顶点当前的从源点到该顶点的最短路径长度。<br /><br />思路决定出路,那么下面还是先理清楚思路。<br /><br />算法具体步骤:<br />1. 初始化数组D[]。带权有向图是用邻接矩阵进行存储的。用邻接矩阵的第一行数据对D[]进行初始化
2010-07-30 20:23:00
8325
原创 关键路径算法
<br />关键路径的算法是建立在拓扑排序的基础之上的,这个算法中用到了拓扑排序,所以在这里先以拓扑排序开篇。<br />1. 什么是拓扑排序?<br />举个例子先:一个软件专业的学生学习一系列的课程,其中一些课程必须再学完它的基础的先修课程才能开始。如:在《程序设计基础》和《离散数学》学完之前就不能开始学习《数据结构》。这些先决条件定义了课程之间的领先(优先)关系。这个关系可以用有向图更清楚地表示。图中顶点表示课程,有向边表示先决条件。若课程i是课程j的先决条件,则图中有弧<i,j>。若要对这个图中的顶
2010-07-30 16:47:00
42694
5
原创 最小生成树--普利姆(Prim)算法
<br />最小生成树<br />1. 为什么要构造最小生成树?什么是最小生成树?<br />假设要在n个城市之间建立通信联络网,则连通n个城市只需要n-1条线路。这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网。<br />在每两个城市之间都可以设置一条线路,相应地都要付出一定的经济代价。N个城市之间,最多可以设置n(n-1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少呢?<br />在n个城市之间架设n-1条线路,使得这n个城市是连通的,这就是一个构造生成
2010-07-30 14:51:00
2848
2
原创 各类排序算法总结
以上是内部排序方法的一个分类框图。首先,我们来分析一下各类排序方法所基于的基本原理: 插入排序:将待排序的序列中的元素一个一个地插入到已经排序好的有序序列中。 快速排序:通过一趟排序将待排序列分割成两个部分,一个部分的所有关键字都比另一个部分的关键字小,然后再按照此方法对这两个部分的数列进行上述操作。 选择排序:每次从待排序列中选出最大或者最小的元素。只到待排序列中所有的元素均被选出。 归并排序:将相邻的两个有序子序列归并为一个有序序列。 基数排序:将待排序列中的元素分成由若干个基数组成,被分成了
2010-07-22 18:13:00
1153
1
原创 基数排序
<br />基数排序(Radix Sorting):<br /><br /> 基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。<br />1. 多关键字排序思想<br /> 多关键字排序也就是对一个序列中每项数据都包含有多个关键字的序列进行排序。比如说对一幅扑克牌进行排序,扑克牌就包括花色和面值这两个关键字。有两种排序方法:<br /> 第一种方法:按照花色我们将扑克牌分成四堆。然后再对每堆扑克按照面值的大小进行排序。最后,按照花色大小顺序将这四队扑克牌收成一堆。这样扑
2010-07-22 15:18:00
2318
原创 归并排序(非递归算法)
<br /> <br />归并排序:<br /> 将无序的序列划分成若干的子序列,然后将相邻的子序列归并到一个序列,这个归并过程一直继续下去,直到序列只有两个子序列,将这最后的两个子序列归并完成后,也即是排序完毕,得到的就是一个有序的序列。其中归并的过程也即是相邻两个子序列之间的排序问题。这是归并排序的基本原理。<br /> 那么,思路也就是,在一趟排序中先将序列分成若干个子序列,然后再将相邻的子序列进行归并。将序列分成若干子序列,具体分法依赖于子序列的长度,确定了子序列的长度自然分成若干子序列
2010-07-22 14:21:00
2740
原创 堆排序算法
<br /> <br />堆排序(Heap Sort)是一种选择排序,每趟从待排序列中选出最大或者最小的关键字。<br /> 首先来解释下什么叫堆?<br /> 堆定义:n个元素的序列{k1,k2,…,kn}当且仅当满足下关系时,称之为堆。<br /> 或其中。<br /> 堆排序,也是对满足堆条件的序列的排序。那么对一个无序的序列进行堆排序之前,首先要将待排序序列转换成堆。如何将无序序列转换成堆?<br /> 若将满足堆条件的序列看做是完全二叉树存储结构,那么这颗完全二叉树就满
2010-07-21 10:45:00
2081
原创 快速排序
<br />基本原理:通过一趟排序将记录分割成两个部分。其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两个部分记录继续进行排序,以达到整个序列有序。<br /><br />如何分割?<br />有n个关键字的数列待排列,将第一个元素定为枢纽pivotkey;将数列中其它关键字和pivotkey进行比较,大于pivotkey的放置在pivotkey的后面,小于pivotkey的放置在pivotkey的前面。这就是一趟排序的过程,将一个数列分割成了两个部分,其中pivotkey的前面记录的关键字
2010-07-19 18:47:00
497
原创 冒泡排序
<br />冒泡排序是一种简单的快速排序。<br />基本思路:对一个有n个元素的数列进行排序。进行k趟排序,每一趟找出数列中最大的关键字(最简单的交换方式),并将这个最大的关键字放在这一趟排序所遍历的最后一个位置上。其中要注意的是冒泡排序结束的条件是:在一趟排序过程中没有进行交换记录的操作。所以k值是由实际的序列来决定的。<br /><br />例如:对序列49,38,65,97,76,13,27,49,55,4 进行起泡排序过程如下:<br /> 第1趟:38 49
2010-07-19 18:25:00
817
libsvm-mat-2.83-1
2010-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人