算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。
为什么把数据结构和算法一起说?
想想罗密欧与朱丽叶,梁山伯和祝英台,少了一个你总会觉得奇怪吧。
算法的五个基本特性:
- 输入:有0个或多个输入;
- 输出:有1个或多个输出;
- 有穷性:步骤有限,不能无穷循环下去;
- 确定性:有确定的含义,不能出现二义性;
- 可行性:每一步都能通过有限次数完成。
算法设计的要求:
- 正确性:能正确反映问题,得到问题的正确答案;
- 可读性:便于阅读、理解和交流;
- 健壮性:即使输入不合法,算法也能处理,而不是出现异常或中止;
- 时间效率高和存储量低:像生活中人们所希望的花最少时间,办最大的事。
算法效率的度量方法:
- 事后统计法:利用测试好的程序和数据,用计算机测试运行时间判断算法的优劣。这种方法有很大缺陷,必须事先设计好程序,风险大;时间很可能依赖于计算机硬件配置;算法测试的数据选择困难,如数据量大小会影响运行时间。
- 事前分析估算法:在程序编制前,进行估算。取决于以下因素:算法采用的策略、方法(算法好坏的根本);编译产生的代码质量(软件);问题的输入规模;机器指令执行的速度(硬件条件)。
算法时间复杂度推导方法:
- 用行数1取代运行时间中的所有加法常数;例如,f(n)=1,f(n)=5等的时间复杂度都是O(1),也称为常数街;
- 在修改后的运行次数函数中,只保留最高阶的项;
- 如果最高阶存在且不是1,则去除与这个项相乘的常数。
得到的结果就是大O阶。