1.1 概述
1.算法的定义(名词解释)
算法是解决问题方法的精确描述,是指完成一个任务所需的具体步骤和方法。
2.算法的三大要素(填空/简答)
①待解问题的描述:待解问题的描述应精确、简练、清楚,使用形式化模型刻画问题是最恰当的。例如,使用数学模型刻画问题是最简明、严格的,一旦问题形式化了,就可依据严格的模型对问题求解。
②算法设计:算法设计的任务是对各类具体问题设计良好的算法及研究设计算法的规律和方法。常用的算法有穷举搜索法、递归法、回溯法、贪心法、分治法等。
③算法分析:算法分析的任务是对设计出的每一个具体的算法,利用数学工具,讨论各种复杂度,以探讨某种具体算法适用于哪类问题,或某类问题宜采用哪种算法。
1.2 算法设计原则
1.算法的定义(填空/简答)
① 正确性:算法的正确性是指算法能否正确的解决一个问题。如果一个算法自身有缺陷或者算法不适用于该问题,那么算法将不会解决问题。
② 确定性:算法的确定性是指算法的每个步骤必须含义明确,对于每种可能的情况,算法都可能给出确定的操作。采用同一种算法,在同样的条件下无论计算多少次,始终能得到确定的结果。
③ 清晰性:一个良好的算法必须思路清晰,结构合理。算法的设计要模块化。每个模块都可以独立地编写、测试,最后组装完成整个算法。使算法结构清晰,简单易读,容易理解、测试和修改。
1.3 算法复杂性的度量
1.相关名词(名词解释)
①问题的规模:用一个与问题相关的整数量来衡量问题的大小,这个整数量表示输入数据量的尺度。
②时间复杂性:利用某算法处理一个问题规模为n的输入所需要的时间,是n的函数,记为T(n)。
③空间复杂性:利用某算法处理一个问题规模为n的输入所需要的存储空间,是n的函数,记为S(n)。
④元运算:对于任何计算步骤,不管输入数据或执行的算法,它的代价总是以一个时间常量为上界,则称该计算步骤为元运算。
2.固定大小运算对象上元运算的例子(判断/填空)
① 算术运算,包括加减乘除;
② 比较和逻辑运算;
③ 赋值运算,包括遍历表和指针赋值。
3.表达时间复杂性的四个符号(判断/填空)
① O符号:O表示算法的运行时间,但是不一定是实际运行时间,可能只是运行时间的上限。
② Ω符号:Ω符号在运行时间的一个常数因子内提供一个下界。
③ Θ符号:每一个元运算需要的常量时间,给出算法运行时间增长率的一个精确描述。
④ o符号:为了说明复杂性类相同的两个函数属于不同的类。
1.4 最优算法
如果可以证明任何一个求解问题A的算法必定是Ω(f(n)),则把在O(f(n))时间内求解问题A的任何算法称为最优算法。(该“最优算法”没有考虑空间复杂度,因此没有绝对意义上的最优算法)
1.5 算法的评价
1.估算算法运行时间的基本方法(填空/简答)
① 计算迭代次数:运行时间常常和循环次数成正比。
② 计算基本运算的频度:如果算法中一个元运算具有最高频度,所有其他元运算频度均在其频度的常数倍内,则称这个运算为基本运算。
③ 使用递推关系:二分搜索算法
2、基本运算中的若干候选者(填空/简答)
① 在分析搜索和排序算法时,如果元素比较是元运算,则可选其为基本运算;
② 矩阵乘法算法中,选择数量乘法运算;
③ 遍历一个链表,可以选择设置或更新指针的运算;
④ 在图的遍历中,可以选择访问节点的动作和对被访问节点的计数