質問:ビットの自然数与えられた、(ビット)の加算とシフトのみを使用してを計算する方法は?
ヒントは、バイナリ検索を使用することです。しかし、必要な複雑さを実現できませんでした(を取得しました)。
それはどういう意味ですかusing only $O(n)$ (bit) additions and shifts
:
これはアルゴリズムブックの練習問題です。
私の意見では、それは2を追加し、言うことを意味しビットは、自然数は、コストとシフトする、と言うビットは、自然数もコスト。次に、そのような操作を回しか使用できません。
比較のコストについては触れられていません。私はそれを無視することができると思います、または2つ、たとえばビットの自然数を比較することもを要すると仮定することができます。
私のアルゴリズム:
- ビットの数の範囲を決定の:
したがって、
t_1 \ triangleq \ lfloor \ frac {n-1} {2} \ rfloor + 1 \ le t \ le \ lceil \ frac {n} {2} \ rceil + 1 \ triangleq t_2。
- バイナリ検索:バイナリ検索を使用して、2 ^ {t_1}と2 ^ {t_2}の間のを検索します。各数値xについて、加算とシフトをプリミティブとして使用してx ^ 2を計算し、それをNと比較します。
したがって、複雑さはであり、バイナリ検索と計算回に対して、それぞれが加算とシフトを行います。O (n )