关于多项式求值的秦九韶算法的本质的探讨

 

            计算数学因为利用计算机解答计算问题而著名,即用机器的有限解答数学的无限、机器的离散解答数学的连续。这里面用到的核心方法就是近似,而近似就必然会产生误差,所以误差分析几乎成为计算数学首先关心的问题,几乎每一本数值分析的数首先讲的就是误差分析。

            计算是为了得到正确的结果,而机器计算是为了减轻人类的痛苦,节省时间、降低成本,让人在繁琐的计算中解脱出来,然后去从事更具有创造力的工作。所以,计算数学关心的核心问题是寻找误差可控的算法,使得计算在时间和空间上消耗的代价都更能让人满意。想比之下,时间比空间更加可贵,所以,算法的重点是降低在时间上的代价。

            所以,每一本计算数学的书中提到的算法(二分、迭代等),核心问题都是在降低时间的复杂度。和我们学习的数据结构与算法课程不同的是,后者更倾向于同时关注时间和空间的代价,尤其是要构造合理的数据结构以便使得空间损耗更加的合理,然后再构造合适的算法以降低时间的代价,有时算法也能同时降低空间的损耗。

            对于科学工作者,时间是无价的,科学计算要准且快;而对于程序员来说,他们更关心机器本身,所以程序员要求准、快、省。

 

====================================================================================

 

             以上算是对计算数学中的算法和普通算法课的一个侧重点的对比吧。

             既然,计算数学中的算法核心是在误差可控下降低时间复杂度,那么就以多项式的计算为例来说明这一点吧。

             秦九韶算法被提出的目的,是为了让多项式求值变得容易,让运算步骤变得更少,但是我一直以来就对这种算法能够减少运算步骤的本质原因着迷------为什么它就能减少步骤?他是基于一个什么样的最原始的思想?而“证明”是不能为我解答这些疑惑的。于是,我从最简单的多项式一步一步的观察,然后再从秦九韶算法的一般式去观察,发现秦九韶算法的展开式(a1*X+a2)X+a3比普通式明显多的东西是“()”,括号是能够导致运算步骤减少的主要原因。而括号意味着分配,就是说,秦九韶算法的来源是基于乘法分配率的,比如a*c+b*c=(a+b)*c.

           详细考察a*c+b*c=(a+b)*c,我们会发现,等号右边明显少了一次乘法,所以我们敢说乘法分配律的最大意义就在于能够减少运算次数。

           那么,秦九韶算法本质就是乘法分配律的使用,而乘法分配律的本质就在于能够减少运算次数;秦九韶算法之所以能够最大量的减少运算次数,是因为它使得乘法分配律的使用达到最大化。因此,可以从秦九韶算法的本质探讨中得到启发,不管计算什么样的式子,尽可能多得使用乘法分配律,可以大大地降低运算次数。

 

===================总结============================================================

 

          认清本质,有助于我们能够使用更为广泛的方法去解决更多的问题。

              

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数学---上帝的规则)