2.4算法定义
算法:解决待定问题 求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
2.5算法的特性
输入:不一定有输入,可能不止一个
输出:一定有输出,可能不止一个
有穷性:不会无限循环,并在可接受的时间内完成
确定性:每一步都有确定的含义,不会出现歧义,相同输入只有唯一输出。
可行性:每一步都能通过执行有限次数完成
2.6算法设计的要求
正确性:
- 无语法错误
- 合法输入得正确输出
- 非法输入得满足规格说明的结果
- 刁难输入得满足要求的结果
可读性:便于阅读、理解、交流
健壮性:对不合法输入做出相关处理而不是产生异常或莫名其妙的结果
//高效率低储存量
2.7算法效率的度量方法
应当事前分析估算,将基本操作数量表示为输入规模的函数
2.8函数的渐进增长
更应关注最高阶项的阶数
2.9算法时间复杂度
算法的时间度量(大O记法):一般情况下,T(n)增长最慢的算法为最优算法。
【图片来自《大话数据结构》】
推导大O阶:
- 用常数1取代运行时间中所有加法常数
- 运行次数函数中只保留最高阶项
- 若最高阶项存在且不是1,则去除这个项的常数部分
2.11最坏情况与平均情况
平均运行时间:最有意义,为期望的运行时间
最坏运行时间:应用中的一种最重要的需求,一般提及的都是最坏运行时间
时间复杂度一般都是指最坏时间复杂度
2.12算法空间复杂度
//可以用空间来换取时间
空间复杂度:S(n)=O(f(n))
- n为问题的规模
- f(n)为语句关于n所占储存空间的函数
//复杂度一般指时间复杂度