快速幂

快速幂:顾名思义就是快速的求一个数的n次幂。例如:an,直接的算法就是累乘,这样的计算方法时间复杂度为O(n)。而快速幂可以降低时间复杂度至O(log(n))。

那么快速幂是如何降低时间复杂度的呢?
接下来我举个例子,如果我们要求an,实数n满足2K,那么an可以表示为((a2)2)2…的形式,而普通算法则为a* a *a…的形式。因此快速幂只要进行K次平方运算就可以得到最终结果。时间复杂度计算为:n=2K–> K=log(n)。

但如果n不满足2K幂,我们该如何进行计算?
n不直接满足此条件,我们可以将n写成有限个2Ki相加的形式。如:211的指数11可以写为:23+21+20,这样我们可以知道此式需要进行3次平方运算。我们在代码中可以很明显的看到循环的次数变少了,即时间复杂度降低。

下面我们来看一下实际代码是如何编写的:
实例:给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。

public class Solution {public double Power(double base, int exponent) {double result =1;int ex=0;if(exponent>0){ex=exponent;}if(exponent<0){if(base==0){throw new RuntimeException("Base can not be 0 now!");}ex=-exponent;}if(exponent==0){return 1;}while(ex!=0){if((ex&1)==1){result*=base;}base*=base;//这里我们通过右移来判断二进制形式指数中每位的数字ex>>=1;}return exponent>=0?result:(1/result);}
}

Java算法学习——快速幂相关推荐

  1. Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)

    Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...

  2. mysql 矩阵运算_MySQL实现算法:矩阵快速幂

    前几日在地铁上和好友讨论起MySQL数据库,由于MySQL数据库不支持复合类型变量,就想到能否用MySQL去实现一些算法呢.最近在学习MySql存储程序,昨天闲来无事,就动手写写吧,借此巩固一下存储过 ...

  3. 【算法分析与设计】快速幂算法与快速幂取模算法

    文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...

  4. 数据结构与算法:快速幂——求幂运算 O(logN)

    前言:普通的求幂问题,相信大家已经屡见不鲜,无非就是 纯暴力 解法,或者直接调用公式:Math.Pow(底数, 指数)  一步得出.但这两种算法只能使得时间复杂度保持在 O(n).而且公式一步的得往往 ...

  5. 模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)

    1.什么是模幂运算问题 给出a, k, mod 计算ak(%mod)a^k (\%mod)ak(%mod)的值 k是一个非常大的正整数(超过1e7) 附,一个可以提交的地方: leetcode 372 ...

  6. 胡凡算法之——快速幂

    关于快速幂的两种方法: 1.递归算法:只要掌握一个精髓: 递归相对来说比较好理解:代码如下: typedef long long LL; //求a^b % m ,递归写法:LL binaryPow(L ...

  7. RSA密码的手动算法+快速幂算法

    公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...

  8. leetcode算法总结 —— 快速幂算法

    文章目录 1. 引出快速幂算法 2. 简化语句 3. 使用位运算来提升性能 4. 对应leetcode题型 参考的是大神的文章,这篇文章相当好 https://blog.csdn.net/qq_197 ...

  9. 最长公共子序列算法 java,算法学习——java实现最长公共子序列,

    算法学习--java实现最长公共子序列学习--java实现最长公共子序列的算法, 实验目的: 输入两个同类型的序列,用动态规划的方法计算它们最长的公共子序列的长度和序列. (推荐教程: Java视频教 ...

最新文章

  1. python 分类变量xgboost_如何用XGBoost做时间序列预测?
  2. hpg8服务器系列指示灯意思,HP Proliant GEN8服务器指示灯说明
  3. mongodb及其索引的使用例子
  4. jenkins 通过自动拉取Gitlab上的代码实现自动更新NGINX
  5. C语言重点难点:与,或和异或
  6. vue部分样式无法修改
  7. 开放式系统编程技术_使用开放式硬件构建更好的辅助技术
  8. linux shell脚本监控内存,shell脚本监控内嵌linux系统业务、CPU、内存等
  9. 数据挖掘相关代码实践
  10. Axure9修改汉化包解决”用例“中”匹配所有“异常的问题
  11. Win10极限精简版Tiny10发布:仅占C盘4.3GB
  12. 传统项目管理 VS 敏捷项目管理
  13. CNCF的中国云原生调查报告
  14. Malformed \uxxxx encoding问题的多种完美解决方法总结
  15. [F2F] MyBatis相关面试题
  16. python中stripped string_22-.strings 和 stripped_strings变量多个文本
  17. poiExcel格式设置,很好用,感谢大佬
  18. 2018三七互娱前端笔试
  19. 【渝粤题库】陕西师范大学202201 社区管理 作业
  20. 小芭比linux怎么装win7_Linux系统怎么安装Win7?安装XP或WIN7系统教程

热门文章

  1. 百度官方:网站快照的更新频率与权重没任何关系
  2. Java开发 - 不知道算不算详细的JUC详解
  3. Spring实战(Spring起步)
  4. 【翻译】Extending PyTorch之Extending torch.autograd和Extending torch.nn
  5. ajax回调函数中获取到的日期类型为时间戳
  6. 通过koala软件来使用less
  7. 路由器有线桥接的两种方式异同
  8. Android R setenforce 实现
  9. 微软CIO谈“IT公司管IT”
  10. 给小白准备的graphviz图文安装教程(2021最新)