这片文章主要是对概念的阐述记录
算法:解决问题的方法,是一种解决问题的清晰的指令,即:对某个问题,在一定规模的输入,在有限的时间之内,
获得符合要求的输出
算法特点:
1、有 >= 0 个输入
2、有 >= 1 个输出
3、算法指令清晰,无歧义
4、算法中的每条指令的执行次数和时间都是有限的
程序:算法的语言实现,可以是死循环,而算法必须是清晰的、有限的,所以算法不能是死循环
算法表示:
1、自然语言(汉字描述)
2、计算机语言:c++, c, java ---
3、类计算机语言(伪码)
算法的复杂度(C(A,N,I)):代码执行时占用的计算机资源(空间,时间)的多少
1)空间复杂度:S(A,N,I),简记 S(N, I)
1、A表示某个算法(可省略不写)
2、N表示输入规模
3、I表示输入实例
2)时间复杂度:T(A,N,I),简记 T(N, I)
一般情况下,代码执行时间与具体的环境和操作系统等密切相关,所以将时间指标转化为主要操作执行
的次数来衡量
主要运算(元运算):一般是比较、加法(A)、乘法(P),位置主要分布在循环中
定义循环变量,循环变量的 ++ 操作一般不算在内
最坏复杂度:max(I ∈ Dn) (T(N, I)) = max(I ∈ Dn) ∑ei * ti // ei 每个元运算的次数
// ti 每个元运算的时间
// 一般只统计一种元运算来说明复杂度
= Tmax(N, I*) // I*指占用空间最大的实例
记作 Tmax(N)
最好复杂度:min(I ∈ Dn) (T(N, I)) = min(I ∈ Dn) ∑ei * ti
= Tmin(N, I~) // I~ 指占用空间最大的实例
注意:~ 应该画在 I 的上面
记作 Tmin(N)
平均复杂度:Tavg(N) = ∑p(I) * T(N, I) // P(I) 实例 I 出现的概率
1、程序是算法的实现,算法是程序的灵魂
程序 = 数据结构 + 算法
2、算法的复杂度有时与输入实例密切相关,这时就要考虑最坏、最好、平均复杂度。
3、A(n) 表示加法工作量,P(n) 表示乘法工作量
4、一般用来描述算法通常只描述他的最大的复杂度,最小的复杂度意义不是很大
5、代码量多的不一定复杂,代码量少的也不一定简单,公式法也不一定总是适用