私は問題の効率的なアルゴリズムを探しています:
入力:正の整数いくつかの整数のために(ビットとして格納されている)のn ≥ 0。
出力:数。
質問:私たちは計算することができますのビットから3 のnにO (N )時間?
これは、math.SEの質問への私の答えに動機付けられた理論的な質問です。この全単射の公式を見つける方法は?。この質問では、著者は、全単射から見つけたいと自然数N = { 1 、2 、... }。私が提案さ2 m個3 N ↦ 2 mで(2 N + 1 )
我々が知っていれば私の提案された解決策で、及びMは、我々は簡単に計算することができる2 M(2 のn + 1 )(のバイナリ桁書き込みnが続く1続くM個のゼロを)。これにはO (n + m )時間かかります。
ただし、を見つける必要もありますが、これはもっと難しいかもしれません。繰り返し3で割ることでnを見つけることは可能ですが、これは無駄に思えます。これにはn回の除算が必要で、それぞれにO (n )時間かかるため、合計でO (n 2)時間になります。[実際、各反復の後、桁数は直線的に減少しますが、これによりO (n 2)時間になります。]
入力がべき乗であることを利用できるようになっているようです。