成对和的无FFT


14

假设我们给了n不同的整数,使得a1,a2,,an0aikn对于某一常数k>0,和对于所有i

我们对找到所有可能的成对和的计数感兴趣。(允许i = j)。Sij=ai+aji=j

一种算法是构造多项式ķ Ñ,并使用傅里叶变换方法和在所得的多项式读出与它们的系数的权力计算其平方。这是O n log n 时间算法。P(x)=j=1nxajknO(nlogn)

我有两个问题:

  • 是否有不使用FFT 的算法?O(nlogn)

  • 是否知道更好的算法(即)?(允许FFT)。o(nlogn)


为什么不使用FFT很重要?听起来您已经对问题有了很好的解决方案。不使用FFT的要求从何而来?对我来说,这听起来像是强加于人的不自然要求。
DW

@DW:因为那样就不会有问题要问?:-)我只是想知道是否有其他方法。
Aryabhata

好的,我知道了!我承认我也很好奇。:-)谢谢您提出有趣的问题。
DW

@DW:不客气:-)
Aryabhata)

Answers:


8

看来此问题等效于整数/多项式平方:

1. 已知多项式乘法相当于整数乘法

2.显然,您已经将问题简化为多项式/整数平方。因此,这个问题最多与平方一样困难。

现在,我将减少整数平方到这个问题:

假设您有一个算法:

F(a)P2(x),where P(x)=aiaxai

该算法本质上是您在问题中要求的算法。因此,如果我有一个魔术算法可以做到这一点,那么我可以创建一个函数,该函数将对整数y进行平方(哦,是的,我确实喜欢mathjax:P):SQUARE(y)y

算法1 平方1。程序 小号ü一种[RËÿ2。一种 一种 从空多项式序列开始3。一世04。wH一世Ë ÿ0 dØ 打破 ÿ 降到基数的多项式 25,一世F ÿ  1个 ŤHËñ 如果lsb ÿ 被设置6。一种一种一世 附加 一世 至 一种 (附加 X一世7Ëñd 一世F8。一世一世+1个9。ÿÿ1个 转移 ÿ 一对一10。Ëñd wH一世Ë11。P2XF一种 通过获得平方多项式 F一种12[RËŤü[Rñ P22 简单地总结多项式13结束程序

Python(使用键盘测试):

#/cs//q/11418/2755

def F(a):
    n = len(a)
    for i in range(n):
        assert a[i] >= 0

    # (r) => coefficient
    # coefficient \cdot x^{r}
    S = {}
    for ai in a:
        for aj in a:
            r = ai + aj

            if r not in S:
                S[r] = 0

            S[r] += 1

    return list(S.items())

def SQUARE(x):
    x = int(x)

    a = []
    i = 0
    while x != 0:
        if x & 1 == 1:
            a += [i]
        x >>= 1
        i += 1

    print 'a:',a
    P2 = F(a)

    print 'P^2:',P2

    s = 0
    for e,c in P2:
        s += (1 << e)*c
    return s

3. 因此,平方最多与这个问题一样困难。

4. 因此,整数平方等效于此问题。(它们各自至多硬如各-其他,由于(231))

Øñ日志ñØñ日志ñ日志日志ñØñ日志ñ2Ø日志ñΩñ日志ñ

Øñ日志ñ

5.现在,您的问题不完全是乘法,而是平方。那么平方容易吗?好吧,这是一个悬而未决的问题(目前暂无):平方运算的运算速度比乘法运算的运算速度还快。如果您能找到比使用乘法更好的算法来解决问题;那么这可能是一个突破。

Øñ日志ñØñ日志ñØñ日志ñØñ日志ñ 因为最好的乘法算法只能达到那种复杂度。

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.