算法复杂度符号

一旦开始翻译就根本停不下来。

翻译自swift-algorithm-club

知道算法有多快以及占用多少内存是非常有用的,能够帮助你选择合适的算法。

算法复杂度给你一个粗略的关于算法运行时间和占用内存的指示,当某人说这个算法最多O(n^2)的运行时间和O(n)的内存,就表示这个算法有点慢但并不暂用很多内存。

通常通过数学分析来计算算法复杂度,这里不详细介绍如何计算,但是知道这些符号的意义还是很重要的。

符号描述
O(1)最优,这种类型的算法经常消耗同样多的时间,不管有多少数据,例如从数组中查找一个元素的索引
O(log n)非常好,这种类型的算法不同的元素数量消耗的时间不同,如果你有100个item,需要7次来得到答案,如果是1000个,需要10次,如果1000000需要20测,比较适合数量较多的元素。例如折半查找。
O(n)比较好 如果你有100个item,那需要100次搜索,如果200个 则需要200次搜索。例如顺序查找。
O(nlog n)比(n)差,例如快速排序
O(n^2)有点慢,如果你有100个item,需要100*100次,两倍的item会比慢4倍(2 * 2 = 4),插入排序。
O(n * 3)差,例如 矩阵乘法
O(2 ^ n)非常差,你可能想要避免这种算法,但是有时候你别无选择。例如:旅行商问题
O(n!)极慢,需要花几百年。

通常你只需要用直觉就能算出算法复杂度,如果你的代码使用一0个n的元素简单的循环,那么复杂度就是O(n),如果有2个相连的循环,那就是O(n^2),三个就是O(n^3)等等。

注意复杂度只是一个简单的估计而且只有当基数非常大时,例如,插入排序的最差结果是O(n^2),理论上它会比快速排序O(nLogn)慢,但是如果是一小部分数量,插入排序明显要快,尤其是当这个数组本身已经是有序的。

如果你觉得这个有点困惑,别让复杂度困惑太多。它通常在比较两个算法时有用,但是最终你只有测试才知道哪一个更好。而且如果基数确实很小,那么即便是慢的算法也会比快的算法更适合。

### 算法复杂度中的符号定义 #### 大O表示法 (Big O Notation) 大O表示法用于描述算法在最坏情况下的时间复杂度或空间复杂度,即函数的增长率上限。通过这种方式,我们可以评估算法在处理大规模数据时的表现如何。如果一个函数的大小仅有上界而无明确下界,则可采用大O表示法来描述其增长趋势[^2]。 #### Ω符号 (Big Omega Notation) Ω符号(Big Omega Notation)被用来刻画算法在最佳情况下所需的时间或空间资源,反映的是增长率的下限。这意味着当我们讨论某个特定输入规模趋向于无限增大时,该算法至少会消耗多少时间和内存资源。这种分析有助于了解程序执行速度的最佳可能性[^1]。 #### Θ符号 (Big Theta Notation) Θ符号综合了上述两种概念,既考虑到了最大值又兼顾最小值的情况。具体而言,当且仅当存在两个正常数c₁,c₂使得对于充分大的n都有 c₁g(n)<=f(n)<=c₂g(n),那么我们就说 f(n)=Θ(g(n)) 。换句话说就是,在足够大的范围内,实际运行成本始终位于这两个边界之间不变动太多;因此它提供了关于性能更精确的信息而不是仅仅关注极端情形之一。 以下是几种常见的时间复杂度及其含义: | 时间复杂度 | 描述 | |------------|----------------------------------------------------------------------| | O(1) | 常量级操作 | | O(log n) | 对数级别 | | O(n) | 线性关系 | | O(n log n) | 类似快速排序这样的高效分类方法 | | O(n²) | 如冒泡排序等简单嵌套循环 | 下面给出一段Python代码实现了一个简单的线性查找功能作为例子展示这些理论的应用场景: ```python def linear_search(arr, target): for i in range(len(arr)): if arr[i] == target: return i return -1 ``` 此段脚本展示了典型的O(n)时间复杂度特征因为每次迭代都会检查列表下一个项目直到找到目标或者遍历完整个序列为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值