- 博客(11)
- 资源 (39)
- 收藏
- 关注
原创 数据结构:外排序-多路归并
外排序 外排序问题的出现,主要是因为内存不够。当需要排序的数据量过多,以至于无法一次性把所有的数据都放入内存,这导致了外排序问题的出现。解决大数据量排序的方法是:先分块排序,后进行块合并。外排序步骤把原数据分成几段读入内存,以至于每一块都可以完整的在内存中进行排序,排序好后,写入外部存储设备。归并已排序好的数据块。这就是归并排序在外排序中的应用。 对每块数据进行排序,可以使用各种内排序方法:快速排序、归并排序、堆排序等。这个比较简单,下面模拟一个对排序好的数据块进行归并的过程。
2014-08-23 17:56:24 3774 1
原创 挑战面试编程:字符串包含
字符串查找是在一个大的文本中查找一个给定的模式串,常用的算法有KMP、BM、Sunday等。而字符串包含要求比较低:只要字符包含就行,不需要连续。例如,S="abcd",T="ac",做查找运算,则T不在S中;做包含运算,T包含在S中。
2014-08-15 20:51:08 1499 1
原创 线性检索:顺序检索
当我们对所检索序列中元素的分布一无所知或元素本身就是随机分布的时候,顺序检索是常用的方法。 常用的返回值策略是,若用数组array,从下标0开始存储元素,检索成功则返回相应下标,失败则返回-1。另一种返回策略是:若从下标1开始存储元素,0号位置作为sentinel(哨兵),返回0则表示检索失败。使用这种返回策略会减少循环条件的判断,提高效率。直接看代码
2014-08-15 20:32:31 3696 1
原创 集合的检索:位图法
位图法是一种逻辑上很巧妙的描述集合的方法。如集合S={2,4,1,5,12},它用位图描述就是 0110 1100 0000 1000,两个字节即可描述S,左边是低阶位。用bitset<16>存储的话就是{[15]、[14]、...[1]、[0]}={0001000000110110}。用位图对集合进行描述后,就很方便进行集合的运算,如交、并和差。
2014-08-15 19:53:30 2663 1
原创 挑战面试编程:回文串、回文数字
回文(palindrome)问题是一个很常见的问题。回文现象是指从左到右和从右到左阅读是一样的串或数字。例如串:"abcba"、数字:121。串的回文问题一、从首尾向中间递进二、从中间向首尾递进复杂度分析因为最多只需遍历一次串,所以以上两种方法的时间复杂度都是O(n)。只使用到了两个int型的变量充当指针,故空间复杂度都是O(1)。
2014-08-10 11:20:56 4273 1
原创 数据结构:最小生成树--Kruskal算法
Kruskal算法 求解最小生成树的另一种常见算法是Kruskal算法,它比Prim算法更直观。从直观上看,Kruskal算法的做法是:每次都从剩余边中选取权值最小的,当然,这条边不能使已有的边产生回路。手动求解会发现Kruskal算法异常简单,下面是一个例子算法说明 为了判断环的出现,我们换个角度来理解Kruskal算法的做法:初始时,把图中的n个顶点看成是独立的n个连通分量,从树的角度看,也是n个根节点。我们选边的标准是这样的:若边上的两个顶点从属于两个不同的连通分量,则此边可取
2014-08-07 11:45:37 10033 1
原创 数据结构:最小生成树--Prim算法
最小生成树 给定一无向带权图,顶点数是n,要使图连通只需n-1条边,若这n-1条边的权值和最小,则称有这n个顶点和n-1条边构成了图的最小生成树(minimum-cost spanning tree)。Prim算法 Prim算法是解决最小生成树的常用算法。它采取贪心策略,从指定的顶点开始寻找最小权值的邻接点。图G=<V,E>,初始时S={V0},把与V0相邻接,且边的权值最小的顶点加入到S。不断地把S中的顶点与V-S中顶点的最小权值边加入,直到所有顶点都已加入到S中。
2014-08-05 00:30:48 17106 3
原创 数据结构:点对之间最短距离--Floyd算法
Floyd算法 Dijkstra算法是用于解决单源最短路径问题的,Floyd算法则是解决点对之间最短路径问题的。Floyd算法的设计策略是动态规划,而Dijkstra采取的是贪心策略。当然,贪心算法就是动态规划的特例。算法思想 点对之间的最短路径只会有两种情况:两点之间有边相连,weight(Vi,Vj)即是最小的。通过另一点:中介点,两点相连,使weight(Vi,Vv)+weight(Vv,Vj)最小。Min_Distance(Vi,Vj)=min{weight(Vi,Vj)
2014-08-04 13:06:24 4835
原创 数据结构:单源最短路径--Dijkstra算法
单源最短路径 给定一带权图,图中每条边的权值是非负的,代表着两顶点之间的距离。指定图中的一顶点为源点,找出源点到其它顶点的最短路径和其长度的问题,即是单源最短路径问题。Dijkstra算法 求解单源最短路径问题的常用方法是Dijkstra(迪杰斯特拉)算法。该算法使用的是贪心策略:每次都找出剩余顶点中与源点距离最近的一个顶点。算法思想 带权图G=<V,E>,令S为已确定了最短路径顶点的集合,则可用V-S表示剩余未确定最短路径顶点的集合。假设V0是源点,则初始 S={V0}。
2014-08-03 21:28:06 10084
原创 数据结构:图--拓扑排序
拓扑排序 在实际应用中,有向图的边可以看做是顶点之间制约关系的描述。把顶点看作是一个个任务,则对于有向边<Vi,Vj>表明任务Vj的完成需等到任务Vi完成之后,也就是说任务Vi先于任务Vj完成。对于一个有向图,找出一个顶点序列,且序列满足:若顶点Vi和Vj之间有一条边<Vi,Vj>,则在此序列中顶点Vi必在顶点Vj之前。这样的一个序列就称为有向图的拓扑序列(topological order)。步骤从有向图中选取一个没有前驱(入度为0)的顶点输出。删除图中所有以它为起点的弧。
2014-08-03 01:10:21 8182
原创 数据结构:图的遍历--深度优先、广度优先
图的遍历是指从图中的某一顶点出发,按照一定的策略访问图中的每一个顶点。当然,每个顶点有且只能被访问一次。在图的遍历中,深度优先和广度优先是最常使用的两种遍历方式。这两种遍历方式对无向图和有向图都是适用的,并且都是从指定的顶点开始遍历的。先看下两种遍历方式的遍历规则:深度优先深度优先遍历也叫深度优先搜索(Depth First Search)。它的遍历规则:不断地沿着顶点的深度方向遍历。顶点的深度方向是指它的邻接点方向。
2014-08-02 11:20:15 66552 11
外排序-多路归并
2014-08-23
哈夫曼树&哈弗曼编码
2014-07-12
一元多项式的加法、减法、乘法
2014-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人