[置顶] KMP算法实现及应用

摘要: 1、KMP算法实现问题: KMP算法实现就是字符查找问题,假设现在有这样一个问题,有一个文本串S和一个模式串P,要查找P在S中的位置,即从文本串S中找出模式串P第一次出现的位置。 问题分析: 假设文本串长度为n,模式串长度为m。 (1)暴力求解算法下,当两者匹配S[i] = P[j] 时,i++,j 阅读全文

posted @ 2016-05-08 18:22 Brainer-Gao 阅读(601) 评论(0) 推荐(0) 编辑

[置顶] 最长公共子串

摘要: 最长公共子串问题: 给定两个字符串A和B,求解两个字符串的最长公共子串。子串必须连续。 如:A :" abcdef";B:"cdefgh"。最长公共子串为"cdef",返回为4。 问题分析过程可以参考最长公共子序列。http://www.cnblogs.com/gaobaoru-articles/p 阅读全文

posted @ 2016-05-07 11:04 Brainer-Gao 阅读(209) 评论(0) 推荐(0) 编辑

[置顶] Cantor数组问题

摘要: Cantor数组问题: 已知数组A[0...N-1]乱序着前N个正整数,现统计后缀数组A[i+1...N-1]中小于元素A[i]的数目,并存放在数组C[i]中。则C数组称为Cantor数组。 如给定数组:4,6,2,5,1,3。得到的Cantor数组为:3,4,1,2,1,0。 生成Cantor数组 阅读全文

posted @ 2016-05-04 23:59 Brainer-Gao 阅读(508) 评论(0) 推荐(0) 编辑

[置顶] 最小编辑代价

摘要: 最小编辑代价问题: 对于两个字符串A和B,我们需要进行插入、删除和修改操作将A串变为B串,定义c0,c1,c2分别为三种操作的代价,请设计一个高效算法,求出将A串变为B串所需要的最少代价。 给定两个字符串A和B,及它们的长度和三种操作代价,请返回将A串变为B串所需要的最小代价。保证两串长度均小于等于 阅读全文

posted @ 2016-05-02 17:26 Brainer-Gao 阅读(416) 评论(0) 推荐(0) 编辑

[置顶] 字符串的全排列

摘要: 字符串的全排列问题: 给定字符串S[0...N-1],设计算法,枚举字符串的全排列。 1、无重复字符串全排列非递归算法 程序实现: 运行结果: 说明:在每次递归前需要保证字符串的顺序不变,因此有每次的替换过程。 2、有重复字符串队规算法 程序实现: 运行结果: 说明:本算法时间复杂度能达到O((n+ 阅读全文

posted @ 2016-05-01 16:57 Brainer-Gao 阅读(323) 评论(0) 推荐(0) 编辑

[置顶] 哈希表实现

摘要: 哈希表实现: 使用BKDRHash作为基础的哈希函数,同时使用拉链法作为冲突处理方法,实现哈希表的插入和查找操作。 哈希函数BKDRHash实现如下: 处理冲突的方法有拉链法,开放定址和再哈希法。各种冲突方法如何实现,可以自行查资料进行学习,这里不做详细介绍。另附一张图,说明拉链法(说明版权:来源小 阅读全文

posted @ 2016-05-01 12:20 Brainer-Gao 阅读(186) 评论(0) 推荐(0) 编辑

2016年5月4日

数组的最大间隔

摘要: 数组的最大间隔: 给定整数数组A[0...N-1],求这N个数排序后的最大间隔。要求时间复杂度为O(N)。 如:数组:1,7,14,9,4,13。 排序后:1,4,7,9,13,14。最大间隔为4。 问题分析: 如果对原数组排序,然后后项减前项的最大值,即为所求解。但是时间复杂度为O(nlogn)。 阅读全文

posted @ 2016-05-04 23:06 Brainer-Gao 阅读(678) 评论(0) 推荐(0) 编辑

荷兰国旗问题

摘要: 荷兰国旗问题: 现有红,白,蓝三个不同颜色的小球,乱序排列在一起,重新排列这些小球,使得红白蓝三色的同颜色的球在一起。 问题分析: 问题转换为:给定数组A[0,1,...,N-1],元素只能取0,1,2三个值,设计算法使得数组重新排列成“000...111..222”的形式。 可以使用三个游标,be 阅读全文

posted @ 2016-05-04 22:03 Brainer-Gao 阅读(190) 评论(0) 推荐(0) 编辑

最大子数组和

摘要: 最大子数组和问题: 给定一个数组A[0,1...,N-1],求A的连续子数组,使得该子数组和最大。 如:数组:1,-2,3,10,-4,7,2,-5 子数组:3,10,-4,7,2;该子数组和为 18。 程序实现: 运行结果: 转载请注明出处: C++博客园:godfrey_88 http://ww 阅读全文

posted @ 2016-05-04 19:43 Brainer-Gao 阅读(190) 评论(0) 推荐(0) 编辑

2016年5月3日

子数组和最接近零问题

摘要: 子数组和最接近零问题: 对于长度为N的数组A,求连续子数组的和最接近0的值。 如:1,-2,3,10,-4,7,2,-5;该数组中子数组和最接近零的值为0,子数组为-4,7,2,-5。 程序实现: 运行结果: 说明:本算法时间复杂度为O(nlogn)。 转载请注明出处: C++博客园:godfrey 阅读全文

posted @ 2016-05-03 22:08 Brainer-Gao 阅读(277) 评论(0) 推荐(0) 编辑

查找旋转数组的最小值

摘要: 查找旋转数组的最小值: 假设一个排序数组以某个未知元素为支点做了旋转,找出旋转后数组中的最小值,假定数组中没有重复元素。 如:原数组1,2,3,4,5,6,7旋转后得到4,5,6,7,1,2,3。旋转后的最小值为1。 问题分析: 这里不做过多的介绍,旋转之后的数组实际上可以划分为两个有序的数组,前面 阅读全文

posted @ 2016-05-03 21:41 Brainer-Gao 阅读(1040) 评论(1) 推荐(0) 编辑

第一个缺失的整数

摘要: 求第一个缺失的整数问题: 给定一个数组A[0...N-1],找到从1开始,第一个不在数组中的正整数。 例如:3,5,1,2,-3,7,14,8;返回: 4。 问题分析: 可以将找到的数放在正确的位置上,如果最终发现某个元素一直没有找到,则该元素即为所求。 假设前 i-1 个数已经找到,并已经正确存放 阅读全文

posted @ 2016-05-03 21:13 Brainer-Gao 阅读(296) 评论(0) 推荐(0) 编辑

求局部最大值

摘要: 求局部最大值问题: 给定一个无重复元素的数组A[0...N-1],找到一个该数组的局部最大值。 问题分析: 遍历一遍得全局最大值,它显然是局部最大值,但是时间复杂度是O(n),现在要求时间复杂度为O(logn)。 问题求解过程类似于二分查找,但是还不完全一样,需要分析清楚问题来源。问题中只需要求出一 阅读全文

posted @ 2016-05-03 20:46 Brainer-Gao 阅读(1658) 评论(0) 推荐(0) 编辑

导航