快速查询算法复杂度
来源:互联网 发布:王仕鹏cba数据 编辑:程序博客网 时间:2024/04/27 15:35
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).
[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 __- 快速查询算法复杂度
- 快速选择算法(时间复杂度o(n)
- 快速的素数算法(LogN的复杂度哦)---------1
- 快速排序算法的时间复杂度分析[详解Master method]
- 快速排序算法原理,实现,以及时间复杂度分析
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 算法复杂度
- 上排给出十个数,在其下排填出对应的十个数
- 【表单提示建议/自动完成功能】jquery autocomplete插件的使用及其改进
- CIRCOS教程翻译 4.2——Margins
- 用mkfs.jffs2 命令制作jffs2镜像文件 (转)
- 【python】-数字
- 快速查询算法复杂度
- js事件列表
- git
- D3D基本知识点
- 屏幕触摸事件
- iPhone和Android的控件对比
- Settings.Secure
- 【产品资讯】ArcGIS for Flex 3.3发布
- 关于单链表的操作,vc6.0下运行!