最长公共子串(Longest Common Substring)是一个非常经典的问题,它的基本描述为“给定两个字符串,求出它们之间最长的相同子字符串(要求连续)的长度”。求N个最长为L的字符串的的LCS的方法大致可分为以下几类:1.枚举法显然是简单但极端低效的算法,改进一些的算法是用一个串的每个后缀对其他所有串进行部分匹配,用KMP算法,时间复杂度为O(NL2)。2.动态规划解法:平方的时间算法。3.后缀数组与高度数组解法,利用二分查找技术,时间复杂度为O(NLlogL)。3.广义后缀树方法,时间复杂度为可...
分类:
其他好文 时间:
2014-09-15 21:22:49
阅读次数:
389
HDU 5008 Boring String Problem
题目链接
思路:构造后缀数组,利用height的数组能预处理出每个字典序开始的前缀和有多少个(其实就是为了去除重复串),然后每次二分查找相应位置,然后在往前往后找一下sa[i]最小的
代码:
#include
#include
#include
using namespace std;
typedef l...
分类:
其他好文 时间:
2014-09-15 21:21:09
阅读次数:
271
题目链接:hdu 5008 Boring String Problem
题目大意:给定一个字符串,初始状态l,r为0,每次询问子串中字典序第l^r^v+1的子串区间,对于重复的输出下标小的。
解题思路:后缀数组,对给定字符串做后缀数组,然后根据height数组确定每个位置做为起点的子串有多少,然后二分查找确定起点位置,但是因为子串的重复的要输出下表小的,所以确定起点后还要确定字典序最小...
分类:
其他好文 时间:
2014-09-15 19:32:07
阅读次数:
188
因为一看到有关子串就主动的联想后缀数组所有后缀的前缀去重后就是所有子串(好像是废话)这样就可以得到每个后缀的子串个数。二分查找到第k个所在的位置。在二分处理所有可以出现该串的sa区间。最小就是维护sa数组。 1 //rank从0开始 2 //sa从1开始,因为最后一个字符(最小的)排在第0位 ...
分类:
其他好文 时间:
2014-09-15 14:10:49
阅读次数:
202
二分查找的迭代和递归实现:#include #include int find1(int *a, int low , int high , int key)//迭代二分查找{ int mid = 0; while (low high) return -1; int mid = (low+high)/...
分类:
数据库 时间:
2014-09-15 01:03:07
阅读次数:
268
还有一个典型的递归例子是对已排序数组的二分查找算法。博e百娱乐城现在有一个已经排序好的数组,要在这个数组中查找一个元素,以确定它是否在这个数组中,很一般的想法是顺序检查每个元素,看它是否与待查找元素相同。这个方法很容易想到,但它的效率不能让人满意,它的复杂度是O(n)的。现在我们来看看递归在这里能不...
分类:
其他好文 时间:
2014-09-13 21:16:05
阅读次数:
166
二分算法是我们经常会用到的一个算法。它是分治法的一个应用。不过,虽然他写起来貌似很简单,但是却很容易写错。下面我们讨论一下二分的死循环问题。(这里讨论的是整数的二分问题,浮点数的二分不容易死循环)
1.查找的元素确定,值唯一或者不存在
这种情况等下,我们的流程分为三个分支:(相等、小于、大于)。这类不容易死循环,代码如下:
if ( data[mid] == ...
分类:
其他好文 时间:
2014-09-13 18:48:55
阅读次数:
1049
思想:循环有序数组最大的特点是利用二分查找时,有一边总是有序的,利用这个特点,利用value存储历史最小值
当左边有序,则用A[low]与value比较即可得出当前左边的最小值,然后跳转到右边看是否存在更小的;
如果右边有序,则用A[mid]与value比较,得出右边的最小值,然后跳转到左边查看是否有更小的。
算法复杂度为O(logn)
代码如下:#include
#include
#in...
分类:
其他好文 时间:
2014-09-13 12:06:55
阅读次数:
244
关于二分查找思想以及STL实现的解释,以及个人手动实现。
分类:
其他好文 时间:
2014-09-12 18:35:54
阅读次数:
343
二分查找又称折半查找,优点是比较次数少,查找速度快;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
该算法要求:
1、 必须采用顺序存储结构。
2、 必须按关键字大小有序排列。
该算法时间复杂度最坏为:O(logn)
注意点有mid、low、high...
分类:
编程语言 时间:
2014-09-12 17:17:23
阅读次数:
179