整数のリストの2つの積を比較しますか?


10

境界マニチュードの正の整数の2つのリストがあり、各リストのすべての要素の積を取るとします。どの製品が大きいかを判断する最良の方法は何ですか?

もちろん、単純に各積を計算することもできますが、積の桁数は項の数とともに直線的に増加するため、計算全体が二次式になるため、より効率的なアプローチがあることを望んでいます。

乗算する代わりに加算する場合は、最初のリストからエントリをインクリメンタルに追加し、2番目のリストから減算する「ジッパー方式」を使用して、(大規模な)総和を計算する必要を回避できます。製品の類似の手法は、エントリの対数を合計することですが、問題は、ログの計算に不正確な算術を使用する必要があることです。数値誤差が無関係であることを証明する方法がない限り?


最大整数値がわかっていて、それがnに依存しない場合(つまり、定数k)、1からkまでのすべての数値の因子のルックアップテーブルを作成できます。これで、すべてをベース[積の因数]で書くと、そのベースで線形時間で積を計算でき、各桁が(最上位桁から開始して)順番に、一方が他方より大きくなるまで比較できるため、線形になると思います。詳細は少し注意が必要ですが、kが定数の場合はうまくいくと思います。
Phylliida、2017年

むしろ、製品の類似の手法は、有理数を最初のリストの最初の要素を2番目の要素の最初の要素で割った(プラス秒の処理)で割った値に保つことです。しかし、すべての数値が互いに素である場合、両方の積を計算するので、それはあまり役に立ちません。| また、単純なアルゴリズムが2次であることもわかりません。サイズ整数の積を計算すると、最大でがあります。ここで、はビット整数とビット整数を乗算するコスト。製品が次の形式にも当てはまると思わない0nmC(m,m)+C(m,2m)+...+C(m,(n1)m)C(x,y)xy
限り


素朴なアプローチの改善:効率的な電力供給アルゴリズムを使用して、各要素の発生数を(線形時間で)カウントし、最後に積のみを計算します。これは、現在の漸近的に最速の方法を使用して、時間、つまりします。O(M(n))O(nlogn2O(logn))
EmilJeřábek17年

2
ログに必要な精度について考えます。実際にはもっと効率的かもしれません。
EmilJeřábek17年

回答:


6

(私は問題の説明を理解しているので、入力数は定数によって制限されているので、制限への依存を追跡しません。)

この問題は、対数の合計を使用して線形時間および対数空間で解決できます。より詳細には、アルゴリズムは次のとおりです。

  1. バイナリカウンターを使用して、両方のリストで考えられる各入力番号の出現数をカウントします。

これには時間がかかり、各カウンターは値のによって制限されるため、カウンターはスペース使用します。O(n)O(logn)n

ましょう以下の素数もに結合しました。数の各カウンタを分配することにより、の素因数に(適切な多重度を持つ)、および他のリストから1つのリストのためのカウントを減算し、我々は、時間内に次のように得:p1,,pkO(1)aaO(logn)

  1. 問題がの符号を決定することと同等になるように、ビットで整数を計算します。β1,,βkO(logn)Λ:=i=1kβilogpi

  2. もしの製品が同じであること、答え。β1==βk=0

それ以外の場合は。ベイカーの定理により 、特定の定数下限を下限にでき 。したがって、以下は符号を正しく計算します。Λ0

|Λ|>2Clogn
CΛ
  1. の符号を出力し。ここで、はをビットの精度に近似したものです。i=1kβiπiπilogpim:=Clogn+k+1

してみましょう 2の乗算のコストもビットの整数。現在の最良の境界はですが、ここでは、ささいな乗算アルゴリズム。AGM反復を使用してをビットの精度で時間計算し(たとえば、ここを参照)、次に評価に時間がかかります。全体として、ステップ4には時間がかかります。M(m)mM(m)=O(mlogm2O(logm))O(m2)logpimO(M(m)logm)iβiπiO(M(m))O(M(m)logm)O(lognpoly(loglogn))

したがって、アルゴリズムの実行時間は、最初のステップのによって支配されます。O(n)


ありがとう!詳細については後で説明する必要がありますが、これは非常に有望です。
user168715
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.