一、引入
对于多项式而言,要计算时的函数值时,需要进行次乘法和n次加法,其时间复杂度为.
那我们该用一个什么用的方式来降低其时间复杂度呢?
(1条消息) 一套图 搞懂“时间复杂度”_12 26 25的博客-CSDN博客https://blog.csdn.net/qq_41523096/article/details/82142747?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168077800216782427453724%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168077800216782427453724&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-82142747-null-null.142^v81^insert_down1,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6&spm=1018.2226.3001.4187这位大佬对时间复杂度的讲解很透彻,大家可以看看
二、秦九昭算法(Horner算法)
下面我们用著名的秦九昭算法来对这个多项式进行简化:
STEP1:提取x
STEP2:继续提取x
STEP3:继续提取x,直到
到这里我们不妨令
则有
...
综上,我们在求多项式时,首先计算最内层括号里的一次多项式,接着不断的往外计算最终可以得到计算结果。
使用秦九昭算法只需要做n次乘法,n次加法,其时间复杂度为
三、MATLAB实现
这是一个很常用的递归思想文章来源:https://www.toymoban.com/news/detail-728522.html
function f=Horner(A,x) %A为系数向量
n=length(A); %确定该多项式的最高次数
f=A(1); %公式里的u0(an)
for i=1:n:
f=f*x+A(1+i) %A(1+i)即为公式里的(an-1)
end
end
在读大学生,做一些学习记录嘿嘿嘿。大家在看的过程发现什么错误,欢迎大家批评指正!文章来源地址https://www.toymoban.com/news/detail-728522.html
到了这里,关于秦九昭算法——MATLAB实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!