2010年5月24日
摘要: 2007-07-15 15:48-------------------------------------算法简述-----------------------------------------ST算法O(nlogn)预处理,O(1)的查询指定区间的最值(以最小值为例)基本上是把待求区间[l,r]分为两段长为len的区间左边一段为[l,l+len-1],右边一段为[r-len+1,r]len必须... 阅读全文
posted @ 2010-05-24 23:16 keep going 阅读(1963) 评论(0) 推荐(1) 编辑
摘要: RMQ问题是求给定区间中的最值问题。当然,最简单的算法是O(n)的,但是对于查询次数很多(设置多大100万次),O(n)的算法效率不够。可以用线段树将算法优化到O(logn)(在线段树中保存线段的最值)。不过,Sparse_Table算法才是最好的:它可以在O(nlogn)的预处理以后实现O(1)的查询效率。下面把Sparse Table算法分成预处理和查询两部分来说明(以求最小值为例)。预处理:... 阅读全文
posted @ 2010-05-24 23:14 keep going 阅读(373) 评论(0) 推荐(0) 编辑
摘要: 首先请看定义:一、最近公共祖先(Least Common Ancestors) 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。 这里给出一个LCA的例子: 例一 对于T=<V,E> V={1,2,3,4,5} E={(1... 阅读全文
posted @ 2010-05-24 23:11 keep going 阅读(769) 评论(0) 推荐(0) 编辑
摘要: 后缀数组就是将字符串所有后缀排序后的数组,设字符串为S,令后缀Suffix(i)表示S[i..len(S)]。用两个数组记录所有后缀的排序结果:Rank[i]记录Suffix(i)排序后的序号,即Suffix[i]在所有后缀中是第Rank[i]小的后缀SA[i]记录第i位后缀的首字母位置,即Suffix[SA[i]]在所有后缀中是第i小的后缀然后就是怎么快速求所有后缀的顺序了,其中的关键是如何减少... 阅读全文
posted @ 2010-05-24 22:32 keep going 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 2009-10-25 09:05后缀数组是处理字符串的有力工具,后缀数组可以解决大多数后缀树解决的问题,由于它的实现要比后缀树简单,因此深受广大ACM爱好者的喜爱,当然还是有一些问题只有后缀树能解决的问题,等学习了后缀树再将其添上。后缀数组最常用的是求取最长公共前缀。后缀suffix数组,suffix【i】表示从第i个字符开始的后缀;后缀数组sa,保留1~n的某个排列,保证suffix【sa【i】... 阅读全文
posted @ 2010-05-24 22:31 keep going 阅读(518) 评论(0) 推荐(1) 编辑
摘要: 字符串最小表示:[代码] 阅读全文
posted @ 2010-05-24 19:55 keep going 阅读(196) 评论(0) 推荐(0) 编辑