1

これは、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)操作を行うことをどのように示すことができるかということです。

4

1 に答える 1

2

を減算する場合100b-11b、結果の対応するビットが 0 になることが既にわかっているため、実際には最初の数値の先頭のビットを無視できます。それが 1 だった場合、前のステップでシフトではなく減算を行っていたでしょう。 . したがって、減算では常に正確にlg bビットが考慮されます。

于 2013-09-14T16:18:25.470 に答える