Java算法学习——快速幂
快速幂
快速幂:顾名思义就是快速的求一个数的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算法学习——快速幂相关推荐
- Java算法学习:蓝桥杯——地宫寻宝(DFS+动态规划—记忆型递归)
Java算法学习:蓝桥杯--地宫寻宝(DFS✖记忆型递归) 题目: 标题:地宫取宝X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签.地宫的入口在左上角,出 ...
- mysql 矩阵运算_MySQL实现算法:矩阵快速幂
前几日在地铁上和好友讨论起MySQL数据库,由于MySQL数据库不支持复合类型变量,就想到能否用MySQL去实现一些算法呢.最近在学习MySql存储程序,昨天闲来无事,就动手写写吧,借此巩固一下存储过 ...
- 【算法分析与设计】快速幂算法与快速幂取模算法
文章目录 快速幂算法 算法分析 算法实现 位运算优化 BigInteger支持 快速幂取模算法 算法优点 算法推导 算法实现 BigInteger支持 本文完整代码实现(Java语言描述) 快速幂算法 ...
- 数据结构与算法:快速幂——求幂运算 O(logN)
前言:普通的求幂问题,相信大家已经屡见不鲜,无非就是 纯暴力 解法,或者直接调用公式:Math.Pow(底数, 指数) 一步得出.但这两种算法只能使得时间复杂度保持在 O(n).而且公式一步的得往往 ...
- 模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)
1.什么是模幂运算问题 给出a, k, mod 计算ak(%mod)a^k (\%mod)ak(%mod)的值 k是一个非常大的正整数(超过1e7) 附,一个可以提交的地方: leetcode 372 ...
- 胡凡算法之——快速幂
关于快速幂的两种方法: 1.递归算法:只要掌握一个精髓: 递归相对来说比较好理解:代码如下: typedef long long LL; //求a^b % m ,递归写法:LL binaryPow(L ...
- RSA密码的手动算法+快速幂算法
公钥加密方案(非对称加密算法) 1.为什么要引入公钥加密方案? 密码学中的加密方案分成对称密钥和非对称密钥(也就是我们说的公钥加密,代表加密算法是RSA加密算法). 而对称加密方法有一个特点,任何通信 ...
- leetcode算法总结 —— 快速幂算法
文章目录 1. 引出快速幂算法 2. 简化语句 3. 使用位运算来提升性能 4. 对应leetcode题型 参考的是大神的文章,这篇文章相当好 https://blog.csdn.net/qq_197 ...
- 最长公共子序列算法 java,算法学习——java实现最长公共子序列,
算法学习--java实现最长公共子序列学习--java实现最长公共子序列的算法, 实验目的: 输入两个同类型的序列,用动态规划的方法计算它们最长的公共子序列的长度和序列. (推荐教程: Java视频教 ...
最新文章
- python 分类变量xgboost_如何用XGBoost做时间序列预测?
- hpg8服务器系列指示灯意思,HP Proliant GEN8服务器指示灯说明
- mongodb及其索引的使用例子
- jenkins 通过自动拉取Gitlab上的代码实现自动更新NGINX
- C语言重点难点:与,或和异或
- vue部分样式无法修改
- 开放式系统编程技术_使用开放式硬件构建更好的辅助技术
- linux shell脚本监控内存,shell脚本监控内嵌linux系统业务、CPU、内存等
- 数据挖掘相关代码实践
- Axure9修改汉化包解决”用例“中”匹配所有“异常的问题
- Win10极限精简版Tiny10发布:仅占C盘4.3GB
- 传统项目管理 VS 敏捷项目管理
- CNCF的中国云原生调查报告
- Malformed \uxxxx encoding问题的多种完美解决方法总结
- [F2F] MyBatis相关面试题
- python中stripped string_22-.strings 和 stripped_strings变量多个文本
- poiExcel格式设置,很好用,感谢大佬
- 2018三七互娱前端笔试
- 【渝粤题库】陕西师范大学202201 社区管理 作业
- 小芭比linux怎么装win7_Linux系统怎么安装Win7?安装XP或WIN7系统教程