一,两种不同的求幂运算

求解x^n(x 的 n 次方)

①使用递归,代码如下:

     private static long pow(int x, int n){
if(n == 0)
return 1;
if(n == 1)
return x;
if(n % 2 == 0)
return pow(x * x, n / 2);
else
return pow(x * x, n / 2) * x;
}

分析:

每次递归,使得问题的规模减半。2到6行操作的复杂度为O(1),第7行pow函数里面的x*x操作复杂度为O(1)

故时间复杂度公式:T(N)=T(N/2)+O(1)   =>   T(N)=O(logN)

②普通方式求幂

     private static long pow2(int x, int n){
if(x == 0)
return 0;//0^n == 0
long p = 1;
for(int i = 0; i < n; i++)
p *= x;
return p;
}

显然,时间复杂度为O(N)

二,求解多项式乘法

公式:f(x,n) = a(0)x^0 + a(1)x^1 + a(2)x^2+...+a(n)x^n

比如:f(10,4)=a(0)10^0 + a(1)10^1 + a(2)10^2 + a(3)10^3+a(4)10^4

代码如下:

     public static long poly(int[] arr, int x, int n){
long sum = 0;
for(int i = 0; i <= n; i++){
sum += arr[i] * pow(x, i);
}
return sum;
} private static long pow(int x, int n){
if(n == 0)
return 1;
if(n == 1)
return x;
if(n % 2 == 0)
return pow(x * x, n / 2);
else
return pow(x * x, n / 2) * x;
}

Horner法则求解多项式乘法,参考:

     public static long poly2(int[] arr, int x, int n){//arr存储系数, x 表示基数, n 表示幂
long poly = 0;
for(int i = n; i >= 0; i--)
poly = poly * x + arr[i];
return poly;
}

对比采用Horner法则计算多项式乘法与这篇文章: 字符串转换成数字

 public int atoi(char[] s){
int result = 0;
for(int i = 0; i < s.length; i++)
result = result * 10 + s[i] - '0';// 相当于 poly2(...)中的 x=10
return result;
}

可以看出,二者有很大的相似性。其实,不难看出,字符串转换成数字使用的正是Horner法则。

由此,得到启发,在进制转换中,如:八进制转十进制,相当于 x = 8。

故可写出一个常用的进制转换程序,如下:

    //x 表示进制, 若x=8,表示将8进制转换成10进制
public static long convert(char[] arr, int x){
long result = 0;
for(int i = 0; i < arr.length; i++)
result = result * x + arr[i] - '0';
return result;
} //str 表示原来进制的数,如:convert("456", 8) 456 --> 302
public static long convert2(String str, int x){
long result = 0;
for(int i = 0; i < str.length(); i++)
result = result * x + Integer.valueOf(str.charAt(i) - '0');
return result;
}

十六进制转十进制,相当于 x = 16。

    public static long convert2(String str, int x){//x = 16
long result = 0;
char c;
str = str.toUpperCase();//"abF8"-->"ABF8"
for(int i = 0; i < str.length(); i++)
{
c = str.charAt(i);
if(c >= 'A' && c <= 'F')
result = result * x + (c - 'A') + 10;
else
result = result * x + c - '0';
}
return result;
}

因此,进制转换、字符串转换成数字、多项式求值都可以使用Horner法则来求解。

求幂运算、多项式乘法及Horner法则的应用的更多相关文章

  1. FFT求卷积(多项式乘法)

    FFT求卷积(多项式乘法) 卷积 如果有两个无限序列a和b,那么它们卷积的结果是:\(y_n=\sum_{i=-\infty}^\infty a_ib_{n-i}\).如果a和b是有限序列,a最低的项 ...

  2. 小白专场-多项式乘法与加法运算-python语言实现

    目录 题意理解 解题思路 多项式加法 多项式乘法 完整代码 题意理解 题目: 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一 ...

  3. AtCoder AGC019E Shuffle and Swap (DP、FFT、多项式求逆、多项式快速幂)

    题目链接 https://atcoder.jp/contests/agc019/tasks/agc019_e 题解 tourist的神仙E题啊做不来做不来--这题我好像想歪了啊= =-- 首先我们可以 ...

  4. [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)

    卷积 给定向量:, 向量和: 数量积(内积.点积): 卷积:,其中 例如: 卷积的最典型的应用就是多项式乘法(多项式乘法就是求卷积).以下就用多项式乘法来描述.举例卷积与DFT. 关于多项式 对于多项 ...

  5. 二分求幂/快速幂取模运算——root(N,k)

    二分求幂 int getMi(int a,int b) { ; ) { //当二进制位k位为1时,需要累乘a的2^k次方,然后用ans保存 == ) { ans *= a; } a *= a; b / ...

  6. 牛顿迭代,多项式求逆,除法,开方,exp,ln,求幂

    牛顿迭代 若 \[G(F_0(x))\equiv 0(mod\ x^{2^t})\] 牛顿迭代 \[F(x)\equiv F_0(x)-\frac{G(F_0(x))}{G'(F_0(x))}(mod ...

  7. [BZOJ3684][拉格朗日反演+多项式求幂]大朋友和多叉树

    题面 Description 我们的大朋友很喜欢计算机科学,而且尤其喜欢多叉树.对于一棵带有正整数点权的有根多叉树,如果它满足这样的性质,我们的大朋友就会将其称作神犇的:点权为\(1\)的结点是叶子结 ...

  8. 求幂&&快速幂&&位运算

    1.普通的求幂方法: 时间复杂度为O(n),对于比较大的数在1s限时内可能会TLE int pow(int base,int p){ int ans=1; for(int i=1;i<=p;i+ ...

  9. 【luogu P3803】【模板】多项式乘法(FFT)

    [模板]多项式乘法(FFT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求这两个多项式乘起来得到的多项式.(卷积) 思路 系数表示法 就是我们一般来表示一个多项式的方法: \(A ...

随机推荐

  1. [转帖] 读懂YML文件.. 书买了还没看完...

    Copy From https://www.cnblogs.com/CloudMan6/p/8370501.html   读懂 Deployment YAML - 每天5分钟玩转 Docker 容器技 ...

  2. html 響應式web設計

    RWD(響應式web設計)可以根據尺寸大小傳遞網頁,對於平板和移動設備是必須的. <html lang="en-US"> lang表示頁面的主要語言.http://ww ...

  3. iTunes 12.7 没有应用程序选项了,重新安装iTunes 12.6.3

    iTunes 12.6.3 下载地址: Mac http://t.cn/RO5rIfE Win 32 http://t.cn/ROtta1T Win64 http://t.cn/ROtta1n 安装好 ...

  4. docker --swarm启动2375端口监听

    首先要下载swarm docker pull swarm 然后停掉docker服务: service docker stop 然后启动deamon: sudo dockerd -H tcp://0.0 ...

  5. BZOJ 5249: [2018多省省队联测]IIIDX(贪心 + 线段树)

    题意 这一天,\(\mathrm{Konano}\) 接到了一个任务,他需要给正在制作中的游戏 \(\mathrm{<IIIDX>}\) 安排曲目 的解锁顺序.游戏内共有\(n\) 首曲目 ...

  6. linux运维、架构之路-linux文件属性

    1.查看文件属性 ls -lhi 文件属性详细说明 1. 第一列: inode索引节点编号 2. 第二列:文件类型及权限 3. 第三列:硬链接数 4. 第四列:文件或目录所属的用户,即文件的所有者 5 ...

  7. SharePoint 2013 Central Admin 不能打开

    当我准备打开CA时发现下面的错误: This operation can be performed only on a computer that is joined to a server farm ...

  8. 最长公共子序列LCS(POJ1458)

    转载自:https://www.cnblogs.com/huashanqingzhu/p/7423745.html 题目链接:http://poj.org/problem?id=1458 题目大意:给 ...

  9. CRT&EXCRT 中国剩余定理及其扩展

    前言: 中国剩余定理又名孙子定理.因孙子二字歧义,常以段子形式广泛流传. 中国剩余定理并不是很好理解,我也理解了很多次. CRT 中国剩余定理 中国剩余定理,就是一个解同余方程组的算法. 求满足n个条 ...

  10. cookie、locakstorage、sessionstorage的区别

      cookie localstorage sessionstorage 数据的生命周期 可以设置失效时间,一般默认为浏览器关闭后 若不被清除,则永久保存 存在于一次会话中,刷新页面数据仍然存在,但关 ...