时间复杂度是计算机科学中的一个概念,它涉及一组代码或算法处理或运行所需时间的量化,是输入量的函数。换句话说,时间复杂度是指一个程序处理一个给定的输入需要多长时间。一个算法的效率取决于两个参数:
- 时间复杂度:它被定义为一个特定指令集的执行次数,而不是所花的总时间。这是因为总时间也取决于一些外部因素,如使用的编译器、处理器的速度等。
- 空间复杂度:它是程序执行所需的总内存空间。
不同数据结构在不同操作中的最佳时间复杂性
数据结构 |
访问 |
搜索 |
插入 |
删除 |
阵列 |
O(1) |
O(1) |
O(1) |
O(1) |
堆栈 |
O(1) |
O(1) |
O(1) |
O(1) |
队列 |
O(1) |
O(1) |
O(1) |
O(1) |
单链表 |
O(1) |
O(1) |
O(1) |
O(1) |
双链表 |
O(1) |
O(1) |
O(1) |
O(1) |
哈希表 |
O(1) |
O(1) O(1) |
O(1) |
二进制搜索树 |
O(log n) |
O(log n) |
O(log n) |
O(log n) |
AVL树 |
O(log n) |
O(log n) |
O(log n) |
O(log n) |
B树 |
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(1) |
O(N) |
O(N) |
O(N) |
堆栈 |
O(N) |
O(N) |
O(1) |
O(1) |
队列 |
O(N) |
O(N) |
O(1) |
O(1) |
单链表 |
O(N) |
O(N) |
O(N) |
O(N) |
双链表 |
O(N) |
O(N) |
O(1) |
O(1) |
哈希表 |
O(N) |
O(N) |
O(N) |
O(N) |
二进制搜索树 |
O(N) |
O(N) |
O(N) |
O(N) |
AVL树 |
O(log N) |
O(log N) |
O(log N) |
O(log N) |
二进制树 |
O(N) |
O(N) |
O(N) |
O(N) |
红黑树 |
O(log N) |
O(log N) |
O(log N) |
O(log N) |
不同数据结构对不同操作的平均时间复杂度
数据结构 |
访问 |
搜索 |
插入 |
删除 |
阵列 |
O(1) |
O(N) |
O(N) |
O(N) |
堆栈 |
O(N) |
O(N) |
O(1) |
O(1) |
队列 |
O(N) |
O(N) |
O(1) |
O(1) |
单链表 |
O(N) |
O(N) |
O(1) |
O(1) |
双链表 |
O(N) |
O(N) |
O(1) |
O(1) |
哈希表 |
O(1) |
O(1) |
O(1) |
O(1) |
二进制搜索树 |
O(log N) |
O(log N) |
O(log N) |
O(log N) |
AVL树 |
O(log N) |
O(log N) |
O(log N) |
O(log N) |
B树 |
O(log N) |
O(log N) |
O(log N) |
O(log N) |
红黑树 |
O(log N) |
O(log N) |
O(log N) |
O(log N) |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/294628.html