阅读原文请点击:
http://click.aliyun.com/m/23520/
摘要: 算法复杂度这件事 这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 OBig-O 复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。
算法复杂度这件事
这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 OBig-O 复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。最近这几年,我面试了几家硅谷的初创企业和一些更大一些的公司,如 Yahoo、eBay、LinkedIn 和 Google,每次我都需要准备这个,我就在问自己,“为什么没有人创建一个漂亮的大 O 速查表呢?”所以,为了节省大家的时间,我就创建了这个,希望你喜欢!
--- Eric
图例
绝佳 不错 一般 不佳 糟糕
数据结构操作
数据结构 时间复杂度 空间复杂度
平均 最差 最差
访问 搜索 插入 删除 访问 搜索 插入 删除
Array O(1) O(n) O(n) O(n) O(1) O(n) O(n) O(n) O(n)
Stack O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
Singly-Linked List O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
Doubly-Linked List O(n) O(n) O(1) O(1) O(n) O(n) O(1) O(1) O(n)
Skip List O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n) O(n) O(n) O(n) O(n log(n))
Hash Table - O(1) O(1) O(1) - O(n) O(n) O(n) O(n)
Binary Search Tree O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n) O(n) O(n) O(n) O(n)
Cartesian Tree - O(log(n)) O(log(n)) O(log(n)) - O(n) O(n) O(n) O(n)
B-Tree O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n)
Red-Black Tree O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n)
Splay Tree - O(log(n)) O(log(n)) O(log(n)) - O(log(n)) O(log(n)) O(log(n)) O(n)
AVL Tree O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(n)
数组排序算法
算法 时间复杂度 空间复杂度
最佳 平均 最差 最差
Quicksort O(n log(n)) O(n log(n)) O(n^2) O(log(n))
Mergesort O(n log(n)) O(n log(n)) O(n log(n)) O(n)
Timsort O(n) O(n log(n)) O(n log(n)) O(n)
Heapsort O(n log(n)) O(n log(n)) O(n log(n)) O(1)
Bubble Sort O(n) O(n^2) O(n^2) O(1)
Insertion Sort O(n) O(n^2) O(n^2) O(1)
Selection Sort O(n^2) O(n^2) O(n^2) O(1)
Shell Sort O(n) O((nlog(n))^2) O((nlog(n))^2) O(1)
Bucket Sort O(n+k) O(n+k) O(n^2) O(n)
Radix Sort O(nk) O(nk) O(nk) O(n+k)
图操作
节点 / 边界管理 存储 增加顶点 增加边界 移除顶点 移除边界 查询
Adjacency list O(|V|+|E|) O(1) O(1) O(|V| + |E|) O(|E|) O(|V|)
Incidence list O(|V|+|E|) O(1) O(1) O(|E|) O(|E|) O(|E|)
Adjacency matrix O(|V|^2) O(|V|^2) O(1) O(|V|^2) O(1) O(1)
Incidence matrix O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|V| ⋅ |E|) O(|E|)
堆操作
类型 时间复杂度
Heapify 查找最大值 分离最大值 提升键 插入 删除 合并
Linked List (sorted) - O(1) O(1) O(n) O(n) O(1) O(m+n)
Linked List (unsorted) - O(n) O(n) O(1) O(1) O(1) O(1)
Binary Heap O(n) O(1) O(log(n)) O(log(n)) O(log(n)) O(log(n)) O(m+n)
Binomial Heap - O(1) O(log(n)) O(log(n)) O(1) O(log(n)) O(log(n))
Fibonacci Heap - O(1) O(log(n)) O(1) O(1) O(log(n)) O(1)
阅读原文请点击:
http://click.aliyun.com/m/23520/
分享到:
相关推荐
本文旨在为程序员提供一个算法复杂度速查表,涵盖计算机科学中常见算法的时间和空间复杂度。该速查表可以帮助程序员在面试和编程中快速查找算法的复杂度,从而节省时间和提高效率。 数据结构操作 在数据结构操作中...
OpenMP提供了默认的并行环境,但是允许程序员指定是所有变量都是共享的(default(shared))还是都是私有的(default(none)),或者显式地声明每个变量的属性。 最后,OpenMP通过环境变量可以对并行行为进行调整,...
**大O符号速查表详解** 在计算机科学中,大O符号是衡量算法效率的重要工具,主要用于描述算法的时间复杂度和空间复杂度。..."Big O cheat sheets"是这类知识的精华汇总,值得每个程序员收藏和学习。
P1028是其中的一个问题编号,通常每个题目都会有一段详细的描述、输入输出格式、样例以及评判标准。 在这个问题中,我们可能需要解决的是关于数学运算的挑战。数的计算可能包括但不限于整数操作、浮点数计算、复数...
6. **算法与数据结构**:这些速查卡可能包含了常见算法(排序、搜索、图论)和数据结构(数组、链表、树、队列、栈)的基本操作和复杂度分析。 7. **开发工具**:例如IDE快捷键、CLI命令、调试技巧等,可以帮助...
【冒泡排序】 冒泡排序是一种简单直观的排序算法,它的基本思想是通过重复遍历待排序的数列,依次比较相邻元素的大小,若发现逆序则...熟练运用这些算法可以提高编程效率,优化程序性能,是每个程序员必备的技能之一。
这是因为每个输入端都需要与所有输出端相连,通过计算可以得出这个结果。 **20. 通道程序执行结束时引起的中断** - **选项分析:** - A. I/O中断:正确。 - B. 访管中断:与通道程序无关。 - C. 程序性中断:与...
每个阶段都需要仔细规划和实施,以确保最终产品的质量和可靠性。 ##### 6.2 学会看电气参数表 电气参数表包含了产品的重要信息,如工作电压范围、最大电流等。理解这些参数对于选择合适的组件和评估系统性能非常...