文章目录
  1. 1. 概述
  2. 2. 算法的特性
    1. 2.1. 输入输出
    2. 2.2. 有穷性
    3. 2.3. 确定性
    4. 2.4. 可行性
  3. 3. 算法设计的要求
    1. 3.1. 正确性
    2. 3.2. 可读性
    3. 3.3. 健壮性
    4. 3.4. 时间效率高和存储量低
  4. 4. 算法效率的度量方法
    1. 4.1. 事后统计方法
    2. 4.2. 事前分析估算方法
  5. 5. 算法时间复杂度
    1. 5.1. 算法时间复杂度定义
    2. 5.2. 推导大O阶方法
    3. 5.3. 算法常见时间复杂度
  6. 6. 算法空间复杂度
  7. 7. 总结

概述

算法是解决特定问题求解步骤的描述,在计算中表现为指令的有限序列,并且每条指令表示一个或多个操作。

算法的特性

输入输出

算法具有零个或多个输入。

算法至少有一个或多个输出。

有穷性

指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

确定性

算法的每一步骤都具有确定的含义,不会出现二义性。

可行性

算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。

算法设计的要求

正确性

算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义行,能正确反映问题的需求,能够得到问题的正确答案。

可读性

算法设计的另一目的是为了便于阅读、理解和交流。

健壮性

当输入数据不合法时,算法也能做出相关处理,而不是产生异常或莫名奇妙的结果。

时间效率高和存储量低

算法应该尽量满足和时间效率高和存储量低的需求。

算法效率的度量方法

事后统计方法

这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不通算法编制的程序的运行时间进行比较,从而确定算法效率的高低。

事前分析估算方法

事前分析估算方法是指在计算机程序编制钱,依据统计方法对算法进行估算。

算法时间复杂度

算法时间复杂度定义

在进行算法分析时,语句总得执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。

这样用写O()来体现算法时间复杂度的记法,我们称之为大O记法。

推导大O阶方法

推导大O阶的方法如下:

  1. 用常数1取代运行时间中的所有加法常数。
  2. 在修改后的运行次数函数中,只保留最高阶项。
  3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数。

得到的结果就是大O阶。

算法常见时间复杂度

  1. 常数阶
  2. 线性阶
  3. 对数阶
  4. 平方阶
  5. nlog(n)阶
  6. 立方阶
  7. 指数阶

常用的时间复杂度所耗费的时间从小到大依次是:

O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)<O(nn)

算法空间复杂度

算法的空间复杂度通过计算算法所需的存储空间实现,算法空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

总结

了解了算法的特性和算法好坏的评判标准。

对于算法复杂度的推导比较迷惑,需要恶补该方面的知识。