我们可以接近线性乘法,加法和比较(整数)吗?


21

根据KW Regan的文章“ Connect the Stars”,他最后提到,找到整数表示以使得加,乘和比较运算可在线性时间内计算仍然是一个开放的问题:

是否存在整数表示形式,以便加法,乘法和比较都可以在线性时间内完成?基本上,是否存在线性时间离散排序的环?

(1)在没有比较的情况下,我们可以接近线性时间乘法和加法吗?在这里,我假设问题的大小可能会有所不同,因此我们可能需要一个允许更改整数大小的数据结构/算法。

(2)对于完整的问题,我们可以假定我们将找到一个最佳方案,用于对整数进行乘法,加法和比较。我们可以将这三个操作中最慢的(最坏的情况)接近线性时间多近?并注意,其他操作的速度有多快?

正式问题陈述

正如EmilJeřábek所提到的,我们想排除一些琐碎的案例,并专注于最坏案例的行为。

因此,我们要求,对于非负整数和∀ ÿ其中0 ≤ X < Ñ和0 ≤ ÿ < Ñ,我们可以找到一个数据结构/算法可以执行加法,乘法,以及与\之间比较X和ÿ在O (n log (n ))时间和O (log 2 (n ))空间中?∀x∀y0≤x<n0≤y<nxyO(nlog⁡(n))O(log2⁡(n))


1
我将提到,可以创建一个在时间上对非负整数执行这些操作的方案,其中n是最大整数的位大小(假设我们提前知道n)。我想知道我们是否可以做得更好,并且与正在计算的当前整数成比例地及时进行。Θ(n)nn
— 马特·格罗夫

5
@TysonWilliams:是的!二进制!
— 杰夫·2012年

2
并非获得所有这些操作的线性时间,而是显示整数,以便所有这些操作的时间均为?O(nlog⁡n)
— EmilJeřábek在2012年

4
实际上,有一个简单的肯定答案:用个填充位表示二进制整数。陈述是否不应该包含某种条件,以使表示形式的长度与二进制表示形式的长度成线性关系?n2
— EmilJeřábek在2012年

5
@EmilJeřábek:我假设他希望任何整数的表示都使用f (n )位,对于某些函数f (n )= Θ (log n )。nf(n)f(n)=Θ(log⁡n)
— 杰夫·杰夫·2012年

Answers:


14

可能不是最佳答案,但这也许是一个有用的起点。如果我们希望表示一个非负整数,则可以将其存储为以2为模的连续质数模的残基集。这种形式的比较可能很困难,但是乘法和加法可以很快完成。前素数的乘积近似为p n#= exp ((1 + o(1 ))n log n )。 因此,要表示整数N,您需要对前n个素数取模的残基,其中n

pn#=exp⁡((1+o(1))nlog⁡n).
Nn。由于我们可以使用对前 n个素数残基求模的残基表示任何 N < p n#,因此我们可以取 n log n ∝ log (N )。加法和乘法可以直接在残基对之间进行。这样的对有 n对,最大素数约为 n log (n )。因此,应该在N<exp⁡((1+o(1))nlog⁡n)N<pn#nnlog⁡n∝log⁡(N)nnlog⁡(n),而通过Schonhage-Strassen进行的乘法应在 O (n log log (N )log log log log (N )log log log (N ))中。由于 Ñ 登录Ñ α 登录Ñ,然后粗略近似给出 Ñ在 Ö (登录ñ /登录登录Ñ )O(nlog⁡log⁡(N))O(nlog⁡log⁡(N)log⁡log⁡log⁡log⁡(N)log⁡log⁡log⁡(N))nlog⁡n∝log⁡NnO(log⁡N/log⁡log⁡N)。这将使加法和乘法的复杂度分别为和O (log N log log log N log log log log N )。O(log⁡N)O(log⁡Nlog⁡log⁡log⁡Nlog⁡log⁡log⁡log⁡N)

1
另请参见中国余数定理
— vzn2012年

1
@vzn:是的,我想提一下进行比较,但是后来我想到通过混合基数表示法可能会有更快的比较操作。
— Joe Fitzsimons,2012年
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.