倒排列表求交集算法汇总

http://bbs.sjtu.edu.cn/bbstcon,board,Algorithm,reid,1225812893.html

我总结了一下,归纳如下:
1.1 SvS and Swapping SvS
Algorithm 1 Pseudo-code for SvS
SvS(set, k)
1: Sort the sets by size (|set[0]| ≤ |set[1]| ≤ . . . ≤ |set[k]|).
2: Let the smallest set s[0] be the candidate answer set.
3: for each set s[i], i = 1. . . k do initialize _[k] = 0.
4: for each set s[i], i = 1. . . k do
5:  for each element e in the candidate answer set do
6:    search for e in s[i] in the range l[i] to |s[i]|,
7:    and update l[i] to the last position probed in the previous step.
8:    if e was not found then
9:      remove e from candidate answer set,
10:      and advance e to the next element in the answer set.
11:    end if
12:  end for
13: end for
这是常用的一种算法,它首先是找出最短的两个集合,依次查找第一个集合里的元素是否
出现在第二个集合内部;Demaine考虑的Swapping_SvS和上述算法有稍微的不同,即是在每
次比较后,取包含更少元素的集合来与再下一个集合进行比较,这种算法在第一个集合和
第二个集合比较之后第二个集合反而更少的情况下效果更好,但实验表明这种情况并不多
见。

1.2 Small Adaptive
Algorithm 2 Pseudo-code for Small_Adaptive
Small_Adaptive(set, k)
1: while no set is empty do
2:   Sort the sets by increasing number of remaining elements.
3:   Pick an eliminator e = set[0][0] from the smallest set.
4:   elimset ← 1.
5:   repeat
6:     search for e in set[elimset].
7:     increment elimset;
8:   until s = k or e is not found in set[elimset]
9:   if s = k then
10:     add e to answer.
11:   end if
12: end while
这是一种混合算法,结合了Svs和Adaptive的优点。它的特点是对每个集合按未被检查过的
元素个数进行排序,从中挑出未被检查过的元素个数最少和次少的集合进行比较,找到公
有的一个元素后,再在其他集合中进行查找,有某个集合查找完毕即结束。

1.3 Sequential and Random Sequential
Algorithm 3 Pseudo-code for Sequential
Sequential(set, k)
1: Choose an eliminator e = set[0][0], in the set elimset ← 0.
2: Consider the first set, i ← 1.
3: while the eliminator e _= ∞do
4:   search in set[i] for e
5:   if the search found e then
6:     increase the occurrence counter.
7:   if the value of occurrence counter is k then output e end if
8:   end if
9:   if the value of the occurrence counter is k, or e was not found then
    /*若计数到k或者e没有被找到*/
10:     update the eliminator to e ← set[i][succ(e)].
    /*将e赋值为现在集合中下一个值*/
11:   end if
12:   Consider the next set in cyclic order i ← i + 1 mod k.
     /*循环移位地选择新的集合*/
13: end while
Barbay and Kenyon引入的,对不确定复杂度的样本查找比较好,每次在各个集合中的查找
是用快速查找。
RSequential与Sequential的区别是Sequential挑选循环中下一个集合作为下一个搜索集合
,而RSequential则是随机挑选一个集合。

1.4 Baeza-Yates and Baeza-Yates Sorted
Algorithm 4 Pseudo-code for BaezaYates
BaezaYates(set, k)
1: Sort the sets by size (|set[0]| ≤ |set[1]| ≤ . . . ≤ |set[k]|).
2: Let the smallest set set[0] be the candidate answer set.
3: for each set set[i], i = 1. . . k do
4:   candidate ← BYintersect(candidate, set[i], 0, |candidate| ? 1, 0,|set[i]| ? 1)
5:   sort the candidate set.
6: end for

BYintersect(setA, setB, minA, maxA, minB, maxB)
1: if setA or setB are empty then return   endif.
2: Let m = (minA + maxA)/2 and let medianA be the element at setA[m].
3: Search for medianA in setB.
4: if medianA was found then
5:   add medianA to result.
6: end if
7: Let r be the insertion rank of medianA in setB.
8: Solve the intersection recursively on both sides of r and m in each set.
Baeza-Yates(巴伊赞-耶茨,他著有著名书籍《现代信息检索》)提出的方法,主要是利用
了分治思想,取出较短集合中的中间元素,在较长集合中搜索该元素,于是将较短和较长
集合均分为了2部分,在这2各部分中再递归搜索下去即可。注意:这样每次搜索完2个集合
,输出的交集是无序的,因此需要将此交集再排序后,再和第3个集合进行比较搜索。
Baeza-Yates Sorted是对上述方法进行了改进,即在保存公有的元素时是按序保存的,保
存整段中间元素时必须保证前半段搜索到的中部元素已经被保存了,这样处理可以节省最
后将搜索到的交集再次排序的时间,但代价是中间处理的时候需要增加处理的细节。

1.5 总结
上面所有的算法最坏情况下都有线性的时间复杂度。BaezaYates、So_BaezaYates, Small
_Adaptive和SvS在集合的大小不同时有显著优势,并且Small_Adaptive是惟一一个在算法
去除集合中元素导致集合的大小动态变化时,有更大的优势;Sequential and RSequenti
al 对集合大小不敏感。
时间: 2024-08-02 01:46:23

倒排列表求交集算法汇总的相关文章

倒排列表求交集算法 包括baeza yates的交集算法

#ifndef __INTERSECT_HPP__ #define __INTERSECT_HPP__ #include "probe.hpp" namespace themas { /* * like stl's set_intersect */ template<class InputIterator, class OutputIterator> void linear_intersect(InputIterator begin1, InputIterator end1

这就是搜索引擎--读书笔记七--倒排列表压缩算法

倒排列表压缩算法 目前有很多种倒排列表算法可以选择,但是我们对评判算法的优劣需要定量指标.一般会考虑3个指标:压缩率.压缩速度以及解压速度. 压缩率是指数据压缩前和压缩后大小的比例,显然,压缩率越高,就越节约磁盘空间.而压缩速度是压缩单位量的数据所花的时间,但是压缩往往是在建立索引过程中进行的,这是一个后台进行的过程,不需要及时响应用户查询,即使速度慢一些也没有关系.所以普遍来说,压缩速度不是一个重要指标. 那么我们来看看解压速度.顾名思义,解压就是将压缩数据恢复到原始数据.这是一个实时响应过程

搜索引擎基础概念(3)—— 倒排列表

倒排列表 倒排列表用来记录有哪些文档包含了某个单词.一般在文档集合里会有很多文档包含某个单词,每个文档 会记录文档编号(DocID),单词在这个文档中出现的次数(TF)及单词在文档中哪些位置出现过等信息,这样与一个文档相关的信息被称做倒排索引项(Posting),包含这个单词的一 系列倒排索引项形成了列表结构,这就是某个单词对应的倒排列表.图 1-1 是倒排列表的示意图,在文档集合中出现过的所有单词及其对应的倒排列表组成了倒排索引. 图1-1 倒排列表示意图 在实际的搜索引擎系统中,并不存储倒排

GPU方法做倒排压缩和交集计算

之前一直想读这篇,今天读了一下,颇有收获: 1.对文档按相似term聚类之后,delta较小,可以提高压缩率(similarity graph) 1.GPU一般可以有几百个核,有shared memory和global memory,shared memory相当于寄存器的速度,global memory速度较慢 2.有序数组上的搜索算法除了binary search还有interplation search(插值搜索),平均复杂度是O(loglogn),但memory access是binar

倒排列表压缩算法汇总——分区Elias-Fano编码貌似是最牛叉的啊!

来看看倒排索引压缩.压缩是拿CPU换IO的最重要手段之一,不论索引是放在硬盘还是内存中.索引压缩的算法有几十种,跟文本压缩不同,索引压缩算法不仅仅需要考虑压缩率,更要考虑压缩和解压性能,否则会解压太慢而起不到CPU换IO的作用.早期的索引设计里,在尝试了几十种编码之后,基本都确定性采用差分编码+可变长字节编码.差分的目的在于让索引的文档ID尽可能小,因为压缩小的整数总是比大整数更有效.在索引构建算法中,有一类工作叫做"文档重排",目的就是通过对文档索引顺序的重新排列,使得索引posti

ES里设置索引中倒排列表仅仅存文档ID

index_options The index_options parameter controls what information is added to the inverted index, for search and highlighting purposes. It accepts the following settings: docs Only the doc number is indexed. Can answer the question Does this term e

Poseidon 系统是一个日志搜索平台——认证看链接ppt,本质是索引的倒排列表和原始日志数据都存在HDFS,而文档和倒排的元数据都在NOSQL里,同时针对单个filed都使用了独立索引,使用MR来索引和搜索

Poseidon 系统是一个日志搜索平台,可以在百万亿条.100PB 大小的日志数据中快速分析和检索.360 公司是一个安全公司,在追踪 APT(高级持续威胁)事件,经常需要在海量的历史日志数据中检索某些信息,例如某个恶意样本在某个时间段内的活动情况.在 Poseidon 系统出现之前,都是写 Map/Reduce 计算任务在 Hadoop 集群中做计算,一次任务所需的计算时间从数小时到数天不等,大大制约了 APT 事件的追踪效率.Poseidon 系统就是解决这个需求,能在数百万亿条规模的数据

信息检索导论学习笔记 -- 第二章:词项词典及倒排记录表

2.1.1 文档分析及编码转换:      文档处理第一步,是将文件或web服务器上的一系列二进制字节序列转换为字符序列.      在实际中,首先要判断出文档的编码方式(机器学习分类.启发式等方法),确定文档的类型(word?zip?)然后将字节序列转换成字符序列. 2.1.2 文档单位(document unit)的选择:      常见的,将某个目录下的每个文件都看成一个文档.      但有些情况并非如此,比如我们可能希望将邮件.附件(附件中的文件)分开.      对于一个长文档而言,

牛客网NowCoder 2018年全国多校算法寒假训练营练习比赛(第四场)A.石油采集(dfs) B.道路建设(最小生成树prim) C.求交集(暴力) F.Call to your teacher(迪杰斯特拉乱用) H.老子的全排列呢(dfs)

菜哭了... A.石油采集 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 链接:https://www.nowcoder.com/acm/contest/76/A来源:牛客网 题目描述 随着海上运输石油泄漏的问题,一个新的有利可图的行业正在诞生,那就是撇油行业.如今,在墨西哥湾漂浮的大量石油,吸引了许多商人的目光.这些商人们有一种特殊的飞机,可以一瓢略过整个海面20米乘10米这么大的长方形.(上下相