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


21

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

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

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

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

正式问题陈述

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

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


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

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

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

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

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

Answers:


14

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

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

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.