目标:掌握衡量算法效率的时间复杂度和空间复杂度概念, 以及算法的最好、平均和最坏情况时间复杂度,渐进表示法。
1、算法是指解决问题的一种方法或一个过程。
算法是对特定问题求解步骤的一种描述,是指令的有限序列
2、算法的5个特征:
输入:0个或多个输入。
输出:至少产生一个输出。
确定性:每一条指令都有确切的定义,无二义性。
有穷性:必须执行有限步之后终止。
可行性:算法的每一条指令都必须足够基本。
3、一个好的算法应具有的特性:正确性、鲁棒性、简明性、高效性。
4、算法的描述方法:自然语言、流程图、程序设计语言、伪代码。
5、冒泡排序:属于基本交换思想的排序方法。它将相邻的两个元素加以比较,若左边元素值大于右边元素值,则将这两个元素交换;若左边元素值小于等于右边元素值,则这两个元素位置不变。右边元素继继和下一个元素进行比较,重复这个过程,直到比较到最后一个元素为止。
冒泡排序的伪代码:
BUBBLE-SORT(A)
for i <- 1 to length[A]
do for j <- length[A] downto i + 1
do if A[j] < A[j – 1]
then exchange A[j] <-> A[j – 1]
6、语言选择(从C到C++)
C语言中没有bool类型,C++语言中,增加了bool基本类型
C语言中用结构体定义变量:
struct 结构体名 变量名
C++中“struct”可以省略
7、函数重载:C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以。
函数重载本质上说还是定义了三个功能相同、函数体相同的函数、仍然不够节省代码。
9、程序是算法用某种程序设计语言的具体实现,程序可以不满足有穷性。
10、算法分析:对算法的执行时间和所需空间的估算。
11、算法确认:
①算法确认:确认一个算法是否正确的活动。
②算法证明:使用数学方法证明算法的正确性。
③程序测试:是指对程序模块或程序总体,输入事先准备好的样本数据(称为测试用例),检查该程序的输出,来发现程序存在的错误及判定程序是否满足其设计要求的活动
12、算法求解问题的过程
13、影响程序运行时间的因素主要有:
①程序所依赖的算法;
②问题规模和输入数据;
③计算机系统性能。
14、最常见的多项式时间算法的渐近时间复杂度
O(1)<O(log n)<O(n)<O(nlog n)<O( )<O(
)
最常见的指数时间算法的渐近时间复杂度
O( )<O(n!)<O(
)
15、渐近表示
①大O记号:设函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数c和 ,使得当n≥
时,有f(n)≤cg(n),则记做f(n)=O(g(n)),称为大O记号。
该算法的运行时间不会超过g(n)的某个常数倍。g(n)是该算法运行时间的上界。
②Ω记号:设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在两个正常数c和 ,使得当n≥
时,有f(n)≥cg(n),则记做f(n)=Ω (g(n)),称为Ω记号。
该算法至少需要g(n)的某个常数倍大小的时间量。g(n)是该算法运行时间的下界。
③记号:设有函数f(n)和g(n)是定义在非负整数集合上的正函数,如果存在正常数
和
使得当n≥
时,有
g(n)≤f(n)≤
g(n),则记做f(n)=
(g(n)),称为
记号。
该算法实际运行时间大约为g(n)的某个常数倍大小的时间量。