编程算法 - 后缀树(Suffix Tree) 代码(C)
2014-09-21 08:30
716 查看
后缀树(Suffix Tree) 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy给你一个长字符串s与很多短字符串集合{T1,, T2, ...}, 设计一个方法在s中查询T1, T2, ..., 要求找出Ti在s中的位置.
代码:
/*
* main.cpp
*
* Created on: 2014.7.20
* Author: Spike
*/
/*eclipse cdt, gcc 4.8.1*/
#include <iostream>
#include <vector>
#include <map>
using namespace std;
class SuffixTreeNode {
map<char, SuffixTreeNode*> children;
char value;
vector<int> indexes;
public:
SuffixTreeNode() {}
void insertString(string s, int index) {
indexes.push_back(index);
if (s.length() > 0) {
value = s[0];
SuffixTreeNode* child = NULL;
if (children.find(value) != children.end()) {
child = children[value];
} else {
child = new SuffixTreeNode();
children[value] = child;
}
string remainder = s.substr(1);
child->insertString(remainder, index);
}
}
vector<int> getIndexes(string s) {
if (s.length() == 0)
return indexes;
else {
char first = s[0];
if (children.find(first) != children.end()) {
string remainder = s.substr(1);
return children[first]->getIndexes(remainder);
} else {
vector<int> empty;
return empty;
}
}
}
~SuffixTreeNode() {
map<char, SuffixTreeNode*>::iterator it;
for (it!=children.begin(); it!=children.end(); ++it)
delete it->second;
}
};
class SuffixTree {
SuffixTreeNode* root;
public:
SuffixTree(string s) {
root = new SuffixTreeNode;
for (int i=0; i<s.length(); ++i) {
string suffix = s.substr(i);
root->insertString(suffix,i);
}
}
vector<int> getIndexes(string s) {
return root->getIndexes(s);
}
~SuffixTree() {}
};
int main(void)
{
string testString = "mississippi";
string stringList[] = {"is", "sip", "hi", "sis"};
SuffixTree tree (testString);
for (int i=0; i<4; i++) {
vector<int> li = tree.getIndexes(stringList[i]);
if (li.size() != 0) {
cout << stringList[i] << " ";
for (int j=0; j<li.size(); ++j)
cout << li[j] << " ";
cout << endl;
}
}
return 0;
}
输出:
is 1 4
sip 6
sis 3
相关文章推荐
- 后缀树(Suffix Tree) 应用
- #翻译# 介绍后缀树(suffix tree)
- 祥林嫂精神恍惚痛苦呼唤之关于Suffix Tree[后缀树]
- 后缀树(Suffix Tree)的文本匹配算法
- 后缀树-SuffixTree概念
- 后缀树(Suffix Tree)
- 后缀树简介-Pattern Searching | Set 8 (Suffix Tree Introduction)
- #翻译# 介绍后缀树(suffix tree)
- 后缀树(Suffix Tree)
- 完整优化的SuffixTree代码
- 编程算法 - 二叉搜索树(binary search tree) 集合(set)和映射(map) 代码(C)
- [算法系列之二十四]后缀树(Suffix Tree)
- 后缀树(suffix tree)
- 编程算法 - 二叉搜索树(binary search tree) 代码(C)
- 编程算法 - 二叉搜索树(binary search tree) 代码(C)
- 后缀树(Suffix Tree)的文本匹配算法
- #翻译# 介绍后缀树(suffix tree)
- 后缀树(SuffixTree)的Ukkonen线性时间构造方法
- FlyTreeView 多层树 代码示例
- js tree代码下载