Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 含有无用词的文档检索_Algorithm_Data Structures_Suffix Tree_String Algorithm - Fatal编程技术网

Algorithm 含有无用词的文档检索

Algorithm 含有无用词的文档检索,algorithm,data-structures,suffix-tree,string-algorithm,Algorithm,Data Structures,Suffix Tree,String Algorithm,我正在构建一个数据结构,帮助索引总长度为n的S文档集合,这样它就支持以下查询:给定两个单词P1和P2,count包含P1但不包含P2的所有文档。我希望答案是完整的(不要错过结果) 我已经构建了一个通用后缀树,并选择每个sqrt(n)-th叶及其祖先(并删除每个子节点)。对于每个内部节点v,我预先计算针对节点u的查询的答案 但是,如果查询包含出现在节点v和u的树中的单词,我可以在O(1)中得到答案,但是如果单词不在我们选择的节点中,我该怎么办 我可以通过保留一个带有预处理的O(n2)数据结构并准备

我正在构建一个数据结构,帮助索引总长度为n的S文档集合,这样它就支持以下查询:给定两个单词P1和P2,count包含P1但不包含P2的所有文档。我希望答案是完整的(不要错过结果)

我已经构建了一个通用后缀树,并选择每个sqrt(n)-th叶及其祖先(并删除每个子节点)。对于每个内部节点v,我预先计算针对节点u的查询的答案

但是,如果查询包含出现在节点v和u的树中的单词,我可以在O(1)中得到答案,但是如果单词不在我们选择的节点中,我该怎么办

我可以通过保留一个带有预处理的O(n2)数据结构并准备好所有可能的答案供O(1)次检索来轻松实现,但目标是在O(n)空间中构建此数据结构,并使查询尽可能高效。

听起来a对您仍然有用。这是一个单词映射到包含它们的有序文档列表上。文档需要有一个通用的、总的顺序,它们在每个单词存储桶中的显示顺序就是这样的

假设你的
n
是语料库中单词出现的总长度(而不是词汇量),它可以在
O(n logn)
时间和线性空间中构建

给定
P1
P2
,您可以进行两个单独的查询,以分别获取包含这两个术语的文档。由于这两个列表共享一个公共顺序,您可以执行类似线性合并的算法,只选择包含
P1
但不包含
P2
的文档:

c1 <- cursor to first element of list of docs containing P1
c2 <- cursor to first element of list of docs containing P2
results <- [] # our return value

while c1 not exhausted
  if c2 exhausted or *c1 < *c2
    results.append(c1++)
  else if *c1 == *c2
    c1++
    c2++
  else # *c1 > *c2
    c2++

return results
c1