进行二进制长除时的位操作

时间:2013-09-14 16:07:59

标签: algorithm binary complexity-theory clrs

这是来自CLRS的数论章节。

我们被要求证明二进制“纸和笔”长分部a/b结果q和提醒r对位进行O((1+lgq)lgb)次操作。

我看到它的方式是我们为b中的每个位减去q。因此,假设减去b执行lgb操作(b中的每个位一个),那么我们总共有O(lgblgq)个操作,这不是请求的操作。< / p>

如果考虑到你做的第一个减法操作可能会导致0位(例如,将100b除以11b),那么,好的,你可以将{1}加1来补偿这个减法。但是......减法本身也是如此 - 它可以采用lgq运算,也可以根据数字进行lgb运算(在100b和11b示例中,第二个减法将是100b-11b,完成3次操作)。

因此,如果我们考虑这些情况,那么操作次数应为lg(b)+1

所以问题是,你如何证明该部门需要进行O((1+lgb)(1+lgq))次操作?

1 个答案:

答案 0 :(得分:2)

当你减去100b-11b时,你实际上可以忽略第一个数字中的前导位,因为你已经知道结果中的相应位是0.如果它是1,你就会做一个减法而不是上一步的转变。因此减法始终完全考虑lg b位。

相关问题