算法:是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。简单来说,算法就是把一个问题,拆解为计算机能够一步一步执行的步骤。
大 O 表示法:是算法的一种特殊的表示法。它可以告诉我们算法的快慢,比较的是操作数,指出了当数据量增多时算法运行时间的增速,增速越慢,代表算法越快。
在数据量发生变化时,算法的效率通常也会跟着发生变化。
大 O 表示法的结果只是一个概数。
常见的大 O 表示形式:
O(1)
:
O(1)
:常数时间,表示算法的速度和数量无关,不论数量是多少,算法的速度始终不变。
典型算法有:哈希算法,无论数据量有多大,都可以在一次计算后查询到元素(不考虑冲突的话)。
O(logn)
:
O(logn)
:对数时间。
典型算法有:二分查找,即数量每扩大两倍,查询次数仅仅需要加 1,数量越多,算法耗时增速越慢。
O(n)
:
O(n)
:线性时间,表示算法的速度随着数量的增加呈线性增长。
典型算法有:简单查找,即在 n 个数中轮询查找目标元素所在的位置,当 n 的数量加 1 时算法查找的次数也加 1。
O(nlogn)
:
典型算法有:快速排序法,是一种速度较快的排序法。
O(n²)
:
典型算法有:选择排序、冒泡排序,是速度较慢的排序法。
O(n!):
即当数量为 n 时,查询算法耗时为 m 时,当数量加 1,查询算法将耗时 m*(n+1)
,当数量较多时耗时将变得非常大。
推导大 O 表示法的方法:
推导大 O 表示法的方法:
- 用常数 1 取代运行时间中所有的加法常数。
- 在修改后的运行次数函数中,只保留最高阶项。
- 如果最高阶项存在且不是 1,则去除与这个项相乘的常数。
例如:如果一个算法的时间复杂度计算出来是 2n² + 3n + 4
,那么根据方法 1 得到 2n² + 3n + 1
,根据方法 2 得到 2n²
,根据方法 3 最终得到 n²
,则使用大 O 表示法为 O(n²)。