本文整理汇总了C++中SuffixArray::text方法的典型用法代码示例。如果您正苦于以下问题:C++ SuffixArray::text方法的具体用法?C++ SuffixArray::text怎么用?C++ SuffixArray::text使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SuffixArray
的用法示例。
在下文中一共展示了SuffixArray::text方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ILCPConstruct
void ILCPConstruct(const SuffixArray& sa,
std::vector<SuffixArray::Index>* ilcp) {
typedef SuffixArray::Index Index;
std::vector<Index>& text_lcp = *ilcp;
text_lcp.resize(sa.size());
Index start = 0;
int num_docs = 0;
const char* text = sa.text();
for (Index i = 0; i <= (Index)sa.size(); ++i) {
if (i == (Index)sa.size() || (unsigned char)text[i] <= 1) {
const char* doc = text + start;
Index doc_len = i - start;
SuffixArray doc_sa(doc, doc_len);
for (Index j = 0; j < doc_len; ++j) {
Index p = doc_sa.sa(j);
Index lcp = doc_sa.lcp(j);
text_lcp[start + p] = lcp;
}
num_docs++;
start = i;
}
}
std::vector<bool> visited(sa.size());
// permutate text_lcp[i] = text_lcp[sa[i]] implace
for (Index i = 0; i < (Index)sa.size(); ++i) {
if (!visited[i]) {
int j = i;
while (true) {
visited[j] = 1;
Index to = sa.sa(j);
if (visited[to]) break;
std::swap(text_lcp[j], text_lcp[to]);
j = to;
}
}
// ilcp[i] = text_lcp[sa.sa(i)];
}
}