これは、CLRS の数論の章からのものです。
a/b
結果q
とリマインダ付きのバイナリ「紙と鉛筆」の長除算がビットの操作を行うr
ことを証明するように求められます。O((1+lgq)lgb)
私の見方ではb
、 の各ビットに対して を 1 減算しq
ます。b
したがって、減算がlgb
演算 ( の各ビットに対して 1 つ) を行うと仮定すると、演算b
の合計が得O(lgblgq)
られますが、これは要求されたものではありません。
最初に行う減算操作の結果が 0 ビットになる可能性があることを考慮すると (たとえば、100b を 11b で割る)、1 をlgq
加算してこの減算を補正できます。しかし...減算自体についても同じことが言えます-数値に応じて操作lgb
を行うことも、操作を行うこともできます(100bと11bの例では、2番目の減算は100b-11bになり、完了するまでに3回の操作が必要です) lg(b)+1
.
したがって、これらのケースを因数分解すると、操作の数は になりますO((1+lgb)(1+lgq))
。
問題は、部門がO((1+lgq)lgb)
操作を行うことをどのように示すことができるかということです。