算法设计与分析
绪论:
计算:可由一个给定计算模型机械地执行的规则或计算步骤序列称为改计算模型的一个计算
算法:满足有穷性/终止性,确定性,能行性,输入,输出五个条件的计算。
问题:设Input和Output是两个集合。一个问题是Input×Output上的一个二元关系R,Input称为问题R的输入集合,Input的每个元素称为R的一个输入,Output称为问题R的输出或结果集合,Output的每个元素称为R的一个结果。
算法正确性:一个算法是正确的,如果它对于每一个输入都最终停止,而且产生正确的输出。
算法正确性证明:证明算法对所有输入都停止,证明对每个输入都产生正确结果。
循环不变量方法:证明主要结构是循环结构的宣发的正确性
循环不变量:数据或数据结构的关键性质
初始:循环开始前循环不变量成立
循环步骤:循环体每执行一次,循环不变量成立
终止:算法结束后,循环不变量保证算法正确
算法复杂性分析:
目的:预测算法对不同输入所需资源量
复杂性测度:时间,空间,I/O等,是输入大小的函数
用途:为求解一个问题选择最佳算法、最佳设备
需要的数学基础:离散数学,组合数学,概率论,代数等
需要的数学能力:建立算法复杂性的数学模型,数学模型化简
输入的大小:设Input是问题R的输入集合,R的输入大小是一个函数F:Input->N,N是正整数集合(把每个实例映射成一个自然数,把输入实例摆放到计算机的内存里所占用的存储单元的数量)
时间复杂性:一个算法对特定输入的时间复杂性是该算法对该输入产生结果需要的原子操作或“步”数,时间复杂性是输入大小的函数
空间复杂性:一个算法对特定输入的空间复杂性是改算法对该输入产生结果需要的存储空间大小
算法的设计方法:Divide-and-Conquer、Dynamic programming、Greedy Algorithms、Approximation Algorithms、Randomlized Algorithms、Tree Searching Strategies、On-Line Algorithms、Prune-and-Search、Genetic Algorithms、Parellel Algorithms
数学基础:
同阶函数集合:
低阶函数集:
高阶函数集:
严格低阶函数集:
严格高阶函数集:
并非所有函数都是可比的。
Floor和Ceiling函数:
求解递归方程的三个主要方法:
迭代方法:把方程转化为一个和式,然后用估计和的方法来求解
替换方法:先猜测方程的解,然后用数学归纳法证明
Master方法:求解型为T(n) = aT(n/b) + f(n) 的递归方程
Master定理: