Knuthの線形時間乗算アルゴリズムが「カウント」されないのはなぜですか?


13

乗算アルゴリズムに関するウィキペディアのページには、Donald Knuthによる興味深いものが記載されています。基本的には、フーリエ変換の乗算と対数サイズの乗算の事前計算テーブルを組み合わせることを含みます。線形時間で実行されます。

この記事は、このアルゴリズムのように機能し、「真の」乗算アルゴリズムとは見なされません。さらに重要なことは、乗算を均等なO(n lg n)時間で行えるかどうかは未解決の問題であると考えられていることです!

このアルゴリズムのどの詳細が、「真の」乗算アルゴリズムとしてカウントすることを不適格にしますか?

私の推測は次のとおりです。

  • テーブルの事前計算には、線形時間以上の時間がかかります。一方、それはまだn lg n間に合うようにできるので、それでも印象的なように思えます。
  • ランダムアクセスはどういうわけか許可されていません。しかし、他のアルゴリズムがハッシュテーブルやポインターなどを使用できるのはなぜですか?
  • 単一の命令で256ビットの乗算を行う256ビットマシンを使用している場合、2 ^ 256を超える要素が存在するまでこのアルゴリズムには意味がありません。一方、union-findでは逆アッカーマン因子に悩まされます。
  • 「線形時間乗算アルゴリズムはありますか?」質問は、より弱いマシンという点で密かにですが、これはほのめかされるだけです。

これは関連する可能性があります:en.wikipedia.org/wiki/Transdichotomous_model
R .. GitHub STOP HELPING ICE 14

回答:


16

言及したアルゴリズムはKnuthのTAOCPに表示されますが、それは確かにKnuthによるものではなく、Schönhage–Strassenアルゴリズムとしてより広く知られています。Knuthは、テキスト内でこのアルゴリズムをそれらに割り当てています。このアルゴリズムは、いわゆるRAMマシンで実際に線形時間で実行されます。変数は、サイズ整数を保持できます。ここで、は入力のサイズです。ただし、ビットの複雑さはであり、このモデルの場合、Fürerのアルゴリズムは高速です。O(logn)nO(nlognloglogn)

文献の高速整数乗算アルゴリズムの探求は、複雑さの尺度としてビットの複雑さに焦点を当てています。これは、レジスタに1ビットのみ(または任意の定数に対してビットのみ)を保持できるようにするようなものです。整数の乗算にはが必要であることが予想され、これが厳密かどうかは明確ではなく、重要な下限は不明です(したがって、このは単なる推測です)。CCΩ(nlogn)Ω(nlogn)

大きな整数を実際に乗算するための「正しい」モデルについては、Fürerの最近の論文を参照してください。彼の結論は、「実用的な」シェーンヒェーシュトラッセンアルゴリズムに賛成です(2つあり、もう1つはビットの複雑さは優れていますが、実際にはパフォーマンスが低下します。Fürerは論文でこの問題に対処しています)。


2
説明をありがとう。私はTAOCPのコピーを持っていないので、私が行かなければならなかったのはwiki記事にあったものだけでした(問題を修正するために既に編集しているようです)。
クレイグギドニー14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.