数据结构与算法
文章平均质量分 68
lonhuen
编程爱好者,欢迎交流
展开
-
KMP算法
今天复习了一下KMP算法,发现忘得差不多了,只能说当时理解还是不够,所以整理了一下,换一个思路来理解KMP算法。 KMP算法主要的思路是对pattern串进行预处理,得到一个数组next数组,next[i] 表示 当pattern[i]与目标串target[j]失配时,应将pattern串中的哪个元素直接移动到与目标串target[j]匹配,而不是一个一个向右移去匹配。其原理是,在我们得到nex原创 2016-05-05 22:11:28 · 144 阅读 · 0 评论 -
DFS求有向图强联通分量
在算法导论的图论算法里,有一个小节讲的是利用两次DFS和一次转置图来求有向图的强联通分量,觉得整个解法很有意思,所以想分享给大家一起瞅瞅。 先修知识: 主要是DFS的运行过程,以及我们将在对某个点完成DFS过程时标记一个完成时间,在这里用十分伪的代码描述一下。 void DFS(Graph G,Vertex u) { visit u; for each Vertex v adja原创 2016-05-18 21:01:56 · 320 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题是一个很经典的问题,一般初学递归的时候都会碰到,而本文将试着解决一道汉诺塔问题的变式。 我们知道,汉诺塔问题中,盘子之前大小是不同的,而在变式里,大小为i的盘子将有ai个,对于1=1。而我们的问题即是,最少通过多少步可以将一根柱上的圆盘,转移到另一根柱子上,并且过程中圆盘上只能有大小不大于它的圆盘,且最后圆盘的顺序和初始一致,即相同的圆盘也要保持和原先一致的顺序。 当然我们仍然会先考原创 2016-10-21 23:42:52 · 148 阅读 · 0 评论