分治算法-快速幂算法

问题描述

如何在较快的时间内计算xnx^nxn,其中nnn可以是正数或负数,或0

  • 暴力计算时间复杂度很高!
  • 考虑采用快速幂算法求解。

快速幂算法(Divide and conquer )

  • 只考虑nnn为正数的情况
  • 对于负数的情况只需要先求出正数的情况,再求倒数
  • 对于xnx^nxn的情形,考虑划分如下子问题
    • xnx^nxn对半剖分,即分成解答x⌊n/2⌋x^{\lfloor n/2 \rfloor}xn/2xn−⌊n/2⌋x^{n - \lfloor n/2 \rfloor}xnn/2
    • 分别求解两个部分。
    • 当n是偶数时,有⌊n/2⌋=n−⌊n/2⌋\lfloor n/2 \rfloor = n - \lfloor n/2 \rfloorn/2=nn/2
    • 当n是奇数时,有⌊n/2⌋+1=n−⌊n/2⌋\lfloor n/2 \rfloor +1= n - \lfloor n/2 \rfloorn/2+1=nn/2
  • 因此给出了一种递归算法:
    • 递归求解 x⌊n/2⌋x^{\lfloor n/2 \rfloor}xn/2
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值