首页 > 其他分享 >2023-02-16-horner-scheme

2023-02-16-horner-scheme

时间:2023-11-04 22:23:05浏览次数:33  
标签:02 int 多项式 cdots 秦九韶 算法 horner scheme

layout: post
title: 秦九韶算法(霍纳法则)
date:   2023-02-16 10:30:00 +0800 
categories: Algorithm
tags: C

介绍

秦九韶算法是中国南宋时期的数学家秦九韶提出的一种多项式简化算法。在西方被称作霍纳算法。秦九韶(约公元1202年-1261年),字道古,南宋末年人,出生于鲁郡(今山东曲阜一带人)。

19世纪初,英国数学家威廉·乔治·霍纳重新发现并证明,后世称作霍纳算法(Horner's method、Horner scheme)。

算法介绍

这个算法用于多项式 $\sum_{i=1}^n A_iX^i$ 求值,即求 $f(x)=a_nxn+a_{n-1}x+{\cdots}+a_1x+a_0$ 的值。该多项式可以改写成以下形式:

$f(x)$
$=a_nxn+a_{n-1}x+{\cdots}+a_1x+a_0$
$=(a_nx{n-1}+a_{n-1}x+{\cdots}+a_2x+a_1)x+a_0$
$=((a_nx{n-2}+a_{n-1}x+{\cdots}+a_3x+a_2)x+a_1)x+a_0$
$=({\ldots}((a_nx+a_{n-1})x+a_{n-2})x+{\cdots}+a_1)x+a_0$

这样,可以先计算最内层括号内一次多项式的值,即 $v_1=a_nx+a_{n-1}$,然后由内向外逐层计算一次多项式的值,即:

$v_2=v_1x+a_{n-2}$
$v_3=v_2x+a_{n-3}$
${\cdots}$
$v_n=v_{n-1}x+a_0$

这样就会将一个 n 次多项式 $f(x)$ 的值转化为求 n 个一次多项式的值。对一个 n 次多项式,至多做 n 次乘法和 n 次加法。

算法实现

int horner_scheme(int *an, int n, int x)
{
    int anx = 0;
    for (int i = n; i >= 0; i--) {
        anx = anx * x + an[i];
    }
    return anx;
}

参考
百度百科-秦九韶算法

标签:02,int,多项式,cdots,秦九韶,算法,horner,scheme
From: https://www.cnblogs.com/ttworks/p/17809896.html

相关文章

  • HHKB Programming Contest 2023(AtCoder Beginner Contest 327)
    HHKBProgrammingContest2023(AtCoderBeginnerContest327)A.ab解题思路:模拟即可。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;voidsolve(){intn;cin>>n;strings;cin>>s;for(inti=0......
  • 2023.11.4——每日总结
    学习所花时间(包括上课):9h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习;我了解到的知识点:1.软考知识明日计划:学习......
  • 鹏程杯子2023 pwn
    主要就是修改stdin的最后几位,使他变为write,然后泄露libc,为所欲为即可。本人是卡在不知道stdin那里可以修改。然后使用一下jmpqwordrbp这个gadget0x400a93那个。fromevilbladeimport*context(os='linux',arch='amd64')context(os='linux',arch='amd64',log_level='......
  • 20211128《信息安全系统设计与实现》第五章学习笔记
    一、任务内容自学教材第5章,提交学习笔记(10分)1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:“请你以苏格拉......
  • Python02
    判断语句bool类型#bool类型bool_1=Truebool_2=Falseprint(f"bool_1变量的内容是:{bool_1},类型是:{type(bool_1)}")print(f"bool_2变量的内容是:{bool_2},类型是:{type(bool_2)}")#比较运算符的使用#==,!=,>,<,>=,<=num1=10num2=10print(f"10==10的结果是:{nu......
  • 将语料文本写入数据库20231104
    importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;publicclassBaseDao{publicConnectionconn=null;publicPreparedStatementps=null;publicResultSetrs=null......
  • # 学期2023-2024-1 20231401 《计算机基础与程序设计》第六周学习总结
    学期2023-2024-120231401《计算机基础与程序设计》第六周学习总结作业信息这个作业属于哪个课程2023-2024-1-计算机基础与程序设计这个作业要求在哪里2023-2024-1计算机基础与程序设计第六周作业这个作业的目标自学教材:计算机科学概论第7章并完成云班课测试《......
  • 考研数学笔记更新(2023年11月3日)
    奇函数必须关于原点斜对称(一般情况下奇函数在原点处都有定义)判断变上限积分函数是否在某点处可导的三种方法示例......
  • 20211316郭佳昊 《信息安全系统设计与实现(上)》 第九周学习总结
    一、任务要求[1]知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)我在学****知识点,请你以苏格拉底的方式对我进行提问,一次一个问题核心是要求GPT:请你以苏格拉底的方式对我进行提问然后GPT就会......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第八周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第八周学习笔记一、任务要求自学教材第5章,提交学习笔记(10分),评分标准如下:1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识......