算法积累
文章平均质量分 81
单向街的夏天
每天进步一点点
展开
-
算法题---字符串篇
1问题: 把字符串压缩,比如aaabbbbc, 压缩后成为:a3b4c1。分析:这题很简单,我们只需要从头到尾遍历一遍字符串即可。首先设置一个计数器count, 每次“指针移位”的时候,判断当前字符是否与前一个字符相等,如果相等,count++, 指针继续下移,否则,我们需要对前面已经遍历的字符串进行处理,然后重新初始化count,直到字符串遍历结束。这题的关键是对原创 2013-05-24 20:37:24 · 1600 阅读 · 0 评论 -
KMP算法---理解
一. 简单匹配算法 简单匹配算法,又称为朴素的模式匹配算法。简单匹配算法回溯的是i,不是j。先来看一个简单匹配算法的例子:public class KMP_test {/** 若串 S 中从第pos(S 的下标0≤pos* 这样的子串在串 S 中的下标,否则返回 -1*/public static int find(String src原创 2013-06-25 21:51:07 · 935 阅读 · 0 评论 -
字符串匹配的KMP算法(部分匹配表:前缀---后缀)
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上转载 2013-05-25 19:59:18 · 6012 阅读 · 1 评论 -
算法题----经典数学问题
一 题目:寻找丑数 我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数。分析:这是一道在网络上广为流传的面试题,据说google曾经采用过这道题。所谓一个数m是另一个数n的因子,是指n能被m整除,也就是n % m == 0。根据丑数原创 2013-05-30 20:03:35 · 1051 阅读 · 0 评论 -
算法题---Tree系列(二叉树 )
1 题目: 二元树的深度 输入一棵二元树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。例如:输入二元树: 10 / \原创 2013-05-30 22:12:08 · 1146 阅读 · 0 评论 -
算法题--综合篇
1 问题:比如:给定两个值 5和10,不通过比较,直接找出最大值。分析:一旦涉及到不用比较找最大值,想都不用想,一般只能通过位运算来实现。 max = a - ((a-b)&((a-b)>>31))或者max = ((a+b)+|a-b|)/2如果找最小值,我们只需把两个值相加,减去max即可。2 问题:原创 2013-05-23 21:54:28 · 1257 阅读 · 0 评论 -
算法题---二叉树篇
1 问题:打印二叉树所有的路径 给一个二叉树,把所有的路径都打印出来。比如,对于下面这个二叉树,它所有的路径为:8 -> 3 -> 18 -> 2 -> 6 -> 48 -> 3 -> 6 -> 78 -> 10 -> 14 -> 13思路:从根节点开始,把自己的值放在一个数组里,然后把这个数组传给它的子节点,子节点同样把自己原创 2013-05-24 20:39:58 · 1017 阅读 · 0 评论 -
三种线性排序算法 计数排序、桶排序与基数排序
[非基于比较的排序]在计算机科学中,排序是一门基础的算法技术,许多算法都要以此作为基础,不同的排序算法有着不同的时间开销和空间开销。排序算法有非常多种,算法需要对序列中的数据进行比较,因而被称为基于比较的排序。 (基于比较的排序算法是不能突破O(NlogN)的。) 简单证明如下:转载 2013-05-30 16:27:58 · 921 阅读 · 0 评论 -
字符串匹配的Boyer-Moore算法
KMP并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。下面,我根据Moore教授自己的例子来解释这种算法。1.转载 2013-05-25 20:10:18 · 814 阅读 · 0 评论 -
分词常见算法-----小整理
1 单字分词 public static void tokennizer(String a){ for(int i=0;i System.out.prinltn(a.charAt[i]); } } 2 二元分词 public static void split(S原创 2013-05-25 22:16:38 · 1553 阅读 · 0 评论