首页 > 编程知识 正文

多项式知识点整理,多项式知识点归纳

时间:2023-05-03 07:57:03 阅读:212839 作者:4995

时间复杂度通俗的理解:

时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n2)的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(an)的指数级复杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2n2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O (n3+n2)的复杂度也就是O(n3)的复杂度。因此,我们会说,一个O(0.01n3)的程序的效率比O(100*n2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n3)的复杂度将远远超过O(n2)。我们也说,O(n100)的复杂度小于O(1.01n)的复杂度。

多项式的理解:

对于变量n,5n2+2n+1这种就叫做多项式。前面再加上n3甚至一路增加到nm,只要m是个常量,就都是多项式。因为这样的式子合并同类项什么的简化到最后还是会有好几个含n的项,所以叫做多项式。然后再说问题大小n。其实字面理解就对了…也就是说,我们要解决一个问题,这个问题里面有n个“东西”要处理,这个问题的大小就是n。比方说,我们要把5、7、9这三个数字排序,问题大小就是3。我们要把全世界人类里面的男的找出来,问题大小就是全世界人口数。然后是多项式倍数。这个倍数是指,对于一个变量n,有这样一个倍数,它的值是n的一个多项式。比方说,我们假设n=5,那么n2+10=52+10=35,这个35就是n的一个多项式倍数。因为对于n有无限多种多项式组合,所以它也就有无穷多个多项式倍数。多项式倍数之所以特殊,主要是由于其值随n增大而加速增大的特性。如果是常数时间的话,意思就是无论n是什么值运算所花时间都一样。线性时间则是说多大n就花多少时间。多项式时间则意味着随着n增大,n每增加1所花的时间增长越来越多。对于n2-3这样一个多项式时间来说,n=2的时候可能只要花1的时间,甚至低于线性时间,但n=4的时候可能就要花13的时间了,可以想象再大一些这个数值会变得巨大。但是它又不及指数时间增长快(mn),且mn不能写成多项式形式,所以它又和多项式时间有区别。而且,这个增长变速的特性是不受参数限制的。也就是说,无论你把m*n2的m这个常量改成多么微小的一个值,总有一个n让这个多项式的值大于n,也就是说到这一刻多项式时间的算法耗时高于了线性时间的算法,之后耗时差距一定会越来越大。这一特性是多项式本身的性质决定的。类似,指数级时间也是如此,无论你将n的一个多项式中的所有常量设置到多大,总有一个n的指数值大于多项式值。所以我们说指数时间大于多项式时间,我们说多项式时间大于线性时间,我们还说线性时间大于常数时间,一定要注意这些大于并不是对于所有n的所有情况成立的,只是在说随着n增加前者一定超过后者。

总结:

一种是O(1),O(log(n)),O(na)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(an)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。