您的位置:首页 > 其它

什么是算法?(一)参考浙大陈越教授

2019-02-27 17:33 106 查看

算法(Algorithm)

通俗的讲,算法是指解决问题的一种方法或一个过程.更严格的讲,算法是由若干条指令组成的有穷序列.需满足以下5条性质:

1.输入;2输出;3.确定性;4.有限性;5.可行性 

什么是好的算法?

空间复杂度S(N)和时间复杂度T(N)---此处引用上一节"什么是数据结构"的两个函数

第一个:PrintN函数---空间复杂度S(N)

递归方法:他在内存里占用空间的数量实际上是跟我们这个原始的N成正比的.也就是S(N)=C*N.(C是常数).当N非常大时,而你的程序可用空间有限时,就会发生非正常退出.

for循环方法:只使用了临时变量和一个for循环,没有涉及到任何程序调用的问题,所以不管N(问题规模)有多大,他占用的空间都是固定的--也就是一个N.

第二个:求多项式值---时间复杂度T(N)

须知:机器运算加减法的速度比乘除法的速度要快很多,所以我们我们基本上就数一个函数做了多少次乘除法

秦九韶法:

 for(int i=n;i>0;i--)
    {
        p=a[i-1]+p*x; 
    }

乘法次数:n

T(N)=c*N

公式法: 

for(int i=1;i<=n;i++)
    {
        p+=(a[i]*pow(x,i)); 
    }

乘法次数:(1+2+3+...+n)=(n*n+n)/2次

T(N)=c1*N*N+c2*N

继续回到什么是好算法?

在分析一般算法的效率时,我们经常关注下面两种复杂度:最坏情况复杂度和平均复杂度.但最关心的是最坏情况复杂度.

复杂度的渐进表示法

以下设f(N),g(N)是定义在正数集上的正函数.如果存在正常数C和自然数N',使得当N>=N'时有f(N)<=g(N),则称函数f(N)当N充分大时上有界,且g(N)是他的一个上界.记作f(N)=O(g(N)).

例如:3N=O(N). N+1024=O(N).  2*N*N+11*N-10=O(N*N)

不同大小的问题规模在不同算法复杂性函数下的运行时间

不同大小的问题规模在不同算法复杂性函数下的大小

  几个常见函数图像

                                                                                                                                                   ---未完持续

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: