这是来自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))
次操作?
答案 0 :(得分:2)
当你减去100b-11b
时,你实际上可以忽略第一个数字中的前导位,因为你已经知道结果中的相应位是0.如果它是1,你就会做一个减法而不是上一步的转变。因此减法始终完全考虑lg b
位。