当前位置: 首页 > news >正文

常用算法和数据结构的复杂度速查表

常用算法和数据结构的复杂度速查表,

搜索

算法数据结构时间复杂度空间复杂度
  平均最差最差
深度优先搜索 (DFS)Graph of |V| vertices and |E| edges-O(|E| + |V|)O(|V|)
广度优先搜索 (BFS)Graph of |V| vertices and |E| edges-O(|E| + |V|)O(|V|)
二分查找Sorted array of n elementsO(log(n))O(log(n))O(1)
穷举查找ArrayO(n)O(n)O(1)
最短路径-Dijkstra,用小根堆作为优先队列Graph with |V| vertices and |E| edgesO((|V| + |E|) log |V|)O((|V| + |E|) log |V|)O(|V|)
最短路径-Dijkstra,用无序数组作为优先队列Graph with |V| vertices and |E| edgesO(|V|^2)O(|V|^2)O(|V|)
最短路径-Bellman-FordGraph with |V| vertices and |E| edgesO(|V||E|)O(|V||E|)O(|V|)

排序

算法数据结构时间复杂度最坏情况下的辅助空间复杂度
  最佳平均最差最差
快速排序数组O(n log(n))O(n log(n))O(n^2)O(n)
归并排序数组O(n log(n))O(n log(n))O(n log(n))O(n)
堆排序数组O(n log(n))O(n log(n))O(n log(n))O(1)
冒泡排序数组O(n)O(n^2)O(n^2)O(1)
插入排序数组O(n)O(n^2)O(n^2)O(1)
选择排序数组O(n^2)O(n^2)O(n^2)O(1)
桶排序数组O(n+k)O(n+k)O(n^2)O(nk)
基数排序数组O(nk)O(nk)O(nk)O(n+k)

数据结构

数据结构时间复杂度空间复杂度
 平均最差最差
 索引查找插入删除索引查找插入删除 
基本数组O(1)O(n)--O(1)O(n)--O(n)
动态数组O(1)O(n)O(n)O(n)O(1)O(n)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(1)O(1)O(n)O(n)O(1)O(1)O(n)
跳表O(log(n))O(log(n))O(log(n))O(log(n))O(n)O(n)O(n)O(n)O(n log(n))
哈希表-O(1)O(1)O(1)-O(n)O(n)O(n)O(n)
二叉搜索树O(log(n))O(log(n))O(log(n))O(log(n))O(n)O(n)O(n)O(n)O(n)
笛卡尔树-O(log(n))O(log(n))O(log(n))-O(n)O(n)O(n)O(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(n)
红黑树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)
伸展树-O(log(n))O(log(n))O(log(n))-O(log(n))O(log(n))O(log(n))O(n)
AVL 树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)

Heaps时间复杂度
 建堆查找最大值提取最大值Increase Key插入删除合并 
链表(已排序)-O(1)O(1)O(n)O(n)O(1)O(m+n)
链表(未排序)-O(n)O(n)O(1)O(1)O(1)O(1)
二叉堆O(n)O(1)O(log(n))O(log(n))O(log(n))O(log(n))O(m+n)
二项堆-O(log(n))O(log(n))O(log(n))O(log(n))O(log(n))O(log(n))
斐波那契堆-O(1)O(log(n))*O(1)*O(1)O(log(n))*O(1)

节点 / 边 管理StorageAdd VertexAdd EdgeRemove VertexRemove EdgeQuery
邻接表O(|V|+|E|)O(1)O(1)O(|V| + |E|)O(|E|)O(|V|)
关联表O(|V|+|E|)O(1)O(1)O(|E|)O(|E|)O(|E|)
邻接矩阵O(|V|^2)O(|V|^2)O(1)O(|V|^2)O(1)O(1)
关联矩阵O(|V| ⋅ |E|)O(|V| ⋅ |E|)O(|V| ⋅ |E|)O(|V| ⋅ |E|)O(|V| ⋅ |E|)O(|E|)

 

英文版链接:http://bigocheatsheet.com/

相关文章:

  • 【CodeChef】Just multiply
  • 【CodeChef】LCH15JGH Many bananas
  • 【CodeChef】 Queries on the String
  • 【BZOJ 1051】 受欢迎的牛 【Tarjan】
  • 【数学期望】Crossing Rivers, ACM/ICPC Wuhan 2009, UVa12230
  • 【数学期望】Candy, ACM/ICPC Chengdu 2012, UVa1639 【精度】
  • 【积分】【概率】Probability, UVa11346
  • 【BZOJ 4571】美味 【区间异或最大值】【主席树】【贪心】
  • 【BZOJ 2588】Count on a tree 【树上路径第K大】【LCA+主席树】
  • 【BZOJ 1801】中国象棋
  • 【NOIP 2012】Vigenère 密码
  • 【Java常用类库】_大数操作(BigIntger、BigDecimal)
  • 模算术和求余
  • 【BZOJ 3631】松鼠的新家 【LCA+树上差分】
  • [codeforces]Checkpoints
  • Debian下无root权限使用Python访问Oracle
  • gf框架之分页模块(五) - 自定义分页
  • HTTP中GET与POST的区别 99%的错误认识
  • If…else
  • java 多线程基础, 我觉得还是有必要看看的
  • js数组之filter
  • linux安装openssl、swoole等扩展的具体步骤
  • oschina
  • php ci框架整合银盛支付
  • Theano - 导数
  • 初探 Vue 生命周期和钩子函数
  • 代理模式
  • 分布式任务队列Celery
  • 每天10道Java面试题,跟我走,offer有!
  • 设计模式 开闭原则
  • 跳前端坑前,先看看这个!!
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • $L^p$ 调和函数恒为零
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (9)STL算法之逆转旋转
  • (LeetCode C++)盛最多水的容器
  • (超详细)语音信号处理之特征提取
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (转)项目管理杂谈-我所期望的新人
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • ./和../以及/和~之间的区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net web项目 调用webService
  • .NET大文件上传知识整理
  • .net快速开发框架源码分享
  • :中兴通讯为何成功
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @selector(..)警告提示
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [22]. 括号生成
  • [23] GaussianAvatars: Photorealistic Head Avatars with Rigged 3D Gaussians