一、引入
对于多项式而言,要计算时的函数值时,需要进行次乘法和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://uudwc.com/A/dby2v
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://uudwc.com/A/dby2v