算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作
算法的特性 :输入,输出,有穷性,确定性,可行性
算法具有零个或多个输入
算法至少有一个或多个输出
算法在执行有限步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成
算法的每一步骤都具有确定的含义,无二义性
算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成
算法设计要求
正确性,可读性,健壮性,时间效率低和存储量低
算法效率度量方法
事后统计方法:通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法的效率高低
缺陷:必须实现编好程序
时间比较依赖计算机硬件和软件
算法测试数据设计困难
事前分析估算方法:计算机程序编制前,依据统计方法对算法进行估算
消耗时间依赖:1 算法采用的策略,方法 2 编译产生的代码质量 3 问题输入的规模 4 机器执行指令的速度
函数的渐近增长:给定两个函数f(n) 和g(n),如果存在一个整数N,使得对于所有的n>N ,f(n)总是比g(n)大,那么我们说f(n)
的增长渐近快于g(n)
与最高次项相乘的常数并不重要
判断一个算法的效率时,函数中的常数和其他次要项常常可以忽略,更应该关注主项的阶数
算法的时间复杂度 :T(n) = O(f(n)) 它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。称作算法的渐近时间复杂度。
推导大O阶方法:
1 用常数1 取代运行时间中的所有加法常数
2 在修改后的运行次数函数中,只保留最高阶项
3 如果最高阶项存在且不是1,则去除与这个项相乘的常数
得到的结果就是大O阶
最坏情况运行时间:就是运行时间不会再坏了
平均时间 期望运行的时间
一般都是指最坏时间复杂度
算法空间复杂度
通过计算算法所需的存储空间实现,算法空间复杂度计算公式:s(n) = O(f(n)) n为问题的规模,f(n) 为语句关于n所占的存储空间函数