`
kmplayer
  • 浏览: 512050 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表

后缀数组

好难,慢慢学. 1,定义: (1)约定一个字符集Σ和一个字符串 S,设 len(S)=n,且 S[n]='$',也就是说 S 以一个特殊字符'$'结尾,并且'$'小于Σ中的任何一个字符。除了 S[n]之外,S 中的其他字符都属于Σ。对于约定的字符串 S,从位置 i 开头的后缀直接写成 Suffix(i)。 例如:S=mississippi+'$' (2)后缀数组  后缀数组SA 是一个一维数组,它保存 1..n 的某个排列 SA[1],SA[2],...SA[n],并且保证  Suffix(SA[i])<Suffix(SA[i+1]),1≤i<n。也就是将S 的 n 个后缀从小 ...
1,后缀树(Suffix tree)是一种数据结构,能快速解决很多关于字符串的问题。后缀树提出的目的是用来支持有效的字符串匹配和查询。 简单点说,后缀树就是将一个给定字符串的所有后缀全部压入一个Trie,然后将只有单个叶子的节点压缩,从而形成的一棵树. 2,后缀树的用途,总结起来大概有如下几种 (1). 查找字符串o是否在字符串S中。 方案:用S构造后缀树,按在trie中搜索字串的方法搜索o即可。 原理:若o在S中,则o必然是S的某个后缀的前缀。 例如S: leconte,查找o: con是否在S中,则o(con)必然是S(leconte)的后缀之一conte的前缀.有了这个前提,采用trie ...

红黑树

二叉排序树 1,二叉排序树(Binary Sort Tree)又称二叉查找树。 2,它或者是一棵空树;或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值 ...
计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。 于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。 一个叫做“回车”,告诉打字机把打印头定位在左边界; 另一个叫做“换行”,告诉打字机把纸向下移一行。 这就是“换行”和“回车”的来历.后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现 ...
先看一段代码: #include <stdio.h> int main() { char c1=100; char c2=200; char c3=c1+c2; printf("c2==%d\n",c2); printf("c3==%d\n",c3); char x=124; char y=x+x; printf("x+x== %x\n",x+x); printf("y==%x\n",y); } 输 ...

Tire树

Tire树: 先简单解释一下Trie。“Trie”这个单词来自于"retrieve",可见它的用途主要是字符串查询。Trie不发tree的音,而发try的音。 应用 题目大意: 统计子串出现的次数,规定子串的长度不超过8. http://acm.scs.bupt.cn/onlinejudge/showproblem.php?problem_id=1302 trie算法的思路大概如下: 对输入的长串S 想将所有长度位1-8的子串存入trie树,并在子串末节点上记录下字串出现的次数,然后针对每个输入的查询串s 只要在这颗树上查找 一遍就能找到得到该子串出现的次数。 仍段代码 ...
1,题目大意: 给n条线段,要求划分成尽可能少的子集,使得在同一个子集中的线段两两不重叠. 同时限定线段1和线段2不能在同一子集中. 2,问题分析: (1) 记每条线段为[Li,Ri], 每个子集的最右端为Bi.  记线段1和2中,L较小的那个为X,另一个为Y. (2) 如果没有那个限定,容易想到贪心的方法: 将所有线段按L从小到大排序.然后依次处理线段k,如果当前存在某个集合的Bi<=Lk,就将Lk加入此集合中,并更新Bi=Rk.否则新开一个集合放入k.模拟这个过程,最后的集合数就是答案.用堆维护已有集合的信息,时间复杂度是O(nlgn). (3) 有了限制条件后,原方法不适用了 ...
此文所有的实验都是基于下面的程序: char str[10]; for (int i = 0; i < 10; i++) str[i] = '!'; 执行完后str的值为 str = "!!!!!!!!!!" 我们把str的每个字符都初始化为惊叹号,当str的值发生变化时,使用printf打印str的值,对比先前的 ...
问题: malloc是开出内存空间。 现在我写了这么一句: char *name; name=(char *)malloc(len*sizeof(char)); name指针是个char指针,指向一个char数据,即只保留了一个char数据的长度信息.free的时候它如何知道开出的空间到底有多长? 解答: (1)malloc是一个库函数,不是由操作系统提供的,绝大部分都是由编译器提供的库包自己实现的。malloc如何实现,依赖于不同的操作系统跟不同的c库。 比如,在linux上面,malloc是调用brk系统调用进行内存分配的,而在windows则是HeapAlloc等等类似的系统函数分配内 ...

记事本

#include <algorithm> #include <functional> #include <iostream> #include <iterator> using namespace std; class MyAdd : public binary_function<int,int,int> { public:     MyAdd(){}     int operator()(int m,int n)     {         return m+n;     } }; int main() {   ostream_i ...
1,程序 程序计算机指令的集合,它以文件的形式存储在磁盘上. 2,进程 进程通畅被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动. 进程由两部分组成: (1)内核对象:操作系统用它来管理进程,也用来存放进程的统计信息. (2)地址空间:包含所有可执行模块或DLL模块的代码和数据,还包含动态内存分配的空间,如线程堆栈和堆分配空间. 进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源. 进程是不活泼的。进程从来不执行任何东西,它只是线程的容器。若要使进程完成某项操作,它必须拥有一个在它的环境中运行的线程,此线程负责执行包含在进程的地址空间中的代码。 ...
1,算法简介 KMP算法是模式匹配算法的一种改进算法,是D.E.Knuth与V.R.Pratt和J.H.Morris同时发现的,因此人们称它为克努特-莫里斯- 普拉特操作(简称KMP算法)。 2,算法核心 对字串进行预处理. 依靠get_next函数计算出子串中每个字符对应的next[j]的值,从而减少子串回溯的距离,减少时间复杂度。 3,算法性能 简单匹配算法的时间复杂度为O(m*n);可以证明KMP匹配算法的时间复杂度为O(m+n). 4,计算子串的模式函数值. 子串的模式函数值.next[i]有很多版本,这里介绍其中的一种. 定义: (1)next[0]= -1 意义:任何串的第一个字符的 ...
朴素的字符串匹配算法为什么慢? 因为它太健忘了,前一次匹配的信息其实可以有部分可以应用到后一次匹配中的,而朴素的字符串匹配算法只是简单的把这个信息扔掉,从头再来,因此,浪费了时间。好好的利用这些信息,自然可以提高运行速度。 1.问题描述 给定目标字符串 T[0..n-1] (基于 0 的数组,数组长度为 n ),和模式串 P[0..m-1] ,问 P 可否匹配 T 中的任意子串,如果可以,返回匹配位置。 2.问题分析 直观分析 brute-force 的蛮力法,适用于较小规模的字符串匹配。 优化 主要介绍 3 种优化办法,分别具体为: Rabin-Karp 算法,有限自动机和 KM ...
(1)#ifndef和 #define组合 一般用于头文件中,防止该头文件被重复引用. 其用法一般为: #ifndef <标识>   #define <标识>   .........   // include or define sth. #else   ...... #endif <标识>在理论上来说可以是自由命名的,但每个头文件的这个“标识”都应该是唯一的。 标识的命名规则一般是头文件名全大写,前后加下划线,并把文件名中的“.”也变成下划线,如:stdio.h对应的就是: #ifndef _STDIO_H_ #define _STDIO_H_ ...... ...
找出一个带环单链表的环开始的结点 一个n方复杂度的算法: #include <iostream> using namespace std; //定义数据结构 struct Node { Node(int i):data(i),next(0){} int data; Node* next; }; //释放带环的节点 void node_circle_free(Node* node,Node* point) { static bool flag=false; if(node->next!=poin ...
Global site tag (gtag.js) - Google Analytics