一元多项式相乘的算法?

McuDesign 2010-11-23 10:55:13
书上只是简单的讲了一下,然后就给出了代码。。但是代码看了三个小时了,看得头晕脑涨的。没看懂。。。
哪位大虾给帮我讲一下不。非常感谢。。。

、通过链表实现

A(X)和B(X)是两个一元多项式,是按升幂排列的。。首先求出它们的最高幂之和MaxExpn..然后用一个变量k.用一个for循环
for(k=MaxExpn;k>=0;k--)
{ ====}

是通过这样来实现这个算法的。。

但是,看了半天看不懂,哪位大虾能帮忙简单讲解一下这个算法是怎么运作的不?非常感谢。。
...全文
595 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnmhx 2011-04-27
  • 打赏
  • 举报
回复
16楼,需要多学啊!
The method is particularly fast on processors supporting a single-instruction shift-and-addition-accumulate. Compared to a C floating-point library, Horner's method sacrifices some accuracy, however it is nominally 13 times faster (16 times faster when the "canonical signed digit" (CSD) form is used), and uses only 20% of the code space.[1]


cfvmario 2011-04-25
  • 打赏
  • 举报
回复
霍纳算法是指用累乘的方法计算多项式的值吧。。和乘法没有直接关系吧
另外确实没有必要去用for k的循环
直接用两个乘数多项式循环就行……只不过是把乘出来的值加到正确的次数上
另外10L的思想……你得先给个多项式类的声明啊,不然怎么看
cnmhx 2011-04-25
  • 打赏
  • 举报
回复
不要把自己绕进去了。
对于存储从最低阶到最高阶系数的每个地址,将属于其的系数累加即可。
事实上,中间一个地址累加次数最多,头尾只有一个。
showjim 2011-04-25
  • 打赏
  • 举报
回复
看楼主的描述,循环中间应该是个双指针的循环,使两指针系数和为k
antion692980794 2011-04-23
  • 打赏
  • 举报
回复
第一次贴代码 不成功啊。。。。悲催的
antion692980794 2011-04-23
  • 打赏
  • 举报
回复
我只有用C++实现的,看看能否帮助LZ
这里用了比较占空间的方法,但是思路还算清晰,好理解
就是用左多项式(被乘数)的每一个项去乘右多项式,得到的新的多项式进行累加。
当然,前提是实现了加法运算。对了,还有重载了=。
[code=C/C++]
Polynomial operator *(const Polynomial &Poly1,const Polynomial &Poly2)
{
Polynomial Poly3(Poly1);//复制poly1
Polynomial Poly4(Poly1);
int i=1;
LinkNode *p1,*p2;
p2=Poly2.head->next;//链表是带头结点的
while(p2!=NULL)
{
p1=Poly3.head->next;
while(p1!=NULL)
{
p1->mod=p1->mod*p2->mod;//
p1->exp+=p2->exp;
p1=p1->next;
}
p2=p2->next;
if(i>1)//第二次之后进行累加
{
Poly4=Poly4+Poly3;//累加

}
else
Poly4=Poly3;//第一次,不用累加
Poly3=Poly1;//这里要注意,每次乘累加完之后,这个多项式要重新和左多项式一致
i++;
}
return Poly4;
}/code]
SuperFC 2011-04-23
  • 打赏
  • 举报
回复
最小二乘法的基本原理和多项式拟合
cnmhx 2011-04-23
  • 打赏
  • 举报
回复
楼主,好好捉摸捉摸这个经典算法。
外国人称之为霍纳算法,中国人秦韶久早霍纳几百年前就发现了,而且比霍纳的工作更系统更严谨。
但故事还远未结束。
  • 打赏
  • 举报
回复
学算法先要把思想弄懂,写代码次之。思想懂了,写代码就是你的语言运用能力问题了
djh512 2010-11-26
  • 打赏
  • 举报
回复
你先做一个例子 两个链表合并的
其实相加就是 次数相同的项相加
不同的项就把这个合并进去
McuDesign 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 faithzzf 的回复:]
其实就是合并同类项,指数范围已经确定,然后如果A(X)中某一项和B(X)中某一项,指数相加会等于K的,就把他们系数相乘的结果加到原来指数等于K的系数中
[/Quote]
这个好像挺有道理的、、我试试看、
McuDesign 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kingbigeast 的回复:]
把具体代码贴出来才会有人帮你。
[/Quote]
也不是具体代码、如果用这个方法实现过的人、一看我描述的那些东西、就知道是什么意思了、、没用过这个方法的人、我把代码帖出来也没用是不是嘛、、
yyfhz 2010-11-24
  • 打赏
  • 举报
回复
for(k=MaxExpn;k>=0;k--) //不用说,最后的结果一定是某个指数不大于MaxExpn的多项式,因此只要依次求从MaxExpn到0的各个分项的系数就可以了。
{
//后面估计会是这么一个思路,不过如果是用链表的话,可能还要增加一些链表定位的代码--如果是双向链表的话,可能会简单一些。
result[k] = 0;
for (i=k; i>=0; i--) {
result[k]+= a[i]*b[k-i];
}
}
Oo纳兰筱DoO 2010-11-24
  • 打赏
  • 举报
回复
有代码不?
flysnowhite 2010-11-24
  • 打赏
  • 举报
回复
多项式相乘和多位数相乘基本类似,总结其中的规律,用循环就可以实现了。如果采用链表,加上链表实现过程;如果调用系统库就更简单了。
faithzzf 2010-11-24
  • 打赏
  • 举报
回复
其实就是合并同类项,指数范围已经确定,然后如果A(X)中某一项和B(X)中某一项,指数相加会等于K的,就把他们系数相乘的结果加到原来指数等于K的系数中
kingbigeast 2010-11-23
  • 打赏
  • 举报
回复
把具体代码贴出来才会有人帮你。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧