- 浏览: 1638541 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 2117二分查找算法在各个公司的笔试面试题大量出现,通常不是简单一眼就 ... -
一道笔试题(创新工厂)解法
2010-10-21 17:44 1815一个帖子http://www.iteye.com/topic/ ... -
[zz]大数据量,海量数据 处理方法总结
2010-08-27 22:24 2242大数据量的问题是很多面试笔试中经常出现的问题,比如baidu ... -
金币问题
2009-11-09 08:41 1990今年某公司的笔试题: 一个矩阵地图,每一个元素值代表金币数, ... -
楼梯问题
2009-11-09 08:19 1543hl给我的几道某公司的算法题: 1、 有个 100 级的 ... -
一道考察模拟乘法的题目
2009-11-07 22:37 1395今天hl和我讨论一道题目: 写道 整形数组如a={1,4, ... -
链表归并
2009-11-07 21:40 1002以前gx同学问的某某公司的笔试题,写一下练练(纯手写,没编译过 ... -
找出出现次数超过一半的数字
2009-11-07 21:23 1863hl同学问我一道这个题,想了一种方法,感觉还是不错的,只扫描一 ... -
有道难题以超低分晋级
2009-06-10 11:36 1532有道难题比赛居然晋级了,可以领到一个t-shirt。 -
逆序数/逆序数对
2009-06-09 23:17 3739逆序数是个常遇到的问题,主要有两种解法: O(n^2)的方法: ... -
有道难题topcoder
2009-05-31 23:55 2426今天做了有道topcoder的题目,也是第一次在topcode ... -
百度之星第一场题目
2009-05-31 00:03 3593由于不符合参赛条件,未能参加百度之星,看了题目还挺有意思,把题 ... -
一个对字符串很好的Hash函数ELFHHash
2009-05-03 21:41 2241#include<stdio.h> #defin ... -
最大流Ford-Fulkerson算法
2009-04-22 17:33 9627算法导论对最大流算法有很详细的介绍,今天实现了最大流Ford- ... -
大数/高精度加减乘除取模[收藏]
2009-04-16 19:38 5026#include <iostream> #i ... -
带重复数字的全排列
2009-04-16 18:58 3860上次gx同学问我一道又重复数字的全排列的问题,我当时用set保 ... -
差分约束系统
2009-04-15 16:00 3686(本文假设读者已经有以下知识:最短路径的基本性质、Bellma ... -
二分图匹配
2009-04-15 15:40 3699二分图最大匹配的匈牙利算法 二分图是这样一个图,它的顶点可以分 ... -
线段树
2009-03-24 10:58 1655把问题简化一下: 在自然数,且所有的数不大于30000的 ... -
树状数组
2009-03-24 10:39 2306树状数组是一种非常优雅的数据结构. 当要频繁的对数 ...
相关推荐
...关于string的小结 kmp extend_kmp ac+trie 后缀数组
Double Array Trie 的实现
double_array Trie 敏感词过滤系统 算法 敏感词过滤 trie double_array Trie
后缀tire树(tire图),用于多字符串匹配。
double-array-trie原理与算法实现探索,dat算法分析
Trie树是搜索树的一种,来自英文单词"Retrieval"的简写,可以建立有效的数据检索组织结构,是中文匹配分词算法中词典的一种常见实现。它本质上是一个确定的有限状态自动机(DFA),每个节点代表自动机的一个状态。在...
Double Array Trie是TRIE树的一种变形,它是在保证TRIE树检索速度的前提下,提高空间利用率而提出的一种数据结构,本质上是一个确定有限自动机(deterministic finite automaton,简称DFA)。 所谓的DFA就是一个能实现...
对双数纽Trie 树(Double-Array Trie)分词算法进行了优化:在采用Trie 树构造 双数纽Trie 树的过程中,优先处理分支节点多的结点,以减少冲突;构造一个空状态序列; 将冲突的结点放入Hash表中,不需要重新分配...
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 ...
这个是一个double-array的实现,就是用数组来存储trie,以减少空间的利用率。
这是Double-ARray Trie System的GO实施。 它是的克隆 Dart可以用作简单的哈希字典。 您还可以非常快速地执行通用前缀搜索,这对于形态分析至关重要,例如用于CJK文本索引/搜索的单词拆分。 参考 消息 支持从构建...
trie-0.1.1.tar
前端开源库-doublearray双数组trie的Doublearray、javascript实现
rust-darts:Rust中的Double Array Trie
trie.c中定义了trie树的操作函数; trie.h为相应的头文件; test.c用于测试相关的函数。 在trie.c中,关于查找定义了两个函数,一个是find(),一个是search(),二者的区别是,前者仅判断一个字符串是否在树中出现,...
一个简单的C语言程序:用Trie树实现词频统计和单词查询
为了提高性能并减少内存使用,该程序使用Double Array Trie而不是常用的Linked List Trie 。 在基准测试中, it is 10 times faster than the most popular AC algorithm implement in golang @ github and tenth ...
trie树模板,acm竞赛,可以进行适当的修改就可以解决问题,在进行字符串处理的时候尤其能用到。
2、Trie树SDK中的API支持以下功能 1)插入节点 2)精确删除节点 3)正向模糊匹配 4)反向模糊匹配 5)精确查询节点 6)获取头(尾)节点 7)删除头(尾)节点 8)排序 9)支持多级树 10)支持强大的查询节点功能 ...
用Python实现Trie树的应用,并可以对英汉词典进行导入和检索、添加和删除,最终可以将导入的英汉词典保存到本地磁盘。内附两个.py文件,分别是tree.py和d_gui.py,tree.py是类和方法,d_gui.py是图形界面;一个.txt...