算法
芦笛
这个作者很懒,什么都没留下…
展开
-
字符串后缀自动机:Directed Acyclic Word Graph
trie -- suffix tree -- suffix automa 有这么一些应用场景:即时响应用户输入的AJAX搜索框时, 显示候选列表。搜索引擎的关键字个数统计。后缀树(Suffix Tree): 从根到叶子表示一个后缀。仅仅从这一个简单的描述,我们可以概念上解决下面的几个问题:P:查找字符串o是否在字符串S中A:若o在S中,则o必然是S的某个后缀原创 2014-06-24 20:41:56 · 1684 阅读 · 0 评论 -
把UML概念融合到整个软件设计过程
UML是统一建模语言的缩写,(统一场论?)给人一种虚高的感觉。以前一直我没有关注,直到看到一本书,才知道工程写法和教科书写法差异实在太大。需求分析 --use case diagram 并不是一个需求/功能就画一个圈,而是对需求有一个分类,抽象的过程。关联在一起的需求同时解决的效率高些,因为省去了思维和场景,环境的切换。比如分类:UI,业务流程,数据存储,呈现等等。原创 2014-07-22 20:09:24 · 779 阅读 · 0 评论 -
后缀自动机的直观理解
后缀自动机(SAM)搜了网上,多介绍应用,[3]算是一个比严格的定义性描述,并给出了证明。但是这个证明我并未看懂,下面综合一些资料给一些个人的直观但不失严谨的理解。给定一个串A的后缀自动机是一个有限状态自动机(DFA),它能够且仅能够接受A的后缀,并且我们要求它的状态数最少。设n=|A|, 状态数:st=[n+1,2n-1], 边数:eg=[n,3n-4]。构造:空间复杂度:26*st原创 2014-07-01 19:31:56 · 1136 阅读 · 0 评论 -
字符串匹配:从后缀自动机到KMP
后缀自动机(sam)上的字符串匹配====我们把相对较短的模式串构造成sam。对于P="abcabcacab", T[1..i]的后缀,使得它是sam的最长前缀长度:T: b a b c b a b c a b c a a b c a b c a b c a c a b c 1 1 2 3 1 1 2 3 4 5 6 7 1 2 3 4 5 6 7 5 6 7 8 9 1原创 2014-07-08 20:19:29 · 1536 阅读 · 0 评论 -
分摊分析介绍
/*分摊分析 聚类方法 最坏情形下,一系列操作总的代价上界除以操作个数,就是每个操作的分摊代价。这里每个操作的分摊代价相同。例子 二进制计数器INC(A) i = 0 while i A[i] = 0 i = i + 1 if i A[i] = 1初始时A[0..k] = 0.INC(A)最坏是O(k), n次INC最坏达到原创 2014-07-15 19:51:57 · 3093 阅读 · 0 评论 -
跳表(SkipList) -- 基于概率的平衡二叉树
从搜索的资料来看,重复的关键字让人感觉有一点不安,逻辑上的和空间消耗上的,于是找一些其他相关是否有改进的。deterministic skip list, 2-3-4tree的翻版,top-down方式维护平衡,感觉还是走的老路,且连续三者取中来提升,局部性不好,对concurrent不友好。又重新仔细读了一遍Pugh原文,"A level i node has i原创 2015-08-07 21:17:18 · 1044 阅读 · 0 评论 -
精确覆盖问题的dancing links 技术
精确覆盖一类的问题,难点在于01矩阵的构造。一旦构造好,就可以用下面的dancing links 技术快速有效地求解。构造思路:每个物体所有可能的摆放方式 --行不重复地覆盖所有格子 -- 目标列约束条件,或者单个选择的唯一表示 -- 列把可能的选择,包括已知的选择 --行比如对于数独问题[2]:(1)81个格子中每个格子只能放一个数字C1-81(2)每一行的数字不原创 2015-08-09 09:30:09 · 864 阅读 · 0 评论 -
三叉树的完整操作
作为针对Trie树空间优化, 原始论文及网上的代码都没有实现删除操作, 在下补上[1]。出发点是删除子树,没有考虑去清理没有叶子的树枝。[1]https://github.com/DeYangLiu/data_structure/commit/3d2fb612f619c9b8f2be04ae983e0a0af159284c?diff=unified原创 2016-11-27 17:29:51 · 4784 阅读 · 0 评论 -
binary indexed tree
binary indexed tree背景二进制索引树(binary indexed tree [bit])是一种高效计算累积频率的“假想数据结构“,不是通所说的二叉搜索树(binary search tree)。 对一维数组A求累积频率, 常规做法如下。 更新(x, v) := A[x] += v; //O(1) 查询(x) := A[0] + A[1] + … + A[x]; //O(N)原创 2017-01-01 11:16:23 · 429 阅读 · 0 评论