mysql中如何幂次方的函数_幂次方的四种快速取法(不使用pow函数)
Pow(x, n)
方法一:暴力法
方法二:递归快速幂算法
方法三:迭代快速幂算法
方法四:位运算法
方法一:暴力法
思路
只需模拟将 x 相乘 n 次的过程。
如果 \(n < 0\),我们可以直接用 \(\dfrac{1}{x}\), \(-n\) 来替换 \(x , n\) 以保证 \(n \ge 0\)。该限制可以简化我们的进一步讨论。
但我们需要注意极端情况,尤其是负整数和正整数的不同范围限制。
算法
我们可以用一个简单的循环来计算结果。
class Solution {
public:
double myPow(double x, int n) {
long long N = n;
if (N < 0) {
x = 1 / x;
N = -N;
}
double ans = 1;
for (long long i = 0; i < N; i++)
ans = ans * x;
return ans;
}
};
复杂度分析
时间复杂度:\(O(n)\)。我们将 x 相乘 n 次。
空间复杂度:\(O(1)\)。我们需要一个变量来存储 x 的最终结果。
方法二:递归快速幂算法
class Solution {
public:
double fastPow(double x, long long n) {
if (n == 0) {
return 1.0;
}
double half = fastPow(x, n / 2);
if (n % 2 == 0) {
return half * half;
} else {
return half * half * x;
}
}
double myPow(double x, int n) {
long long N = n;
if (N < 0) {
x = 1 / x;
N = -N;
}
return fastPow(x, N);
}
};
复杂度分析
时间复杂度:O(log(n))O(log(n))。每次我们应用公式$ (x ^ n) ^ 2 = x ^ {2 * n}\(,\)n$ 就减少一半。 因此,我们最多需要 \(O(log(n))\)次计算来得到结果。
空间复杂度:\(O(log(n))\)。每次计算,我们都需要存储 \(x ^ {n / 2}\) 的结果。 我们需要计算 \(O(log(n))\)次,因此空间复杂度为 \(O(log(n))\)。
方法三:迭代快速幂算法
递归或迭代的快速幂实际上是实现同一目标的不同方式。
class Solution {
public:
double myPow(double x, int n) {
long long N = n;
if (N < 0) {
x = 1 / x;
N = -N;
}
double ans = 1;
double current_product = x;
for (long long i = N; i ; i /= 2) {
if ((i % 2) == 1) {
ans = ans * current_product;
}
current_product = current_product * current_product;
}
return ans;
}
};
复杂度分析
时间复杂度:\(O(log(n))\)。对于 n 的每个二进制位,我们最多只能乘一次。所以总的时间复杂度为 \(O(log(n))\)。
空间复杂度:\(O(1)\)。我们只需要两个变量来存储 x 的当前乘积和最终结果。
位运算实现pow(x,n)
根据暴力法的思路来看特别简单,但通过位运算呢?
我举个例子吧,例如 n = 13,则 n 的二进制表示为 1101, 那么 m 的 13 次方可以拆解为:
\(m^{1101} = m^{0001} * m^{0100} * m^{1000}\)。
我们可以通过 & 1和 >>1 来逐位读取 1101,为1时将该位代表的乘数累乘到最终结果。直接看代码吧,反而容易理解:
int pow(int n){
int sum = 1;
int tmp = m;
while(n != 0){
if(n & 1 == 1){
sum *= tmp;
}
tmp *= tmp;
n = n >> 1;
}
return sum;
}
时间复杂度近为 \(O(logn)\),而且看起来很牛逼
mysql中如何幂次方的函数_幂次方的四种快速取法(不使用pow函数)相关推荐
- C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能...
本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...
- mysql中以下正确的sql是_总结MySQL中SQL语法的使用
--where子句操作符: where子句操作符 = 等于 <> 不等于(标准语法) != 不等于(非标准语法,可移植性差) < 小于 <= 小于等于 > 大于 > ...
- mysql中的运算符的执行顺序_【MySQL】执行顺序
我去找你❤️ 我给你买❤️ 我带你去❤️ 我很爱你❤️ 我们回家❤️ 我们结婚❤️ 你听过最孤独的话是什么? 同学,code就剩你没提交了 今天讨论的话题是 MySQL执行顺序 ??? 先养眼,再看题 ...
- 在mysql中如何为连接添加索引_在MySQL中如何为连接添加索引
http://hackmysql.com/case4 译文: 我先通过一个简单的例子说明在MySQL中如何为连接添加索引,然后再看一个有挑战性的例子. 简单的3个表的连接 表结构很简单,3个表tblA ...
- mysql中查询名字第二位为_(12) 查询出名字倒数第二位为S的员工信息。_学小易找答案...
[单选题]排序用到的表空间是 ( ) [填空题]设有如下关系表R: R(NO,NAME,SEX,AGE,CLASS) 主关键字是NO 其中NO为学号,NAME为姓名,SEX为性别,AGE为年龄,CLA ...
- mysql中实现分类统计查询的步骤_在MySQL中如何进行分组统计查询
昨天和大家分享了MySQL中,如何进行聚合函数及统计函数查询,若是不清楚的话,可以去看一下我的那个文章.今天继续和大家分享,在MySQL中如何进行分组统计查询,这个在实际应用中,也会经常运用到,比如以 ...
- mysql中索引的作用是什么_详解mysql中索引的作用
1. 索引是什么,首先我们可以举个例子,字典大家应该都使用过,我们可以使用目录快速定位到所要查找的内容,那么索引跟目录的作用类似,在数据库表记录中,利用索引,可以快速过滤查找到数据记录. 2. 索引类 ...
- 用于在MYSQL中创建存储过程的关键字是_下面选项中,用于在删除存储过程时,检测存储过程是否存在的关键字是_学小易找答案...
[判断题]秦陵兵马俑三号坑设计的是 军事指挥部 . [单选题]以下不是超塑性变形特点的是:( ) [判断题]如果从表中的外键引用了主表中的值,则不能删除主表中被引用的数据. [单选题]下面选项中,用于 ...
- mysql中a b为什么是假_[灵魂拷问]MySQL面试高频问题(工程师方向)
前言 本文主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水. 前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面 ...
最新文章
- ATS 5.3.0中开启最高级别的缓存调试信息
- 有逼格的产品经理的工作台长啥样?
- POJ 1183 反正切函数的应用(数学代换,基本不等式)
- [导入]正则表达式学习心得体会(2)
- 【读书笔记】深入分析Java Web技术内幕-Cookie与Session
- 老段51CTO会员卡 限时半价
- 基线_Origin入门教程(九):扣除基线常用小妙招
- python 解压缩字符串_在C中压缩字符串,在python中解压缩
- js基础-14-JS阻止事件冒泡和默认事件
- 微信公众账号分为哪几类?区别是什么?
- 页面增加问号图标,鼠标放置会提示文字信息。(记录日志)
- 联发科mt8516价格_揭秘联发科MT8516单颗芯片破千万背后的故事
- 零基础入门:基于开源WebRTC,从0到1实现实时音视频聊天功能
- 悼念蓝色理想FLASH区版主:手工感情==生命如此之脆弱
- 钉钉发布会发了个“ / ”,还说这玩意能替我们上班?
- 挑战程序设计竞赛: Jess's Reading Problem
- Fabric v2.2源码分析 Broadcast广播交易服务(二)
- java 数字翻译成英文_java 英文翻译成数字
- 对QQ和搜狗拼音的期望 - 2010.6
- memoized函数
热门文章
- 图解 DNS服务器解析过程
- JavaScript关于console的使用
- 爱心----孩子自信的源泉
- C++面试 左值、右值、左值引用、右值引用
- 服务器安装信任描述文件,OS X Server:在使用 TLS、TTLS 或 PEAP 时如何在“配置描述文件”中配置 RADIUS 服务器信任...
- 吴恩达机器学习系列课程笔记——第五章:Octave教程(Octave Tutorial)
- 萝莉状态栏android4.4,教你如何让Windows 7任务栏功能更丰富
- 文本分类(1)-文本预处理
- 现代企业6S规范管理有哪些?
- ❤️软件设计师之系统安全分析与设计大总结(莽起来)❤️