算法复杂度速查表
来源:互联网 发布:淘宝手机游戏交易平台 编辑:程序博客网 时间:2024/06/05 05:01
Know Thy Complexities!
Hi there! This webpage covers the space and time Big-O complexities of common algorithms used in Computer Science. When preparing for technical interviews in the past, I found myself spending hours crawling the internet putting together the best, average, and worst case complexities for search and sorting algorithms so that I wouldn't be stumped when asked about them. Over the last few years, I've interviewed at several Silicon Valley startups, and also some bigger companies, like Yahoo, eBay, LinkedIn, and Google, and each time that I prepared for an interview, I thought to msyelf "Why oh why hasn't someone created a nice Big-O cheat sheet?". So, to save all of you fine folks a ton of time, I went ahead and created one. Enjoy!
Good
Fair
Poor
Searching
-
O(|E| + |V|)
O(|V|)
Breadth First Search (BFS)Graph of |V| vertices and |E| edges-
O(|E| + |V|)
O(|V|)
Binary searchSorted array of n elementsO(log(n))
O(log(n))
O(1)
Linear (Brute Force)ArrayO(n)
O(n)
O(1)
Shortest path by Dijkstra,using a Min-heap as priority queueGraph with |V| vertices and |E| edges
O((|V| + |E|) log |V|)
O((|V| + |E|) log |V|)
O(|V|)
Shortest path by Dijkstra,using an unsorted array as priority queueGraph with |V| vertices and |E| edges
O(|V|^2)
O(|V|^2)
O(|V|)
Shortest path by Bellman-FordGraph with |V| vertices and |E| edgesO(|V||E|)
O(|V||E|)
O(|V|)
Sorting
O(n log(n))
O(n log(n))
O(n^2)
O(log(n))
MergesortArrayO(n log(n))
O(n log(n))
O(n log(n))
O(n)
HeapsortArrayO(n log(n))
O(n log(n))
O(n log(n))
O(1)
Bubble SortArrayO(n)
O(n^2)
O(n^2)
O(1)
Insertion SortArrayO(n)
O(n^2)
O(n^2)
O(1)
Select SortArrayO(n^2)
O(n^2)
O(n^2)
O(1)
Bucket SortArrayO(n+k)
O(n+k)
O(n^2)
O(nk)
Radix SortArrayO(nk)
O(nk)
O(nk)
O(n+k)
Data Structures
O(1)
O(n)
-
-
O(1)
O(n)
-
-
O(n)
Dynamic ArrayO(1)
O(n)
O(n)
-
O(1)
O(n)
O(n)
-
O(n)
Singly-Linked ListO(n)
O(n)
O(1)
O(1)
O(n)
O(n)
O(1)
O(1)
O(n)
Doubly-Linked ListO(n)
O(n)
O(1)
O(1)
O(n)
O(n)
O(1)
O(1)
O(n)
Skip ListO(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(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(n)
Red-Black 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(n)
Heaps
-
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 HeapO(log(n))
O(1)
O(log(n))
O(log(n))
O(log(n))
O(log(n))
O(m+n)
Binomial Heap-
O(log(n))
O(log(n))
O(log(n))
O(log(n))
O(log(n))
O(log(n))
Fibonacci Heap-
O(1)
O(log(n))*
O(1)*
O(1)
O(log(n))*
O(1)
Graphs
O(|V|+|E|)
O(1)
O(1)
O(|V| + |E|)
O(|E|)
O(|V|)
Incidence listO(|V|+|E|)
O(1)
O(1)
O(|E|)
O(|E|)
O(|E|)
Adjacency matrixO(|V|^2)
O(|V|^2)
O(1)
O(|V|^2)
O(1)
O(1)
Incidence matrixO(|V| ⋅ |E|)
O(|V| ⋅ |E|)
O(|V| ⋅ |E|)
O(|V| ⋅ |E|)
O(|V| ⋅ |E|)
O(|E|)
Notation for asymptotic growth
[1] Big O is the upper bound, while Omega is the lower bound. Theta requires both Big O and Omega, so that's why it's referred to as a tight bound (it must be both the upper and lower bound). For example, an algorithm taking Omega(n log n) takes at least n log n time but has no upper limit. An algorithm taking Theta(n log n) is far preferential since it takes AT LEAST n log n (Omega n log n) and NO MORE THAN n log n (Big O n log n).SO
[2] f(x)=Θ(g(n)) means f (the running time of the algorithm) grows exactly like g when n (input size) gets larger. In other words, the growth rate of f(x) is asymptotically proportional to g(n).
[3] Same thing. Here the growth rate is no faster than g(n). big-oh is the most useful because represents the worst-case behavior.
In short, if algorithm is __ then its performance is __Big-O Complexity Chart
Contribute
Edit these tables!Authors:
- Eric Rowell
- Quentin Pleple
- Nick Dizazzo
- Michael Abed
- Adam Forsyth
- Jay Engineer
- Josh Davis
- makosblade
- Alejandro Ramirez
- Joel Friedly
- Eric Lefevre-Ardant
- Thomas Dybdahl Ahle
- 算法复杂度速查表
- 算法复杂度速查表
- 算法复杂度速查表
- 算法复杂度速查表
- 算法复杂度速查表
- 算法复杂度速查表
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 对音频压缩概念的一些误解--记一次与音视频压缩专家的对话
- Flex LCDS 与 spring 框架的整合说明
- 输入三个字符串,按由小到大的顺序输出(指针)(C语言的实现)
- 如何向App Store提交应用
- linux中断处理浅析
- 算法复杂度速查表
- 二叉树 - 建立
- 机器学习中PCA和ICA的理解
- 关于开源项目android-async-http
- 荷兰国旗问题
- C#中字符串转换为计算公式,并进行计算的方法(自定义公式的计算)
- python实现的宏解析工具
- error: Error: No resource found that matches the given name (at 'text' with value '@string/
- Android之下拉框(Spinner)的使用