(整数上で)線形乗算、加算、および比較にどれだけ近づけることができますか?


21

Accoring KWリーガンの記事「接続スター」:、彼はまだ加算、乗算、および比較です操作は線形時間で計算可能であるような整数の表現を見つけるためのオープンな問題であることを最後に言及します

整数の表現が存在するので、加算、乗算、比較はすべて線形時間で実行可能ですか?基本的に、線形時間の離散的に順序付けられたリングはありますか?

(1)比較せずに、線形の時間の乗算と加算にどれだけ近づきますか ここでは、問題のサイズが異なる可能性があるため、整数サイズを変更できるデータ構造/アルゴリズムが必要になる場合があると想定しています。

(2)完全な問題については、整数の乗算、加算、比較の最適なスキームが見つかると想定できます。これら3つの操作の中で最も遅い(最悪の場合)線形時間にどれだけ近づけることができますか?そして、そのメモでは、他の操作はどれくらい速いでしょうか?

公式問題声明

EmilJeřábekが言及しているように、些細なケースを除外し、この質問の最悪のケースの動作に集中したいと思います。

したがって、非負の整数およびで、および、加算、乗算、および比較が可能なデータ構造/アルゴリズムを見つけることができますか\間と中の時間と空間?Y 0 X < N 0 Y < N 、X 、Y O N ログN O ログ2 nはxy0x<n0y<nバツyOnログnOログ2n


1
非負の整数に対してこれらの操作を時間\ Theta(n)で実行するスキームを作成できることを説明します。nは最大整数のビットサイズです(事前にnを知っていると仮定します)。私たちはもっとうまくやれるのだろうか、そして計算されている現在の整数に比例してこれをやるのだろうか。Θ(n)nn
マットグロフ

5
@TysonWilliams:はい!バイナリ!
ジェフ

2
これらのすべての操作に対して線形時間を取得する代わりに、これらのすべての操作が時間持つように整数の表現がありか?O(nlogn)
エミールイェジャベクはモニカをサポートします

4
実際には、些細な正の答えがあります:ビットのパディングでバイナリで整数を表します。ステートメントには、表現の長さをバイナリ表現の長さに線形にする必要があるという条件を含めるべきではありませんか?n2
エミールイェジャベクはモニカをサポートします

5
@EmilJeřábek:何らかの関数に対して、整数表現にビットを使用することを望んでいると思い。f n f n = Θ log n nf(n)f(n)=Θ(logn)
ジェフ

回答:


14

おそらく最良の答えではありませんが、おそらくこれは有用な出発点です。負でない整数を表現したい場合、2から始まる連続する素数を法とする剰余のセットとして保存できます。この形式では、比較は困難になる可能性がありますが、乗算と加算は非常に迅速に実行できます。最初の素数の積は、近似され したがって、整数を表すには、の最初の素数を法とする剰余が必要です。最初の素数剰余を法とする剰余を使用して任意のを表すことができるため、p n= exp 1 + o1 n log n N n N < exp 1 + o1 n log n N < p nn n log n log N n n log n O n

pn#=exp((1+o(1))nlogn).
NnN<exp((1+o(1))nlogn)N<pn#nnlognlog(N)。加算と乗算は、残基のペア間で直接実行できます。そのようなペアはあり、最大素数は周りにあり。したがって、加算は、Schonhage-Strassenを介した乗算はなければなりません。。以来、次いで、粗い近似が得られるに。これにより、加算と乗算の複雑さがおよそおよびます。nnlog(n)O(nloglog(N))O(nloglog(N)loglogloglog(N)logloglog(N))nlognlogNnO(logN/loglogN)O(logN)O(logNlogloglogNloglogloglogN)


1
@vzn:はい、比較のために言及するつもりでしたが、その後、混合基数表現を介したより速い比較操作があるかもしれないことに気付きました。
ジョーフィッツシモンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.