![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
~张然
这个作者很懒,什么都没留下…
展开
-
KMP子字符串查找中的DFA算法
KMP算法的一个优点是不需要在输入中回退,这使得KMP子字符串查找算法更适合在长度不确定的输入流中进行查找,需要回退的算法在这种情况下则需要复杂的缓冲机制。 dfa[pat.charAt(0)][0] = 1; for (int X = 0, j = 1; j < M; j++) { for (int c = 0; c < R; c++) dfa[c][j]...原创 2019-02-03 16:19:06 · 2567 阅读 · 0 评论 -
BM算法查找子字符串
两种模式,三种匹配状态。 两种模式: 文本指针i自左向右移动,模式指针自右向左移动。匹配时由pattern的字符串由右向左匹配。 三种匹配失败状态: 1.匹配到一个不在模式字符串中的字符,将文本指针i跳跃pattern.length+1。重新匹配。 2.匹配到一个在模式字符串中的字符,将文本指针i跳跃的长度为该字符在pattern最右边的位置,也就是将文本字符串该...原创 2019-02-03 17:26:37 · 200 阅读 · 0 评论 -
RK指纹字符串查找算法
源代码: import java.math.BigInteger; import java.util.Random; import edu.princeton.cs.algs4.StdOut; public class RabinKarp { private String pat; //模式字符串 private long patHash; //模式字符串散列值 ...原创 2019-02-04 23:47:42 · 2349 阅读 · 0 评论 -
lzw压缩算法
关键是抓住编码过程中当P+C不在字典里,才会输出P的过程。 LZW编码算法: 1. 初始状态,字典里只有所有的默认项,例如0->a,1->b,2->c。此时P和C都是空的。 2. 读入新的字符C,与P合并形成字符串P+C。 3. 在字典里查找P+C,如果: - P+C在字典里,P=P+C。 - P+C不在字典里,将P的记号输出;在字典中为P+C建立一个记...原创 2019-02-10 20:35:34 · 297 阅读 · 0 评论 -
二分查找算法
二分查找代码可以通过迭代或递归来实现: 迭代: public boolean rank(int k , int[] array) { int lo = 0; int hi = array.length(); int mid = (lo+hi)/2; while(lo<=hi) { if(k<array[mid]) ...原创 2019-02-12 15:22:53 · 90 阅读 · 0 评论 -
约瑟环问题
例题: 17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事,15个教徒和15个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法,30个人围成一个圆圈,从第一个人开始依次报数,每数到第九个人,就将他扔入大海,如此循环进行,直到仅剩余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。 解析:题目中30个人围成一圈,可以用一个循...原创 2019-02-26 21:46:31 · 1090 阅读 · 0 评论 -
八皇后问题
DFS思想 1. import java.util.List; import java.util.ArrayList; public class test { public List<List<String>> solveNQueens(int n) { List<List<String>...原创 2019-03-04 15:53:31 · 81 阅读 · 0 评论 -
二叉树的三种遍历的递归写法和非递归写法
二叉树的前序遍历、中序遍历、后续遍历的递归方法代码较少,思路就是方法的压栈出栈过程。 它的非递归写法其实就是使用了递归遍历的思想,采用栈的结构,也就是说非递归写法写的是递归写法函数调用入栈出栈的过程。 前序遍历:节点输出并入栈,无左节点出栈,出栈不输出,如果有右节点则继续入栈,否则继续出栈,直到栈为空。 中序遍历:节点入栈,无左节点出栈,出栈输出,如果有右节点则继续入栈,不输出,...原创 2019-03-12 00:31:02 · 250 阅读 · 0 评论 -
剑指offer算法分析
1.二维数组中的查找: 二维数组,每行都从左往右递增,每列都从上往下递增。现在该数组中查找是否有指定的数。 解析:首先想到递归思想、二分查找思想。接着,由于左上角或右下角的数据类似于二分查找的中位数,故可以以此为切入点,不断切割二维数组,最终得到查找结果。 2.替换空格: 实现一个函数,将一个字符串中的每个空格替换成“%20”。 解析:1.replac...原创 2019-04-14 00:22:31 · 283 阅读 · 0 评论