python | 秦九昭算法详细介绍
一.算法简介
作用:
一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法
而秦九韶算法只需要n次乘法和n次加法。
意义:
该算法看似简单,其最大的意义在于将求n次多项式的值转化为求n个一次多项式的值。在人工计算时,利用秦九韶算法和其中的系数表可以大幅简化运算;对于计算机程序算法而言,加法比乘法的计算效率要高很多,因此该算法仍有极大的意义,用于减少CPU运算时间。
详细算法作用过程:
二、算法应用:
1、求多项式的值
from functools import reducedef func(factors, x):value = reduce(lambda a, b: a * x + b, factors)#a负责储存结果,b负责去集合里取值return valuedef qFun(factors,x):sum = factors[0]for i in range(len(factors)-1):sum=sum*xsum=sum+factors[i+1]return sumfactors = (3,2,4,5,6,3)
x=2
print(qFun(factors,x))
print(func(factors,x))
两个函数功能相同,但第一个高级点,第二个是傻瓜式实现
*plus*
help(reduce)结果是:
Help on built-in function reduce in module _functools:reduce(...)reduce(function, sequence[, initial]) -> valueApply a function of two arguments cumulatively to the items of a sequence,from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates((((1+2)+3)+4)+5). If initial is present, it is placed before the itemsof the sequence in the calculation, and serves as a default when thesequence is empty.中文解释下,就是操作一个集合,把一系列数迭代操作成一个数。
不理解就看蓝色字的例子:)
2.大整数取模(hdu 1212 Big Number)
(1)题意:
给你一个长度不超过1000的大数A,还有一个数值不超过100000的B,快速求A % B。
(2)分析:
由秦九昭算法可知,任意一个整数n = akak-1ak-2.......a2a1a0可以拆分为:
n = (((((ak)*10 + ak-1)*10 + ak-2)*10 + .......)*10 + a1)*10+a0
例如:1234 = ((1*10 + 2)*10 + 3)*10 + 4
则大整数取模就可以转化为n个多项式每步取模。
(3) 贴份代码:
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10000 + 7;
char str[maxn];
int Horner(int mod){//秦九昭算法int len = strlen(str);int ans = 0;for(int i = 0;i<len;i++){ans = (ans*10 + str[i] - '0')%mod;}return ans;
}
int main()
{int mod;while(scanf("%s%d",str,&mod)!=EOF){int num = Horner(mod);printf("%d\n",num);}return 0;
}
python | 秦九昭算法详细介绍相关推荐
- HDU1212(大数取模-秦九昭算法)
秦九昭算法: 把一个n次多项式f(x)=a[n]x^n+ a[n-1]x^(n-1)+-+a[1]x+a[0]改写成如下形式:f(x)=a[n] x^n + a[n-1]x^(n-1))+-+a[1] ...
- ACM数论----秦九昭算法
一.算法简介 一般地,一元n次多项式的求值需要经过(n+1)*n/2次乘法和n次加法,而秦九韶算法只需要n次乘法和n次加法.在人工计算时,一次大大简化了运算过程. 二.算法应用 1.大整数取模(hdu ...
- 【基础】秦九昭算法实现的多项式快速计算
秦九昭算法 图片来自搜狗百科 #include <iostream> using namespace std; void main() {int num, x;//num为多项式阶数,x为 ...
- UVA-10929-You can say 11(秦九昭算法+同余与模算术)
原题链接 1000位大数取余: 秦九昭算法+同余与模算术: 1314 = (((1)*10+3)*10+1)*10+4 ( a + b ) % n = ( ( a % n ) + ( b % n ) ...
- 秦九昭算法——MATLAB实现
一.引入 对于多项式而言,要计算时的函数值时,需要进行次乘法和n次加法,其时间复杂度为. 那我们该用一个什么用的方式来降低其时间复杂度呢? (1条消息) 一套图 搞懂"时间复杂度" ...
- 整数反转----秦九昭算法
题意 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0. 假设环境不允许存储 ...
- 计算多项式的值(秦九昭算法,clock()函数的使用)
/* clock()函数使用模板clock():捕捉从程序开始运行到clock()被调用所消耗的时间.这个时间单位是clock tick. 常数CLK_TCK:机器时钟每秒所走的时钟打点数 clock ...
- 秦九昭算法(霍尔(Horner)法则)
求下面式子的和: a0x0+a1x1+...+anxna_0x^0+a_1x^1+...+a_nx^na0x0+a1x1+...+anxn 如果我们按部就班的算,那么我们需要n(n+1) ...
- c/c++ 秦九昭算法
例:1010(二进制)一共4位,我们分解为4步. 一:0(第零位数)*2+1(第一位数)=1(运行数) 二:1(运行数)*2+0(第二位数)=2(运行数) 三:2(运行数)*2+1(第三位数)=5(运 ...
- 秦九邵算法,牛顿迭代算法,盛金公式
基础数学算法 1.牛顿迭代法 (1)为什么要牛顿迭代 (2)实现牛顿跌代 2.秦九邵算法 (1).历史由来 (2).算法介绍 3.盛金公式 1.牛顿迭代法 (1)为什么要牛顿迭代 啥是牛顿迭代法?大大 ...
最新文章
- /etc/fstab 文件解释
- 03-UITableView索引栏显示自定义图片
- SQL 查询数据库中包含指定字符串的相关表和相关记录
- 一分二功率分配器_一文学会微波功率分配器
- 前端切换视图_前端架构 101(五):从 Flux 进化到 Model-View-Presenter
- knn k的选取_经典算法(四):KNN
- 为防范“手机低头族”出交通事故 韩国开发行人警示系统
- 三条中线分的六个三角形_三角形中的边长和线段(下)
- selenium滑块操作(基础)
- 数值计算之 梯度向量和梯度矩阵,雅可比矩阵,海森矩阵
- Asp.Net Core 系列教程 (一)
- 计算机维护岗位主要职责怎么写,计算机维护岗位职责.doc
- 安卓开发颜色以及对应代码(转载)
- 转:创业者一手货:我是怎么在网上卖鱼的?
- 【课程设计】基于图像处理的一维条形码识别-含matlab源码
- opengl 读取obj模型
- IPv4地址不够怎么解决
- 三维切面(水平面、冠状面、矢状面)的几种操作
- PythonOCC基础使用:曲面建模
- EPLAN自动线号放置
热门文章
- SecureCRT 不能输入命令及回车键不能用
- 智能语音识别--方案实现--具体过程
- 人脸识别小区门禁系统_小区人脸识别门禁系统
- 【观察】PowerMax:高端存储,中国制造
- 评测|HPE Nimble AF全闪存系列,诠释真正的高端存储
- 多模态融合(三)MFAS: Multimodal Fusion Architecture Search
- Redis 实战之多节点分布式锁【SpringBoot + RedLock】
- 2005年九大受宠技术:TD-SCDMA
- 【南阳OJ分类之语言入门】80题题目+AC代码汇总
- hdu6184 判断三元环