- 博客(6)
- 收藏
- 关注
原创 Z-Box 算法
Malancer和Z-Box的算法思想很类似,通过维护一个辅助数组,来减少重复的比较都有一个控制范围的概念,在控制范围内则可以利用前面已经计算过的结果来减少算法的计算量,在控制范围外的就只能用最朴素的方式...
2018-07-01 20:53:08 678
原创 线性筛/欧拉筛
问题:列出素数,问题规模较大时解法: #include "stdafx.h" #include <cstring> using namespace std; int prime[1100000], primesize, phi[11000000]; bool isprime[11000000]; void getlist(int listsize) { memset(ispri...
2018-07-01 16:28:44 116
原创 Manacher算法
参考:http://blog.csdn.net/dyx404514/article/details/42061017问题:查找一个字符串的最长回文子串解法:(1)枚举中点再判断回文时间复杂度:O(n^2)(2)Manacher算法时间复杂度:O(n)a.首先加入分隔符来统一长度为奇数和长度为偶数的回文串(加入分隔符后任何回文串都会是奇数的)b.计算len数组len[i]表示以i字符为中心的最长回文...
2018-07-01 15:35:03 114
原创 KMP算法
问题:字符串匹配,一个字符串是否是另一个字符串的一个子串,如果包含,返回包含的起始位置算法:Straightforward:从字符串str和pattern 的第一个字符开始比较,如果不相同就将pattern 往后移一位,再从pattern 的第一位开始比时间复杂度:O(n*m)KMP:实现复杂度为O(m+n)利用pattern的性质,即字串串的部分重复性,使得 1. 不需要从pattern的第一位...
2018-07-01 14:51:36 129
原创 最长公共子序列(Longest Common Sequence, LCS)
问题:给定两个字符串,求解这两个字符串的最长公共子序列注意,这里的序列与字串的含义不同,序列中的各个元素可以不连续,只要保证在两个字符串中出现的顺序相同就可以解法:递归式:由于其中需要重复求解很多子问题,很容易想到用动态规划来优化递归,将子问题的解保存起来int LCS(string str1, string str2) { vector<vector<int>> sol...
2018-07-01 11:34:08 372
原创 并查集
作用:判断两个节点 是否在一个集合内/是否联通数据结构:数组id,id[i] 表示第i个元素的父元素的位置上图表示所有单数节点 和双数节点各在一个集合中主要算法:第一种算法(quick find):抽象数据结构如下,特点是最多只有双层,任何元素的父元素都是该集合的根元素查找父元素:int find(int p) { return id[p]; }quick find 使用O(1)的时间复杂度...
2018-07-01 11:02:14 85
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人