用minkowski整数总和找到证人


16

令和为子集。我们对找到Minkowski和中感兴趣。A AB B{ 0 n } {0,,n}A + B = { a + b | 一个b }  A+B={a+b | aA,bB}

χ X{ 0 ... 2 Ñ } { 0 1 } X χ XX = { 1  如果  X X 0  ,否则χX:{0,,2n}{0,1}如果是的特征函数X

χX(x)={1 if xX0 otherwise

令为和的离散卷积,则且仅当。因此,可以通过FFT通过离散卷积在时间内计算ffχAχAχBχBxA+BxA+Bf(x)>0f(x)>0A+BA+BO(nlogn)O(nlogn)

有时很重要的一点是找出总和为的实际对和 inB 。被称为证人的,如果存在使得。函数被称为证人函数如果瓦特X 是一个证人XaAaAbBbBxxaAaAxxbBbBa+b=xa+b=xw:A+BAw:A+BAw(x)x

是否可以在时间内计算见证函数?O(nlogn)O(nlogn)


3
O n p o l y l o g n O(npolylogn)并不是特别难。
Sariel Har-Peled

2
您可以使用二进制搜索。例如,将AA划分为两个近似相等大小的集合A LA RAL,AR,并计算A L + BAL+BA R + BAR+B;检查那些xx中的哪个;然后递归。这会使您得到类似O n lg 2 n )的信息O(nlg2n)
DW

@DW这只能找到单个x的见证x,但是我们想要A + B中每个元素的见证A+B。(我的措词似乎还不清楚,所以我只更新了问题)
赵超2015年

但是您对O(n polylog n)解决方案感兴趣吗?
Sariel Har-Peled

@ SarielHar-Peled是的,我也对确定性O n p o l y l o g n O(npolylogn)算法感兴趣。
赵超

Answers:


11

在这里,我解释了如何获得O n * p o l y l o g n 随机运行时间。我们需要一系列观察:O(npolylogn)

  1. 证人的值的v是一对数字b × 使得一个+ b = v。设P X = Σ X P X 可以类似地定义。观察到x v的系数在P Ax P Bxv(a,b)A×Ba+b=vPA(x)=iAxiPB(x)xv是值 v的见证人数。PA(x)PB(x)v

  2. 假设v具有单个证人b × ,并考虑多项式Q X = Σ * X 。显然,系数X vQ X * P X 一个,因此,我们现在知道的对一个v - v(a,b)A×BQA(x)=iAixixvQA(x)PB(x)a(a,va) 我们完成了。

  3. 因此,我们完成了只有一个见证人的情况。因此,考虑vk个证人a 1b 1a kb k)的情况。让ķ = LG vk(a1,b1),,(ak,bk)ķ。观察到2ķ-1i(k)=lgkķ2ķ 。接下来,令Rj=AjBj,对于j=1m,对于m=Ologn是随机样本,这样将A的每个元素以概率p=选Ai1/2ķ v的概率2i(k)1k2i(k)Rj=(Aj,Bj)j=1,,mm=O(logn)AAip=1/2i(k)vR j中有一个证人是α = kRj1 p21-p2k-1,因为见证人是不相交的数字对(因为每对数字之和为v)。这是很容易验证α是一个常数01独立的值的ķ。因此,v必须在样本R1...Rm之一中具有单个见证人。这样,如上所述,通过计算与该样本关联的两个多项式,α=(k1)p2(1p2)k1vα(0,1)kvR1,,RmO n log n 时间(每个样本),使用FFT,我们可以在恒定时间内确定此时间。O(nlogn)

  4. 我们快完成了。计算用于分辨率随机样本上述= 1 ... LG Ñ 。对于每个这样的分辨率,计算随机样本和相关的多项式。同样,计算AB的相关多项式。这个预处理天真地需要O n log 3 n ,但是我怀疑稍微小心一点log n因子应该可以删除。i=1,,lgnABO(nlog3n)logn

  5. 算法:对于每个值v,通过查询多项式Q Ax P Bx ,计算出它在恒定时间内有多少个见证人,例如k 。接下来,转到i k 的相关数据结构。然后,它找到将其作为单个见证人的随机样本,并在恒定时间内提取作为该见证人的对。vQA(x)PB(x)i(k)

  6. 奇怪的是,预处理时间为O n log 3 n ,但是查找证人本身的预期时间仅花费O n 时间,因为只要有人找到证人就可以停止搜索。这表明该算法应该是可改进的。特别地,对于i k lg n,生成的多项式非常稀疏,并且应该能够执行更快的FFT。O(nlog3n)O(n)i(k)lgn


12

好的,我一直在等待,因为实际上Sariel应该获得答案,但是我已经厌倦了等待,因此这是我接近线性随机算法的切入点。

  • 通过选择的样品Ñ 1 - ε 指出,= 0 1 ...,就可以得到子问题这样的对数数,从最初的问题每个和具有在子问题中的一个独特地被代表恒定概率(一次抽样会将预期的表示数量减少到接近1)。n(1ϵ)ii=0,1,
  • 通过重复采样过程一次对数次,您可以使所有总和具有高概率的唯一表示形式。
  • 如果你有一个分区成两个子集,然后通过由四个数字相乘,在一个子集将2与数字,并在所述子集中的一个加1的数字,可以从可实现的总和的mod-4值中读取其求和的两个子集中的哪一个。ABAB
  • 通过重复对数次分区过程,使用子问题中值或索引的二进制表示的每个位位置来选择每一步中的分区,您可以唯一地标识每个唯一表示的和的和。

这将使运行时间耗费三个对数因子。可能可以减少。


3
哈哈 ;)。我正在写它,然后去吃午饭……
Sariel Har-Peled

5

这个答案给出了确定的O n p o l y l o g n  算法。O(n polylogn)

看起来Sariel和David的算法可以通过类似于本文方法去随机化。[2]在进行该过程时,我发现有一个更普遍的问题暗示着这个结果。

ķ -reconstruction问题k

有隐藏组小号1... 小号ñ{ 1 ... },我们有两个预言小号ž Ë小号ü 即采取查询集QS1,,Sn{1,,m}SizeSumQ

  1. 小号ž È Q 返回| š 1Q || 小号2Q |... | 小号ÑQ |,每个交叉点的大小。Size(Q)(|S1Q|,|S2Q|,,|SnQ|)
  2. 小号ù 中号Q 返回Σ 小号小号1Q小号Σ 小号小号2Q小号... Σ 小号小号ÑQ小号,在每个交叉点处的元素的总和。Sum(Q)(sS1Qs,sS2Qs,,sSnQs)

The kk-reconstruction problem asks one to find nn subsets S1,,Sn such that SiSi and |Si|=min(k,|Si|) for all i.

Let f be the running time of calling the oracles, and assume f=Ω(m+n), then one can find the sets in deterministic O(fklogn polylog(m)) time. [1]

Now we can reduce the finding witness problem to 1-reconstruction problem. Here S1,,S2n{1,,2n} where Si={a|a+b=i,aA,bB}.

Define the polynomials χQ(x)=iQxi, IQ(x)=iQixi

The coefficient for xi in χQχB(x) is |SiQ| and in IQχB(x) is sSiQs. Hence the oracles take O(nlogn) time per call.

This gives us an O(n polylog(n)) time deterministic algorithm.

[1] Yonatan Aumann, Moshe Lewenstein, Noa Lewenstein, Dekel Tsur: Finding witnesses by peeling. ACM Transactions on Algorithms 7(2): 24 (2011)

[2] Noga Alon, Moni Naor: Derandomization, witnesses for Boolean matrix multiplication and construction of perfect hash functions. Algorithmica 16(4-5) (1996)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.