针对一般转门流中的转门重者问题,提出了一种新的算法EXPANDERSKETCH,该算法能找到近似的顶点<我>k我>宇宙中的物品<我>n我>用同样的渐近<我>O我>(<我>k我>日志<我>n我>)单词的记忆和<我>O我>(日志<我>n我>)将时间更新为COUNTMIN和COUNTSKETCH,但只要求<我>O我>(<我>k聚我>(日志<我>n我>)时间来回答查询,而不是<我>O我>(<我>n我>日志<我>n我>)的时间。“近似”的概念是一样的<我>l我><年代ub>2年代ub>它给出了已知的下界,是一个人在次线性记忆中能够实现的最强保证。
我们的主要创新是有效地将重量级人物问题简化为聚类问题,其中每个重量级人物都被编码为图中某种形式的噪声谱聚类,目标是识别每个聚类。因为必须找到每个重量级的攻击者,所以正确性要求找到每个集群。因此,我们需要一种“保持聚类”的聚类算法,在寻找每一个聚类的同时,将图划分成小块。为此,我们首先应用标准谱图划分,然后使用一些新的局部搜索技术对得到的切面进行修改,以确保原始聚类得到充分保留。我们的聚类算法可能会在重量级和流算法之外引起更广泛的兴趣。
发现“频繁的”或“顶部的”<我>k我>数据集中的项是数据挖掘中的一个常见任务。在数据流文献中,这个问题通常称为<我>重量级的问题我>,即:一个频率向量<我>x我>R<年代up>n我>年代up>被初始化为零向量,然后我们处理一个更新流更新
(<我>我我>,)为R,每次这样的更新都会导致更改<我>x<年代ub>我年代ub>x<年代ub>我年代ub>+。目标是确定坐标<我>x我>具有较大的权重(绝对值),同时使用有限的内存。例如,<我>我我>可以索引不同的网络冲浪者,和<我>x<年代ub>我年代ub>可以表示人的次数吗<我>我我>点击特定网站上的网络广告;Metwally et al。<年代up>12给出了一个在网络广告中寻找频繁点击者的应用。或者在网络,<我>n我>= 2<年代up>32年代up>may表示IPv4中源IP地址的数量,而<我>x<年代ub>我年代ub>可能是发送的数据包的数量<我>我我>在一些链接。因此,您可能希望在网络流量监视应用程序中找到具有高链路利用率的源。在这两种情况下,每次更新= 1。消极的情况也会出现;例如,你可能想要注意<我>变化我>在趋势。想象一下<我>n我>是某些词汇表中的单词数,搜索引擎见证了查询流。人们可以通过识别在两个不同时间段内被搜索频率发生巨大变化的词汇来发现趋势变化<我>T我><年代ub>1年代ub>而且<我>T我><年代ub>2年代ub>.如果一个人处理所有的单词<我>T我><年代ub>1年代ub>As = +1更新和那些在<我>T我><年代ub>2年代ub>As = -1更新,则<我>x<年代ub>我年代ub>是否等于单词查询频率的差异<我>我我>跨越这两个时间段。因此,找到顶部<我>k我>重指数<我>x我>可以找到新的流行词(或曾经流行但不再流行的词)。
回到技术定义,我们定义项目权重<我>w<年代ub>我年代ub>:=<我>f我>(<我>x<年代ub>我年代ub>)基于加权函数<我>f我>:(-,)[0,)。然后我们定义<我>W我>等于所有权重的和<我米g src="https://dl.acm.org/cms/attachment/0123d415-39e4-462e-bcb9-0ad3b1f134b9/cacm6208_a.gif" border="0" hspace="2" alt="cacm6208_a.gif">.给出一些参数<我>k我>,一个<我>k-heavy打击我>在这个权重函数下是一个项目<我>我我>这样<我>w<年代ub>我年代ub>><我>W/k。我>很明显<我>k我>的数量有上限吗<我>k我>-重量级人物,因此找到所有这些人的算法就是在求解某种形式的近似top-<我>k我>问题(这是近似的,因为我们只需要找到top-<我>k我>相对于考虑的加权函数,足够重的项目)。我们将学习一个更难的问题,叫做<我>尾部重型撞击者的问题我>,我们说一个项目是a<我>k-tail显要人物我>如果<我米g src="https://dl.acm.org/cms/attachment/f84db6d7-7098-4cbb-af18-bd25372f66fa/cacm6208_b.gif" border="0" hspace="2" alt="cacm6208_b.gif">.在这里<我米g src="https://dl.acm.org/cms/attachment/d71a5eec-4abd-4357-afdc-07a88c068106/cacm6208_c.gif" border="0" hspace="2" alt="cacm6208_c.gif">是除顶部以外的所有权重的总和吗<我>k。我>注意,尾部重击者的数量必须小于2<我>k我>(即实际的顶部<我>k我>,加上小于<我>k我>在尾部的项目可以满足<我米g src="https://dl.acm.org/cms/attachment/f84db6d7-7098-4cbb-af18-bd25372f66fa/cacm6208_b.gif" border="0" hspace="2" alt="cacm6208_b.gif">.算法的一个具体目标是在查询时输出一个列表,这也是本文所要求的<我>l我>{1,…,<我>n我>这样(1)<我>l我>包含每一个<我>k我>-尾部重型撞击者,和(2)[<我>l我>] =<我>O我>(<我>k我>).这里讨论的所有算法都可以稍加修改,以保证每一项都在<我>l我>至少是2<我>k我>-尾重击器,使误报在<我>l我>肯定还是有点重。
最早的文献关于重量级人物的问题集中在<我>我n年代ertion-only流我>,这样的话更新
(<我>我我>,)对于每次更新都有= 1(与<我>一般十字转门模型我>,它允许任意的R)。这对应于看到一个索引流<我>我我><年代ub>1年代ub>我我><年代ub>2年代ub>...<我>我<年代ub>米年代ub>想要找到那些经常出现的项目。在纯插入流中,可能研究得最充分的问题形式是<我>f我>(<我>x<年代ub>我年代ub>) =<我>x<年代ub>我年代ub>.一个简单的解决方案是采样:如果流是<我>我我><年代ub>1年代ub>我我><年代ub>2年代ub>...<我>我<年代ub>米年代ub>,那么样本<我>t我>均匀随机指标<我>j我><年代ub>1年代ub>、……<我>j<年代ub>t年代ub>来创建一个新的采样流<我>我我><年代ub>j我>1年代ub>...<我>我<年代ub>jt年代ub>.基于Chernoff-Hoeffding界限的直接分析表明,如果选择<我>t我>= (<我>k我><年代up>2年代up>日志<我>k我>),那么就有很大的概率可以通过返回顶部来解决(非尾部版本)问题<我>O我>(<我>k我>)采样流中的频率项。1982年的一个更聪明的算法叫做频繁算法<年代up>13虽然解决了仅用同一恒等权函数的问题<我>O我>(<我>k我>)字的记忆,这是最佳的。人们可能会问:那么考虑其他权重函数的动机是什么呢<我>f我>?
我们现在观察到:考虑权重函数<我>f我>(<我>x<年代ub>我年代ub>) = |<我>x<年代ub>我年代ub>|<年代up>p我>年代up>对于一些固定<我>p我>>1。这是通常的术语<我>f我>将产生的问题称为<我>l<年代ub>p年代ub>沉重的打击我>(或<我>l<年代ub>p年代ub>当人们考虑尾巴版本时,尾巴是重量级人物)。如果一个人假设项目的频率是不同的,或者简单地假设几个项目是相同的<我>k我>最大的,没有一个被认为是在顶部<我>k我>,然后是<我>p我>顶部<我>k我>项目都是保证<我>k我>多边形沉重的打者。这意味着对于大型<我>p我>一个正确的尾部重击算法需要不遗漏顶部的任何项目<我>k我>,这是一个更严格的要求,因此更难解决的问题。为了看到这一点,假设<我>k我>项目有频率<我>x<年代ub>我年代ub>和(<我>k我>+ 1)st有频率<我>x<年代ub>我年代ub><<我>x<年代ub>我年代ub>.
然后我们想要这个
这种不平等确实存在<我>p我>;具体来说,这已经足够了<我>p我>>日志((<我>n我>-<我>k我>)/<我>k我>)/日志(<我>x我><年代ub>我我>年代ub>/<我>x我><年代ub>我我>年代ub>).那么人们可能会期望,由于更大<我>p我>强迫一个“更精确的”解决方案到顶部-<我>k我>问题,解决<我>l<年代ub>p年代ub>尾部重型撞击者应该更硬<我>p我>生长。这实际上是事实:任何解决方案<我>l<年代ub>p年代ub>重量级人物(即使是非尾版本)需要(<我>n我><年代up>1 - 2 /<我>p我>年代up>)位的内存。<年代up>2更进一步地,通过形式约简,我们还知道解更大<我>p是我>严格意义上的困难,<年代up>9在这<我>p我>><我>问我>一个解决方案<我>l<年代ub>p年代ub>在太空中跟踪重型撞击者<我>年代我>的解决方案<我>l<年代ub>问年代ub>在太空中<我>O我>(<我>年代我>),直至更改参数<我>k我>最多是两倍。根据这两个结果,对于尾部重犯破案来说<我>p我>= 2是在使用次多项式的内存时所能期望的最好结果<我>n。我>这个案子的解决方案<我>p我>= 2首先由counsketch给出,它使用<我>O我>(<我>k我>日志<我>n我>)单词的记忆。最近BPTree只被使用<我>O我>(<我>k我>日志<我>k我>)记忆的单词,<年代up>3.改进前面的CountSieve数据结构,使用<我>O我>(<我>k我>日志<我>k我>日志记录<我>n我>)字。<年代up>4
到目前为止,我们已经描述了以前的结果在插入只模型,现在我们回到旋转门模型。当一个人并不一定想要顶端时,同时考虑积极和消极是很重要的<我>k我>项目在单个流中,但可能是顶部<我>k我>项目的频率<我>改变我>跨越两个不同的流(例如,两个时间窗口)。例如,我们可能有跨越两个时间窗口向搜索引擎发送的两个查询词流,并想知道哪些词的频率变化最大。如果将第一个窗口中的流项解释为= +1个更新,而将第二个窗口中的流项解释为= -1个更新,则<我>x<年代ub>我年代ub>对于任何一个词<我>我我>将是穿过两个窗口的频率之间的差值,所以我们现在试图解决一个近似的顶-<我>k我>这个矢量的频率差的问题。
当一个人从仅插入模型转移到旋转门模型时,重者问题的复杂性会发生巨大变化。例如,很明显,第一个提到的对流进行采样的算法不再有效了(考虑这个例子中有效的流更新
(1 + 1)<我>N我>次之后,更新
(1,1)<我>N我>时间大<我>N我>,紧随其后的是更新
(2, 1);只有2个是重要的,但采样算法可能不会注意到)。结果表明,频繁、BPTree和CountSieve数据结构也没有可以在旋转门模型中操作的版本;实际上是Jowhari等人研究的下界。<年代up>9表明任何解<我>l<年代ub>p年代ub>沉重的打击了<我>p我>1.旋转门模型要求(<我>k我>日志<我>n我>)个字的内存,这比这三种数据结构所需要的都要多。然而,即使在旋转门模型中,COUNTSKETCH也能正确地发挥作用,并且由于Jowhari等人的工作的下界,COUNTSKETCH在该模型中是渐近内存最优的。<年代up>9另一种流行的转弯梯模型算法,为了简单<我>l我><年代ub>1年代ub>尾部重兵的问题,是COUNTMIN的草图,也用<我>O我>(<我>k我>日志<我>n我>)单词的记忆。COUNTMIN草图虽然有所谓的优势<我>严格的我>旋转门的模式,当我们承诺,随时在流<我>x<年代ub>我年代ub>0为所有<我>我我>,其空间复杂度中出现的常数比COUNTSKETCH的小。
考虑到在旋转门模型中,大人物的空间复杂性问题已经解决到一个恒定的因素,那么还有什么改进的空间呢?事实上,一个数据结构的质量不仅仅是沿着空间复杂度的轴来衡量的,还可以通过更新时间、查询时间和失败概率来衡量(到目前为止提到的所有算法,即使是在仅插入模型中,但例外频繁的
,是随机的,错误回答查询的失败概率是有限的)。使用<我>k我>日志<我>n我>COUNTMIN素描和COUNTSKETCH各自拥有的记忆单词<我>O我>(日志<我>n我>)更新时间和失败概率1/<我>聚我>(<我>n我>),它们都是最著名的,但它们的查询时间为(<我>n我>日志<我>n我>).也就是说,即使最终输出列表<我>l我>只有大小<我>O我>(<我>k我>),构建它的时间与所绘制物品的宇宙大小有点超线性。为<我>p我>=1,只有在严格的旋转门模型中,这种情况才会被Cormode和Muthukrishnan的作品中所示的所谓“二元技巧”所弥补<年代up>7以及Cormode和Hadjieleftheriou的作品中所示的“分层计数素描”,<年代up>6每个都可以权衡空间和更新时间,以提高查询时间;看到图1为详细的界限。但这些解决方案都不能同时达到最佳效果,即(1)在一般的旋转门模型中工作,(2)实现<我>l我><年代ub>2年代ub>(3)实现<我>O我>(<我>k我>日志<我>n我>)空间和<我>O我>(日志<我>n我>)的更新时间,(4)实现<我>k聚我>(日志<我>n我>)的查询时间。也就是说,在EXPANDERSKETCH之前,没有人能够做到这一点。
<我米g src="https://dl.acm.org/images/bullet.gif" vspace="2" alt="*">1.1.我们的主要贡献
我们给出了一般旋转门的第一个数据结构EXPANDERSKETCH<我>l我><年代ub>2年代ub>尾翼重型撞击者使用最优<我>O我>(<我>k我>日志<我>n我>)字的记忆与1/<我>聚我>(<我>n我>)故障概率,快速<我>O我>(日志<我>n我>)更新时间,且快<我>k聚我>(日志<我>n我>)查询时间。
我们在这里提供我们的算法EXPANDER-SKETCH的概述。从今以后,为了避免重复,我们常把“尾”去掉;我们今后考虑的所有重量级问题都是尾部版本。我们的第一步是减少武断<我>k我>几个重量级人物的问题<我>k我>是“小”。在这种简化中,我们初始化(待设计的)数据结构<我>D我><年代ub>1年代ub>、……<我>D<年代ub>问年代ub>为<我>k我>——重量级人物的问题<我>问我>=米ax {1, (<我>k我>/日志<我>n我>)},并选择一个哈希函数<我>h我>:【<我>n我>] [<我>问我>].当我们看到更新时(<我>我我>,)在流中,我们只将更新提供给<我>D我><年代ub>h我>(<我>我我>)年代ub>.我们可以证明,经过约简后,whp(即,以1 - 1/<我>聚我>(<我>n我>我们保证每一个<我>k我>沉重的打者<我>我我>在原始流中,现在出现在一些子流中更新一个向量<我>x'我>R<年代up>n我>年代up>,<我>我我>是一个<我>k我>的沉重打击<我>x我>”<我>k我>' =<我>C我>日志<我>n。我>然后你会发现所有的<我>k我>每个子流中的重量级对象然后输出它们的联合作为最终查询结果。对于本概述的其余部分,我们因此将重点放在求解上<我>k我>沉重的打者<我>k我><<我>C我>日志<我>n我>,那就是如何实现之一<我>D<年代ub>j年代ub>,所以最多有<我>O我>(日志<我>n我>沉重的打击。我们的目标是实现失败概率1/<我>聚我>(<我>n我>)与空间<我>O我>(<我>k我>日志<我>n我>),更新时间<我>O我>(日志<我>n我>)和查询时间<我>k聚我>(日志<我>n我>) =<我>聚我>(日志<我>n我>).
有一个算法,分层计数绘图(见图1),这几乎是理想的。它实现了<我>O我>(<我>k我>日志<我>n我>)空间和<我>O我>(日志<我>n我>)更新时间,但查询时间是宇宙大小的多项式,而不是我们想要的多对数。我们的主要思想是将整个宇宙的大小简化为多对数,这样这个解决方案就可以用于快速查询。我们在保持的同时完成了这个减少<我>O我>(日志<我>n我>)更新时间和最佳空间,将我们的重量级问题简化为<我>米我>=(日志<我>n我>/日志日志<我>n我>)独立<我>分区问题我>,我们现在来描述一下。
在分区<我>k我>heavy hitters的问题有一些分区<我>P我>= {<我>年代我><年代ub>1年代ub>、……<我>年代<年代ub>N年代ub>} (<我>n我>,并以神谕的形式呈现<我>O我>:【<我>n我>] [<我>N我>对任何人来说都是如此<我>我我>[<我>n我>],<我>O我>(<我>我我>)给出了<我>j我>[<我>N我>),这样<我>我我><我>年代<年代ub>j年代ub>.接下来的分区将是随机的,与<我>O我><年代ub>j我>年代ub>取决于一些随机的哈希函数。定义一个向量<我>y我>R<年代up>N我>年代up>对于每一个<我>j我>[<我>N我>],<我>y我><年代ub>j我>年代ub>= | |<我>x我><年代ub>年代我><年代ub>j我>年代ub>||<年代ub>2年代ub>在哪里<我>x<年代ub>年代年代ub>是投影<我>x我>到一个子集<我>年代我>的坐标。我们的目标是解决<我>一个我>重击者问题开始<我>y我>以流媒体更新为准<我>x我>:我们应该输出一个列表<我>l我>[<我>N我>]、[<我>l我>] =<我>O我>(<我>k我>),包含所有的<我>k我>沉重的打者<我>y我>.我们期望的失败概率是1/<我>聚我>(<我>N我>).
在这一点上,我们指出<我>l我><年代ub>1年代ub>版本的分区重者在严格的旋转门模型是简单的解决(和<我>l我><年代ub>1年代ub>严格的旋转门,我们的算法已经提供了改进,在以前的工作,因此深入)。特别是,可以简单地使用标准的严格旋转门<我>l我><年代ub>1年代ub>重量级人物算法<我>N我>-维向量,平移更新
(<我>我我>,)更新
(<我>O我>(<我>我我>),)。这实际上处理了<我>y<年代ub>j年代ub>作为<年代ub>我:啊,(我)= j我>年代ub>x<年代ub>我年代ub>即||<我>x我><年代ub>O我>1(<我>j我>)年代ub>||<年代ub>1年代ub>在严格的旋转门流的情况下。有关<我>l我><年代ub>2年代ub>在一般的转门版模型中,我们指的是我们作品的完整版。这里可以充分说明的是,hierarchy countsitch甚至可以修改以解决分区的重量级人物问题,具有相同的空间和时间复杂性图1(但<我>n我>的全部替换为<我>N我>的)。
现在,我们将解释如何使用分区重器。我们采用解释一个简单但有缺陷的解决方案的教学方法,然后迭代地改进以修复缺陷,直到我们达到一个有效的解决方案。
取1。回想一下我们的总体计划:减小宇宙大小,以便(分区重量级版本)分层COUNTSKETCH有更快的查询时间。为每个索引<我>我我>[<我>n我>我们可以写<我>我我>在基地<我>b我>(对于一些<我>b我>尚未确定),这样它就有了数字扩张<我>d我><年代ub>米我>1年代ub>d我><年代ub>米我>-2年代ub>...<我>d我><年代ub>0年代ub>与每个<我>d<年代ub>我年代ub>{0…<我>b我>1}。我们的算法实例化<我>米我>分离分区重量级数据结构<我>P我><年代ub>0年代ub>、……<我>P我><年代ub>米我>1年代ub>每个都有<我>N我>=<我>b我>在哪里<我>P<年代ub>j年代ub>有甲骨文<我>O我><年代ub>j我>年代ub>与<我>O我><年代ub>j我>年代ub>(<我>我我>)映射<我>我我>到<我>j我>它底数的第一个数字是<我>b我>扩张(见图2).如果我们选择<我>b我>=<我>聚我>(日志<我>n我>)(我们将这样做),然后我们的查询时间每<我>P<年代ub>j年代ub>,是一个快<我>k我>·<我>b我><年代up>=<我>聚我>(日志<我>n我>)(见图1).假设只有一个重量级选手<我>我我>而且,幸运的是,没有一个<我>P<年代ub>j年代ub>的失败。然后自<我>我我>很重,<我>O我><年代ub>j我>年代ub>(<我>我我>从……的角度来看,……一定很重<我>P<年代ub>j年代ub>为每一个<我>j我>(因为<我>O我><年代ub>j我>年代ub>(<我>我我>)接收来自的所有质量<我>x<年代ub>我年代ub>,加上可能的偶数<我>更多的我>质量来自具有相同指标的<我>j我>底数为-的第1位<我>b我>).恢复<我>我我>那么就很简单了:我们查询每个<我>P<年代ub>j年代ub>获得<我>d<年代ub>j年代ub>,然后我们把这些数字连起来<我>d<年代ub>j年代ub>获得<我>我。我>
当然有两个主要问题:首先,每个问题<我>P<年代ub>j年代ub>实际上是输出一个列表<我>l<年代ub>j年代ub>哪个可以有(log<我>n我>)“重数字”,而不仅仅是1,所以不清楚哪个数字连接哪个不同的数字<我>j。我>第二个问题是<我>P<年代ub>j年代ub>的是随机数据结构,失败的概率为1/<我>聚我>(<我>b我>) =1/<我>聚我>(日志<我>n我>),所以即使我们知道哪个数字与哪个数字相连,其中的一些数字可能是错误的。
取2。我们从上一集结束的地方继续。第二个问题很容易解决,即有些数字可能是错误的。具体地说,为<我>b我>=<我>聚我>(日志<我>n我>)我们有<我>米我>=日志<年代ub>b我>年代ub>n我>=<我>O我>(日志<我>n我>/日志日志<我>n我>).对于这个设定<我>b、m我>,用每个的失效概率<我>P<年代ub>j年代ub>是1 /<我>聚我>(<我>b我>),一个简单的计算表明WHP 1 1/<我>聚我>(<我>n我>的一个小常数分数<我>P<年代ub>j年代ub>失败。因此,例如,最多1%的数字<我>d<年代ub>j年代ub>是错误的。这很容易解决:我们不写<我>我我>在基地<我>b我>而是写成enc(<我>我我>在基地<我>b我>,enc (<我>我我>的编码<我>我我>(像原木一样处理<我>n我>位串)<我>T我>=<我>O我>(日志<我>n我>)位,通过具有恒定速率的纠错码,该纠错码可以纠正(1)-部分的错误。这种编码以线性时间编解码的方式存在。<年代up>16那么即使我们恢复enc(<我>我我>),只有1%的数字是错误的,我们可以解码恢复<我>我我>完全正确。
现在我们回到第一个问题,这是主要的复杂性:通常,可能有多个重量级的参与者(可能多达(log<我>n我>))。因此,即使我们一厢情愿,假装每<我>P<年代ub>j年代ub>成功了,而且每<我>l<年代ub>j年代ub>包含完全<我>j我>除了重量级人物编码的数字以外,还不清楚如何执行拼接。例如,如果有两个重量级的编码索引为1100和0110的二进制代码,然后我们以4为基数(作为30和12)写入它们,假设<我>P<年代ub>j年代ub>正确地返回<我>l我><年代ub>1年代ub>={3,1}和<我>l我><年代ub>2年代ub>={0, 2}。那么我们如何知道哪个数字与哪个数字相匹配进行连接呢?也就是说,重量级的编码是30和12,还是32和10?用蛮力尝试所有可能性太慢了,因为<我>米我>=(日志<我>n我>/日志日志<我>n我>)和每个|<我>l<年代ub>j年代ub>|可以大到(log<我>n我>),收益率(<我>C我>日志<我>n我>)<年代up>米我>年代up>=<我>聚我>(<我>n我>)的可能性。事实上,这个问题与……的问题相当相关<我>l是t-recoverable代码我>但是,由于目前还不知道有明确的代码可以保证我们所期望的效率,我们就转向了另一个方向。
以帮助我们知道哪些块要连接哪些块穿过<我>l<年代ub>j年代ub>,我们现在描述的尝试(也不是很有效)如下。定义<我>米我>成对独立的哈希函数<我>h我><年代ub>1年代ub>、……<我>h<年代ub>米年代ub>:【<我>n我>] [<我>聚我>(日志<我>n我>)]。因为有<我>O我>(日志<我>n我>)重量级人物,任何给定的<我>h<年代ub>j年代ub>完美哈希,有相当大的概率。现在不是根据<我>O我><年代ub>j我>年代ub>(<我>我我>) =enc (<我>我我>)<年代ub>j我>年代ub>(<我>j我>enc(<我>我我>),我们想象设定<我>O我><年代ub>j我>年代ub>(<我>我我>) =<我>j<年代ub>j年代ub>(<我>我我>)美元enc (<我>我我>)<年代ub>j我>年代ub>$<我>h我><年代ub>j我>+1年代ub>(<我>我我>)其中表示连接。定义一个索引<我>j我>[<我>米我>)是<我>好我>如果()<我>P<年代ub>j年代ub>成功,(b)<我>h<年代ub>j年代ub>完美哈希所有重量级对象<我>我我>[<我>n我>)和(c)为每个重量级选手<我>我我>,总<我>l我><年代ub>2年代ub>重量从非重量级选手哈希到<我>h<年代ub>j年代ub>(<我>我我>)是<我米g src="https://dl.acm.org/cms/attachment/bc574833-b50f-4210-98b1-1fb9ddc04176/cacm6208_d.gif" border="0" hspace="2" alt="cacm6208_d.gif">.一个简单的论证表明whp是<我>j我>[<我>米我>都很好,可以取任意小的正常数。现在让我们做一些一厢情愿的想法:如果<我>所有j我>[<我>米我>]是好的,而且没有非重元素出现在<我>l<年代ub>j年代ub>用同样的<我>h<年代ub>j年代ub>但是不同的<我>h我><年代ub>j我>+1年代ub>评价作为一个实际的重量级人物,那么指标就在<我>l<年代ub>j年代ub>告诉我们该在哪个块里连接<我>l我><年代ub>j我>+1年代ub>,所以我们可以连接,解码,然后完成。不幸的是<我>j我>[<我>米我>,这就阻碍了这个方案的实施(参见图3).事实上,为了成功地执行查询,对于每个重量级人物,我们必须正确地识别出对应于该重量级人物的路径的一个大型连接顶点组件,该顶点组件将对应于包含编码的很大一部分数字,这将允许解码。不幸的是,路径在保留大的连接组件子图时并不健壮<我>O我>(1)坏的水平。
把3。上述考虑激发了我们的最终方案,该方案使用了吉尔伯特等人首次提出的基于扩展器的思想。<年代up>8在“为所有人”的背景下<我>l我><年代ub>1年代ub>/<我>l我><年代ub>1年代ub>稀疏恢复是压缩感知中的一个难题。尽管我们下一步的确切动机与吉尔伯特等人的研究略有不同,<年代up>8我们的查询算法和我们对图的“鲁棒性”的定义将是完全不同的,使用扩展器图连接块的想法与该工作中的一个成分非常相似。其想法是将最后一段中的路径替换为一个图,该图对少量的边缘插入和删除都具有鲁棒性,但仍然允许在这种情况下识别大型连接组件。展开器图将允许我们完成这一任务。对我们来说,“鲁棒”意味着在我们算法的随机性之上,每个损坏的扩展器仍然是一个谱簇(稍后定义)。因为,<年代up>8鲁棒性意味着每个损坏的扩展器仍然包含一个诱导的小直径子图(实际上是一个扩展器),在小但不变的顶点部分上,这允许它们基于浅的广度优先搜索进行恢复过程。然后,他们将这种宽度优先搜索的输出输入到现有列表可恢复代码(即Parvaresh-Vardy代码)的恢复算法中。由于已知的列表可恢复代码的次优性,这种方法将不允许我们获得最优结果。
<我米g src="https://dl.acm.org/images/bullet.gif" vspace="2" alt="*">2.1.一个expander-based方法
让<我>F我>是一个任意的<我>D我>顶点集上的-正则连通图[<我>米我>)对于一些<我>D我>=<我>O我>(1)<我>j我>[<我>米我>),(<我>j我>) [<我>米我>是vertex的邻居集合<我>j。我>我们分区(<我>n我>)根据<我>O我><年代ub>j我>年代ub>(<我>我我>) =z(<我>我我>)<年代ub>j我>年代ub>=<我>h我><年代ub>j我>年代ub>(<我>我我>)美元enc (<我>我我>)<年代ub>j我>年代ub>$<我>h我><年代ub>(j)我><年代ub>1年代ub>…美元<我>h我><年代ub>(j)我><年代ub>D年代ub>(在哪里<我>j我>)<年代ub>k我>年代ub>是<我>k我>th的邻居<我>j我>在<我>F。我>一些这样的<我>z我>,我们说它<我>的名字我>是第一个<我>年代我>=<我>O我>(日志日志<我>n我>)位元组成<我>h<年代ub>j年代ub>串联的一部分。现在,我们可以想象一个图表<我>G我>在分层顶点集上<我>V我>= (<我>米我>x[2]<年代up>年代我>年代up>)与<我>米我>层。如果<我>l<年代ub>j年代ub>重磅查询的输出是否打开<我>P<年代ub>j年代ub>,我们可以查看每个元素<我>z我>的<我>l<年代ub>j年代ub>作为建议<我>D我>要添加的边<我>G我>,其中每一个<我>z我>连接<我>D我>的各个层中的顶点<我>V我>到层中的顶点<我>j我>对应于的名称<我>z。我>我们插入这些边的方法如下。首先,对于每一个<我>j我>[<我>米我>我们实例化a<我>分区点查询结构Q<年代ub>j年代ub>用同样的神谕<我>P<年代ub>j年代ub>;这是一个数据结构,给定任何<我>z我>[<我>N我>,输出低误差估计<我><年代ub>z年代ub>的<我>y<年代ub>z年代ub>失效概率为1/<我>聚我>(<我>N我>).我们修改了级别的定义<我>j我>[<我>米我>早说这话是“好”<我>问<年代ub>j年代ub>还必须成功的查询到每<我>z我><我>l<年代ub>j年代ub>.我们点查询每个分区<我>z我><我>l<年代ub>j年代ub>要获得估算值<我><年代ub>z年代ub>近似<我>y<年代ub>z年代ub>.然后我们将所有<我>z我><我>l<年代ub>j年代ub>按名字,在每一组中我们都删除<我>z我>从<我>l<年代ub>j年代ub>除了最大的那个<我><年代ub>z年代ub>任意破坏关系。这个筛选步骤保证了层中的顶点<我>j我>有惟一的名称,而且,何时<我>j我>是不是所有的顶点都对应着重磅出现在<我>l<年代ub>j年代ub>没有一个会被过滤掉。然后,我们让<我>G我>是由包含最多(<我>D我>/2)<年代ub>j我>年代ub>|<我>l<年代ub>j年代ub>方法所建议的|边<我>z我>在所有的<我>l<年代ub>j年代ub>(我们只在两个端点都建议的情况下才包含一条边)。请注意<我>G我>会有很多孤立的顶点<我>米我>·马克斯<年代ub>j我>年代ub>|<我>l<年代ub>j年代ub>| =<我>O我>(日志<年代up>2年代up>n我>/日志日志<我>n我>)的边被添加,但每个层的顶点数量是2<年代up>年代我>年代up>,这可能是log的一个很大的幂<我>n。我>我们让<我>G我>的非隔离顶点和其名称与重量级攻击者的哈希值相匹配的顶点的并集<我>米我>不同的级别。这样可以确保<我>G我>有<我>O我>(日志<年代up>2年代up>n我>/日志日志<我>n我>)顶点和边。我们称之为<我>G我>的<我>块图。我>
直观的图像是这样的<我>G应该我>是扩展器的多个副本的顶点不相交并集<我>F我>,每个重量级选手一个,加上来自其他非重量级选手的其他垃圾边和顶点<我>l<年代ub>j年代ub>.由于某些糟糕的水平<我>j我>然而,一些膨胀器可能会丢失一小部分的边,而且<我>米我>糟糕的水平可能导致假边将这些扩展器连接到图的其余部分。关键见解如下。让<我>W我>的顶点<我>G我>对应于某个特定的重量级人物,所以在理想情况下<我>W我>会是一个单连通的分量,它的诱导图是<我>F。我>我们能证明的,即使是<我>米我>糟糕的关卡,就是每一个重量级选手的这样的顶点<我>W我>形成了一个<我>O我>()-<我>光谱集群。我>
<我>定义1。我>一个- - - - - -<我>光谱集群我>在无向图中<我>G我>= (<我>VE我>)是一个顶点集<我>W我><我>V我>满足以下两个条件:第一,只有-部分的边缘入射到<我>W我>离开<我>W我>,即|(<我>W我>)|<我>卷我>(<我>W我>),<我>卷我>(<我>W我>)是内部顶点的边度之和<我>W。我>第二,给定任何子集<我>一个我>的<我>W我>,让<我>r我>=<我>卷我>(<我>一个我>)/<我>卷我>(<我>W我>),<我>B我>=<我>W\。我>然后
请注意<我>r我>(1<我>r我>)<我>卷我>(<我>W我>)是人们期望在两者之间看到的边数<我>一个我>而且<我>B我>有<我>W我>是一个具有规定的度分布的随机图。
粗略地说,以上的意思是(a)切割分离<我>W我>从其他地方<我>G我>有<我>O我>()电导(即,它是一个非常稀疏的切割),和(b)任何切割(<我>一个W我>内\)<我>W我>,穿过切口的边数是谱扩展器保证的,减去<我>O我>()?<我>卷我>(<我>W我>).然后,我们的任务简化为在给定的图中找到所有谱簇。我们为每个这样的集群设计了一个方案CUTGRABCLOSE<我>W我>,我们可以找到a (1)<我>O我>())-其体积的百分比,最多<我>O我>()?<我>卷我>(<我>W我>)错误的音量从外部<我>W。我>这足以解码一个足够小的常数,因为这意味着我们找到大多数顶点,这是编码的块,沉重的打击。
对于特殊情况<我>l我><年代ub>1年代ub>在严格的旋转门模型中,我们能够设计一个更简单的查询算法;详情请参阅全文。针对这种特殊情况,本文还设计了一种空间最优算法<我>O我>(日志<我>n我>)更新时间,WHP成功,和<我>预期我>查询时间<我>O我>(<我>k我>日志<我>n我>)(尽管不幸的是,查询时间的变化可能相当大)。
<我米g src="https://dl.acm.org/images/bullet.gif" vspace="2" alt="*">2.2.Cluster-preserving集群
如前所述,谱簇是一个子集<我>W我>图中顶点的<我>G我>= (<我>VE我>例如:(1)|<我>W我>|<我>卷我>(<我>W我>)和(2)任何<我>一个我><我>W我>与<我>卷我>(<我>一个我>)/<我>卷我>(<我>W我>) =<我>r我>、|<我>E我>(<我>一个我>,<我>W\我>)|(<我>r我>(1<我>r我>))<我>卷我>(<我>W我>).第(2)项指穿过内部切口的边数<我>W我>你期望从一个随机图中得到什么<我>卷我>(<我>W我>).我们的目标是,给定<我>G我>,找到一个分区<我>V我>这样每一个谱簇<我>W我>在<我>G我>匹配到的分区的某个集合<我>卷我>(<我>W我>)对称差分。
我们的算法CUTGRABCLOSE有点类似于(Kannan et al.,<年代up>10Section 4),但带有本地搜索功能。这个算法很简单:找到一个低导切割(例如,费德勒切割)来分裂<我>G我>分成两部分,然后对这两部分进行递归。抛开细节不谈,费德勒切割是由契哲不等式保证的,可以找到电导的切割<我米g src="https://dl.acm.org/cms/attachment/04ee6c88-d44d-46d3-85ea-52733a617d6d/cacm6208_e.gif" border="0" hspace="2" alt="cacm6208_e.gif">只要电导的切线在图中最多存在。这种基本递归方法的问题显示在图4(特别是削减(b))。注意,在经过几级递归之后,可以将集群完全分割,这样就永远找不到集群的大部分。
我们的方法如下。像上面一样,我们发现一个低导切割然后在两边递归。然而,在两边递归之前,我们对切口做了一定的“改进”。我们说<我>一个我><我>V我>是<我>关闭我>在<我>G我>如果没有顶点<我>v我><我>G\我>至少有五分之九的邻居<我>一个。我>我们的算法维护了所有递归子调用都是对中的封闭子集的调用<我>G我>如下。假设我们在某个集合上调用CUTGRABCLOSE<我>一个我>我们归纳知道它是封闭的<我>G。我>我们首先试着在内部找到一个低导的切口<我>一个。我>如果我们找不到,我们就终止并任其发展<我>一个我>是划分中的一个集合。否则,如果我们削减<我>一个我>到(<我>年代我>,<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">),然后关闭两者<我>年代我>,<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">通过查找违反闭包的顶点并简单地移动它们。可以看出,如果(<我>年代我>,<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">)切割的电导足够低,那么这些局部动作只能进一步提高电导。现在都<我>年代我>而且<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">是封闭的<我>一个我>(根据传递性引理,这意味着它们是封闭的<我>G我>)。然后我们证明if (1) some集合<我>年代我>是封闭的,且(2)<我>年代我>是否比某些光谱簇的体积大一半多<我>W我>(例如,2/3的分数),那么事实上<我>年代我>包含(1 -<我>O我>())的分数<我>W。我>因此,在关闭两个<我>年代我>,<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">我们有这个<我>年代我>(a)两者几乎都没有<我>W我>, (b)几乎所有的<我>W我>,或(c)约有一半<我>W我>(比如1/3到2/3之间)。为了解决后一种情况,我们然后“抓取”所有顶点<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">有一些(1)-分数,例如1/6,在<我>年代我>简单地把它们都移到<我>年代。我>这样做几次就意味着<我>年代我>有超过2/3的<我>W我>(如果<我>年代我>是在(a)的情况下,那么我们显示它仍然几乎没有<我>W我>).然后再做一轮闭盘动作,就能保证两者都做到<我>年代我>,<我米g src="https://dl.acm.org/cms/attachment/176bd625-4e50-41a9-b276-6f74afe0dac9/cacm6208_f.gif" border="0" hspace="2" alt="cacm6208_f.gif">都是封闭的,每一个都有一个<我>O我>()的分数<我>W我>或(1<我>O我>())的一部分。值得注意的是,我们的算法可以利用<我>任何我>谱切割算法作为一个黑箱而不仅仅是费德勒切割,接下来是我们的抓取和闭合步骤。例如,算法<年代up>14,15在几乎线性的时间内运行,并且(1)报告不<我>我>-电导切存在(在这种情况下我们可以终止),(2)找到a<我>平衡我>切的电导<我米g src="https://dl.acm.org/cms/attachment/04ee6c88-d44d-46d3-85ea-52733a617d6d/cacm6208_e.gif" border="0" hspace="2" alt="cacm6208_e.gif">(两边的体积几乎相等),或者(3)找到一个<我米g src="https://dl.acm.org/cms/attachment/04ee6c88-d44d-46d3-85ea-52733a617d6d/cacm6208_e.gif" border="0" hspace="2" alt="cacm6208_e.gif">-电导切其中每<我>W我><我>G我>与<我>卷我>(<我>W我>) (1/2)<我>卷我>(<我>G我>),<我>我>(<我>W我>)<我>O我>()在切口较小的一侧有超过一半的体积。第(2)项,如果它总是发生,将给出一个分治递归式,为找到所有的聚类提供接近线性的时间。事实证明,第(3)项甚至更好!如果切口的小边有每个簇的一半<我>W我>,然后通过抓取和关闭动作,我们可以确保它仍然很小,几乎拥有所有的<我>W我>我们可以递归取较小的那一边。
结果我们最终完成了聚类,在图的大小上保持了多项式时间的聚类,而图的大小是多项式的<我>聚我>(日志<我>n我>),这允许我们找到<我>k我>带着WHP的大人物<我>O我>(<我>k聚我>(日志<我>n我>)时间。关于该算法的完整描述,读者可参考Larsen等人的文献。<年代up>11
我们感谢Noga Alon为我们指出(Alon和Chung,<年代up>1引理2.3),Piotr Indyk作为参考,<年代up>8李毅回答了几个关于,<年代up>8Mary wooters让我们意识到编码理论中列表恢复问题的表述以及它在压缩感知和群测试之前的工作中的出现,Fan Chung Graham和Olivia Simpson关于图划分算法的有用对话。
1.Alon, N, Chung, f.r.k。线性大小容差网络的显式构造。<我>离散数学。我>72(1988),1519。
2.Bar-Yossef, Z., Jayram, t.s., Kumar, R., Sivakumar, D.数据流和通信复杂性的信息统计方法。<我>j.第一版。系统。科学。我>中国科学(d辑:自然科学版)
3.Braverman, V., Chestnut, S.R., Ivkin, N., Nelson, J., Wang, Z., Woodruff, D.P. BPTree: An<我>我><年代ub>2年代ub>重型打击算法使用恒定内存。在<我>第36届ACM数据库系统原理(PODS)研讨会论文集我>(2017), ACM,芝加哥,IL, 361376。
4.布拉弗曼,V.,栗宝,S.R,伊夫金,N.,伍德拉夫,D.P.。在<我>第48届最高法院会议记录我>(2016), ACM,剑桥,马萨诸塞州。
5.Charikar, M., Chen, K., Farach-Colton, M.在数据流中寻找频繁的项目。<我>定理。第一版。科学。我>3.1,1(2004), 315。
6.科摩德,G., Hadjieleftheriou, M.寻找数据流中的频繁项。<我>PVlDB我>1,2(2008), 15301541。
7.一种改进的数据流摘要:计数分钟草图及其应用。<我>j.算法我>55,1(2005), 5875。
8.吉尔伯特,a.c.,李,Y.,波拉特,E.,施特劳斯,M.J.在接近最佳时间对所有稀疏恢复。在<我>第41届ICALP会议记录我>(2014),施普林格,哥本哈根,丹麦,538550。
9.Jowhari, H., Saglam, M., Tardos, G. Lp采样器的紧边界,在流中寻找重复,以及相关问题。在<我>第30届pod会议记录我>(2011), ACM,雅典,希腊,4958。
10.坎南,R., Vempala, S., Vetta, A.关于聚类:好的,坏的和光谱。<我>j.ACM我>51,3(2004), 497515。
11.Larsen, k.g., Nelson, J., Nguyn, h.l., Thorup, M.通过聚类保持聚类的重量级人物。<我>相关系数我>、abs / 1511.01111(2016)。
12.Metwally, A., Agrawal, D., El Abbadi, A.数据流中频繁元素和top-k元素的高效计算,in<我>第10届国际刑事司法委员会会议记录我>(2005),施普林格,爱丁堡,英国,398412。
13.Misra, J, Gries, D.寻找重复元素。<我>科学。第一版。程序我>2,2(1982), 143152。
14.洛里奇亚,路易斯安那州,萨赫代瓦,南达科他州,维什诺伊,北卡罗莱纳州<我>O我>(<我>米我>)时间谱平衡分选算法。在<我>第44届STOC会议记录我>(2012),11411160。
15.Orecchia, L., Vishnoi, N.K.面向基于sdp的光谱方法:用于图划分和分解的近线性时间算法。在<我>第22届苏打水协会会议记录我>(2011), SIAM,旧金山,加州,532545。
16.线性时间可编解码纠错码。<我>IEEE反式。信息理论我>42,6(1996), 17231731。