什么是算法?(一)参考浙大陈越教授
算法(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)
不同大小的问题规模在不同算法复杂性函数下的运行时间
不同大小的问题规模在不同算法复杂性函数下的大小
几个常见函数图像
---未完持续
- 什么是算法?(二)参考浙大陈越教授
- 什么是ADC的参考电压,为什么需要参考电压?
- 什么是优秀的程序员?-- 参考分类
- Linux C 函数参考之数据结构及算法篇
- 漫画算法:什么是跳跃表?
- 关于 队列(C语言) ——(参考算法导论)
- 快速排序--(参考算法导论p146)
- 多重背包中多次背包 O(VN) 算法1 (单调队列优化) 带参考程序
- 20万、50万、100万的算法工程师,到底有什么区别?
- 漫画算法:什么是 B+ 树?
- MD5 Collision Generator(根据王小云教授的算法写的MD5碰撞的程序[c源代码])
- 一种H.264高清视频的无参考视频质量评价算法(基于QP和跳过宏块数)
- unity shader实现中枪散红效果,(参考别人算法)
- 百度权重是什么?百度算法怎么算?
- 参考微信红包的抢红包算法
- 什么是算法?
- 百度闪电算法什么时间开始
- 八大排序经典算法(图解+参考源代码)
- 大牛,求一个最值,你能提出什么好的算法么
- 推荐系统常用的算法参考