假设我有一组S
,其元素为N元组,即(xi1, xi2, ... , xin)
。
给定元素x = (x1, x2, ..., xn)
和y = (y1, y2, ..., yn)
,matches(x,y,M)
当且仅当M
和x
的至少y
个元素相等时。< / p>
现在给定一组S
,matchSet(x,S,M)
会返回S
为matches(x,y,M)
的元素。
假设S
的数据matchSet
平均只匹配0或1个元素(偶尔会匹配更多,但很少),是否有办法编写matchSet
和S
结构,以便它的运行时间与S的大小呈亚线性,并且它的空间是合理的(即不在2^L
上放S
索引,其中L
是元素的长度)?
或者,快速运行matchManySet(S', S, M)
也是可以接受的,对于matchSet
的每个元素运行S'
,也只需要比{{1}的时间少得多的时间} {} S
的大小。
答案 0 :(得分:0)
这个任务对我来说听起来很有趣。我有一些想法,不幸的是有人应该测试它(我没有时间实现它)。用于存储这些元组的数据结构提醒我后缀树。 (有关更多信息,请参阅https://en.wikipedia.org/wiki/Suffix_tree)。
例如,您可以将set Sx存储在一个后缀树中,将Sy存储在其他后缀树中。在这种情况下,您的任务归结为创建结果后缀树,通过合并给定的两个树(当然,在合并期间,您应该使用特定谓词,如元组是否有K
出现)。总体算法复杂度为O(N + M)
,其中N
,M
是输入后缀树的大小。
我希望这样的想法会对你有所帮助。
编辑:这个想法有很强的限制 - 元组的词典顺序