- 浏览: 1656215 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (405)
- C/C++ (16)
- Linux (60)
- Algorithm (41)
- ACM (8)
- Ruby (39)
- Ruby on Rails (6)
- FP (2)
- Java SE (39)
- Java EE (6)
- Spring (11)
- Hibernate (1)
- Struts (1)
- Ajax (5)
- php (2)
- Data/Web Mining (20)
- Search Engine (19)
- NLP (2)
- Machine Learning (23)
- R (0)
- Database (10)
- Data Structure (6)
- Design Pattern (16)
- Hadoop (2)
- Browser (0)
- Firefox plugin/XPCOM (8)
- Eclise development (5)
- Architecture (1)
- Server (1)
- Cache (6)
- Code Generation (3)
- Open Source Tool (5)
- Develope Tools (5)
- 读书笔记 (7)
- 备忘 (4)
- 情感 (4)
- Others (20)
- python (0)
最新评论
-
532870393:
请问下,这本书是基于Hadoop1还是Hadoop2?
Hadoop in Action简单笔记(一) -
dongbiying:
不懂呀。。
十大常用数据结构 -
bing_it:
...
使用Spring MVC HandlerExceptionResolver处理异常 -
一别梦心:
按照上面的执行,文件确实是更新了,但是还是找不到kernel, ...
virtualbox 4.08安装虚机Ubuntu11.04增强功能失败解决方法 -
dsjt:
楼主spring 什么版本,我的3.1 ,xml中配置 < ...
使用Spring MVC HandlerExceptionResolver处理异常
字典数Trie和后缀数组suffix array是处理字符串操作的有力工具。
下面是ruby的实现:
class Trie attr_accessor :value def initialize @children = Hash.new {|h,k| h[k] = Trie.new } end def []=(key,value) insert(key,0,value) key end def [](key) get(key,0) end def each &block _each &block end def keys inject([]){|keys,(k,v)| keys << k; keys} end def values inject([]){|values,(k,v)| values << v; values} end def each_key &block keys.each &block end def each_value &block values.each &block end def inspect(indent = 0) buffer = '' indent_str = ' ' * indent buffer << indent_str + "value: #{value}\n" if value return buffer unless @children.size > 0 @children.each do |k,c| buffer << "#{indent_str}#{k} =>\n" buffer << c.inspect(indent + 2) end buffer end protected def _each(key='',&block) block.call(key,value) if key != '' and value @children.keys.sort.each do |k| @children[k]._each(key + k, &block) end end def insert(key,offset,value) if offset == key.length - 1 @children[key[offset,1]].value = value else @children[key[offset,1]].insert(key,offset+1,value) end end def get(key,offset) if offset == key.length - 1 @children[key[offset,1]].value else return nil unless @children.hash_key?(key[offset,1]) @children[key[offset,1]].get(key,offset + 1) end end end t = Trie.new t['cat'] = true t['cab'] = true t['cate'] = true t['bob'] = true p t
suffix array,我们使用简单的排序方法,算法复杂度取决于排序的复杂度。使用快排,平均复杂度可以达到O(N*logN),最坏复杂度为O(N*N)。没有使用更高效O(N*logN)的倍增法等构建。
class SuffixArray def initialize(str) @str = str @suffix_array = Array.new last_index = str.length - 1 (0..last_index).each do |i| suffix = str[i..last_index] position = i @suffix_array << { :suffix => suffix, :position => position } end @suffix_array.sort! {|a,b| a[:suffix] <=> b[:suffix] } end def find_substr(substr) high = @suffix_array.length - 1 low = 0 pos = -1 while( low <= high ) mid = (high + low ) / 2 suffix = @suffix_array[mid][:suffix] pre_suffix = suffix[0...substr.length] if(pre_suffix > substr) high = mid - 1 elsif(pre_suffix < substr) low = mid + 1 else return @suffix_array[mid][:position] end end return -1 end end sa = SuffixArray.new("The type of query that benefits most from caching") puts sa.find_substr("query that")
发表评论
-
二分查找之变型题目
2010-10-24 12:40 2163二分查找算法在各个公司的笔试面试题大量出现,通常不是简单一眼就 ... -
一道笔试题(创新工厂)解法
2010-10-21 17:44 1861一个帖子http://www.iteye.com/topic/ ... -
[zz]大数据量,海量数据 处理方法总结
2010-08-27 22:24 2276大数据量的问题是很多面试笔试中经常出现的问题,比如baidu ... -
金币问题
2009-11-09 08:41 2031今年某公司的笔试题: 一个矩阵地图,每一个元素值代表金币数, ... -
楼梯问题
2009-11-09 08:19 1581hl给我的几道某公司的算法题: 1、 有个 100 级的 ... -
一道考察模拟乘法的题目
2009-11-07 22:37 1426今天hl和我讨论一道题目: 写道 整形数组如a={1,4, ... -
链表归并
2009-11-07 21:40 1044以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过 ... -
找出出现次数超过一半的数字
2009-11-07 21:23 1893hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一 ... -
有道难题以超低分晋级
2009-06-10 11:36 1576有道难题比赛居然晋级了,可以领到一个t-shirt。 -
逆序数/逆序数对
2009-06-09 23:17 3794逆序数是个常遇到的问题,主要有两种解法: O(n^2)的方法: ... -
有道难题topcoder
2009-05-31 23:55 2467今天做了有道topcoder的题目,也是第一次在topcode ... -
百度之星第一场题目
2009-05-31 00:03 3664由于不符合参赛条件,未能参加百度之星,看了题目还挺有意思,把题 ... -
一个对字符串很好的Hash函数ELFHHash
2009-05-03 21:41 2287#include<stdio.h> #defin ... -
最大流Ford-Fulkerson算法
2009-04-22 17:33 9701算法导论对最大流算法有很详细的介绍,今天实现了最大流Ford- ... -
大数/高精度加减乘除取模[收藏]
2009-04-16 19:38 5080#include <iostream> #i ... -
带重复数字的全排列
2009-04-16 18:58 3905上次gx同学问我一道又重复数字的全排列的问题,我当时用set保 ... -
差分约束系统
2009-04-15 16:00 3760(本文假设读者已经有以下知识:最短路径的基本性质、Bellma ... -
二分图匹配
2009-04-15 15:40 3735二分图最大匹配的匈牙利算法 二分图是这样一个图,它的顶点可以分 ... -
线段树
2009-03-24 10:58 1690把问题简化一下: 在自然数,且所有的数不大于30000的 ... -
树状数组
2009-03-24 10:39 2356树状数组是一种非常优雅的数据结构. 当要频繁的对数 ...
相关推荐
SuffixArray是一种高效的数据结构,主要用于字符串的搜索和处理。它以一种有序的方式存储了一个字符串的所有后缀,使得在大量文本中进行模式匹配、查找、排序等操作变得非常快速。在这个扩展版本中,我们以单词为...
在给定的标题和描述中,提到了几种不同的字符串匹配方法:KMP算法、AC自动机与Trie树以及后缀数组。接下来,我们将详细讨论这些算法。 1. **KMP算法**: KMP(Knuth-Morris-Pratt)算法是一种高效的单串匹配算法,...
同时,这也可以作为一个起点,去探索更高级的主题,如Boyer-Moore算法、Aho-Corasick算法,或是更复杂的字符串数据结构,如suffix tree和suffix array。这些都是计算机科学领域不可或缺的知识,对于从事软件开发、...
Compressed suffix array 367 FM-index 368 Generalised suffix tree 371 B-trie 372 Judy array 372 Directed acyclic word graph 374 Multiway trees 376 Ternary search tree 376 And–or tree 379 (a,b)-tree ...
例如,在某些后缀树的实现中,可能会用到稀疏后缀树(sparse suffix tree)或者后缀数组(suffix array)和后缀链接(suffix link)的组合,这样可以在处理非常大的数据集时优化空间复杂度。 后缀树不仅在理论上...
后缀树(Suffix Tree)和后缀数组(Suffix Array)是字符串处理领域中的两种非常重要的数据结构,它们在文本检索、生物信息学等多个领域都有广泛的应用。 - **后缀树**:后缀树是一种压缩树(compact trie),它...
数据结构常用算法c++实现,程序目录如下: Array shuffle ...Word segementation(CHN/GB18030) using HMM and viterbi algorithm. A* algorithm K-Means Knuth–Morris–Pratt algorithm Disjoint-Set
1. **字典树(Trie)** - 尽管未直接提供字典树的源码,但`SuffixArray.java`可能涉及到了字典树的概念。字典树是一种用于快速查找字符串的数据结构,特别适用于存储和检索大量字符串,例如构建词典或搜索引擎。 2....
同时,为了提高效率,可能会采用如SA-IS(Suffix Array Construction by Induced Sorting)等算法来构建后缀数组,这是一种相对快速且内存友好的方法。 总之,"中文关键字提取"项目涉及了C++编程、字符串处理、后缀...
本资源“各种算法模板”聚焦于两种常见的数据结构和算法:字典树(Trie)和后缀数组(Suffix Array),这些都是在解决编程竞赛如POJ(Programming Online Judge)时经常遇到的工具。 **字典树**,又称为前缀树或...
7. **Suffix Array(后缀数组)**:后缀数组是所有字符串后缀排序后的数组,可以用来高效地执行许多字符串操作,如最长重复子串、LCP(最长公共前后缀)数组的构建等。 8. **suffix tree(后缀树)**:后缀树是后缀...
3. **自定义算法实现**: 对于更复杂的模糊搜索需求,你可以编写自定义算法,如前缀树(Trie)、后缀数组(Suffix Array)或者Aho-Corasick自动机。这些方法在处理大量数据时通常能提供更好的性能。 4. **第三方库**...
4. **文本搜索索引**:例如,后缀树(Suffix Tree)或后缀数组(Suffix Array),用于快速查找文本中的模式或子串。后缀树尤其适用于大型文本文件,通过将文件视为位向量,构建的 Trie 只包含具有分支的节点,从而...
7. **Suffix Array(后缀数组)与LCP Array(最长公共前后缀数组)**:后缀数组是字符串所有后缀排序后的结果,可以用于快速解决多种字符串问题,如查找最长重复子串、最短重复子串等。LCP数组则与后缀数组配合,...
2. **后缀数组(Suffix Array)** 后缀数组是一种用于字符串处理的高效数据结构,它存储了某个字符串的所有后缀排序后的结果。通过后缀数组,我们可以快速地进行后缀间的比较,实现诸如最长公共前后缀、最短重复子...
7. **Suffix Array(后缀数组)**:后缀数组是字符串的所有后缀按字典序排序后的数组,可以用来解决许多字符串问题,如最长重复子串、最短重复子串、最长公共前后缀等。构造后缀数组的过程往往需要优化,比如用LCP...
Algorithms 本次README修订为算法仓库Algorithms的第100次commit,首先我们庆祝自2016年8月4日本仓库建立以来Dev-XYS在算法学习方面取得的显著进步...数组版的字典树 Trie(Array) 指针版的字典树 Trie(Pointer)
对于变位词的检索,可以使用特殊的算法,如前缀树(Trie)、后缀数组(Suffix Array)或Burrows-Wheeler变换(BWT),这些算法能快速找到所有可能的变位词。 3. 用户界面:提供用户友好的交互方式,使用户能够方便...
后缀数组(Suffix Array)是一种存储字符串所有后缀的排序后的数组。它通常用于快速查询某个字符串是否包含另一个字符串作为子串的问题,以及更复杂的应用场景,如模式匹配、重复子串查找等。在本课件中,将探讨如何...
KMP算法和Rabin-Karp算法是字符串匹配的经典算法,而Suffix Array和Trie树则是高效处理字符串查询的工具。 综上所述,《夜深人静写算法》源码集合是一份宝贵的教育资源,它提供了大量实际的算法实现,涵盖了从基本...