整数の大きなべき乗のビット数を計算する


10

バイナリ表現で2つの整数とが与えられた場合、ビットサイズを計算する複雑さは何ですか?n x nxnxn

これを行う1つの方法は、十分な精度で近似を計算することにより、を計算することです。これは、表示されるコンピューティングと精度のビットで行うことができる、長さの二つの整数の積を計算するのに必要な時間である。この利回り複雑さの(特別に単純ではない)アルゴリズムおよそ場合両方のビットサイズに拘束されおよび(私はエラーをしなかった場合)。ログ2Xのログ2X K O M K のログ・K M K K O S ログ2 s s x n1+log2(xn)=1+nlog2(x)log2(x)log2(x)kO(M(k)logk)M(k)kO(slog2s)sxn

を打つことができますか?ここではとサイズです(それらが同等のサイズの場合)。この複雑さ以上を実現する簡単なアルゴリズムはありますか?s x nO(slog2(s))sxn

注:チューリングマシンなどの理論モデルの複雑さに興味があります。



@vzn:これは役に立たないと思います...
Bruno

何故なの?この質問はでRJLiptonでカバーとしてDysons推測例えば上のアルゴリズムの攻撃を思い出させる12
vzn

質問への答えを見つけたからといって、どこか他のところに質問する必要はありません。
Bruno

回答:


1

[編集]提案されたように、私は回答を編集して詳細を示します。

私の2番目の質問への答えはノーです:

命題。計算精度までKはハードとしての少なくとものビットサイズコンピューティングなどであるX 2 Kをlog(x)kx2k

証明。ましょう整数yのビットサイズを示します。最初の通知非負整数の場合とYのビットサイズyがある1 + ログY |y|yyy1+logy

したがって、。これで、2 k log x log x だけ左にk位置シフトされました。したがって一つは計算することができるログX の精密にKを単に減算することにより1のビットサイズにX 2 K及び結果シフトk個の右に位置します。|x2k|=1+2klogx2klog(x)log(x)klog(x)k1x2kk


1
ビット数により、ログxからkビットの精度を計算できるのはなぜですか?あなたの削減は実際に機能しますか?n = 2 kの特別なケースが、他のすべてのnの値(2のべき乗ではない)よりもはるかに簡単/難しい場合はどうなりますか?その可能性を排除する方法はありますか?x2klogxkn=2kn
DW

@DW:vznのコメントの後で、この質問に戻ります。次のように私の証明である:整数のビット数ある1つの+ ログY 。したがって、内のビットの数X 2 Kである1つの+ 2 k個のログX 。さらに、2 k個のログxが同じであるログXが、シフトkの左側に位置します。したがって、2 k個のログX ⌋は、(少なくとも)あなたに与えるkは最初のビットy1+logyx2k1+2klogx2klogxlogxk2klogxk。したがって、 x 2 kのビット数を計算できる場合は、結果から 1を引くと、 log xの最初の kビットが得られます。これは理にかなっていますか?logxx2k1klogx
ブルーノ

はい、それは私にはもっと理にかなっています!特にあなたはただ硬さを見せようとしているだけなので。この詳細な説明で回答を更新することをお勧めしますか?これに戻って、あなた自身の質問に対する回答を文書化していただきありがとうございます。
DW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.