算法笔记重点(11)二分

    技术2022-07-11  110

    学会二分应当掌握三种模板,即寻找相等的值,寻找第一个大于等于的值以及寻找第一个大于的值,大于等于的值与大于的值可组成一个左闭右开的存在性区间,找到多个相同的值。另外,初值的选取需要看返回的值范围。

    浮点数二分也很重要,这里需要设置精度,当right-left<eps即可退出,返回mid。

    此外还有二分答案,即侧重应用,比如装水问题和木棒切割问题。

    快速幂非常实用,我们利用递归的思想,根据当b为奇数时,ab=a*ab-1,当b为偶数时ab=ab/2*ab/2,递归边界为a0=1。当然也可以用迭代的思想,这种思想个人觉得不太直观,利用a的二进制位来累计乘积,效率和递归差别不大。另外注意递归时不要写成binaryPow()×binaryPow()的形式,这样会导致算法直接退化成O(n)级。

    Processed: 0.012, SQL: 9