![](https://img-blog.csdnimg.cn/20191215214937816.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
专门讲数据结构与算法的笔记,欢迎关注微信公众号:后台开发笔记(微信公众号第一时间更新,且排版更适合阅读)
ivan_zcy
欢迎关注微信公众号:后台开发笔记。
定期分享技术,涵盖数据结构与算法、操作系统、linux、网络、数据库、性能分析等方面。
展开
-
数据结构与算法--消息队列底层实现
文章目录消息队列step1:顺序队列step2:循环顺序队列step3:加锁的循环顺序队列step4:针对锁优化多次上锁转为批量一次CAS操作减少加锁粒度消息队列step1:顺序队列 消息队列用来解决类似生产者-消费者模型问题,按照实现方式,分为基于链表实现的链式队列和基于数组实现的顺序队列 对于链式队列,优点是支持无限大,缺点是性能低; 对于顺序队列,优点是性能高,缺点是数量有限...原创 2020-03-12 11:16:00 · 1166 阅读 · 0 评论 -
数据结构与算法--实战应用
文章目录实战应用推荐系统基于相似用户推荐基于相似歌曲推荐数据库索引设计考虑常用索引结构Redis背后数据结构列表字典集合有序集合搜索引擎搜集分析索引查询接口鉴权精确匹配前缀匹配限流固定时间窗口限流滑动时间窗口限流实战应用推荐系统比如音乐推荐,有两种方式:找口味相似的用户,推荐他们爱听的歌推荐跟喜爱歌曲特征相似的歌基于相似用户推荐 对用户的歌曲进行评分:5(单曲循环)、4(喜爱)...原创 2020-03-11 12:32:00 · 216 阅读 · 0 评论 -
数据结构与算法--BitMap与Bloom
文章目录BitMapBloom过滤器BitMap 我们有 1 千万个整数,范围在 1 到 1 亿之间。如何快速查找某个整数是否存在? 我们可借助hash,或者开1亿的bool数组(存在为true否则false),但是这些做法都耗费内存。 BitMap通过位运算,只需一个二进制位(bit)来表示true(1)或者false(0),相比bool数组内存缩小8倍伪代码:class B...原创 2020-03-10 10:11:59 · 238 阅读 · 0 评论 -
数据结构与算法--浅析图
文章目录图存储方式拓扑排序Kahn算法DFS算法单源最短路应用场景图 图的元素叫作顶点,顶点间的连接关系叫做边,跟顶点相连的边的条数称为顶点的度 图根据是否有方向可分为有向图和无向图,有向图的边有方向,度也分为入度(指向顶点的边的个数)和出度(顶点指向的边的个数) 有权重的图称为带权图,也就是边有权值 用图展示下(左上无权无向图、右上无权有向图、左下有权无向图、右下有权有向图):...原创 2020-03-09 10:59:35 · 232 阅读 · 0 评论 -
数据结构与算法--字符串匹配深度长文
文章目录字符串匹配BF算法RK算法方式一方式二BM算法坏字符规则好后缀规则KMP算法优化版next数组求法伪代码字典树AC**自动机**快速推导失败指针伪代码字符串匹配 就是在串A中查找是否存在串B,此时串A叫做主串,串B叫做模式串。假设串A长度为n,串B为m,则n>=m,在工业级主要应用于搜索引擎、敏感词过滤等BF算法暴力匹配法,时间复杂度为O(nm) 虽然复杂度高,但在...原创 2020-03-08 14:52:46 · 452 阅读 · 1 评论 -
数据结构与算法--堆
文章目录堆及其应用插入调整删除调整应用合并有序小文件高性能定时器求topK大求中位数堆及其应用 堆是一个完全二叉树,分为大顶堆和小顶堆。大顶堆每一个节点的值都必须大于等于其子树中每个节点的值,小顶堆正好相反 既然堆是完全二叉树,那么就可以通过数组来构建堆,父节点下标为i/2,左子节点i×2,右子节点i×2+1实现快速定位。插入调整 记住四个字:自下而上,下图是插入22的流程图:...原创 2020-03-07 11:37:05 · 238 阅读 · 1 评论 -
数据结构与算法--B+树看它就够了
文章目录B+树支持区间查找减少内存耗费查询效率高B+树索引的插入和删除调整B+树 对于数据库,我们主要做到三点:查询效率高、减少内存耗费、支持区间查找,通过改造二叉查找树,我们发明了B+树来存储数据库的索引支持区间查找 树中节点只作为索引,每个叶子节点串在一条双向链表上,这样我们想要查询某个区间,只需要找到最小值,然后通过链表遍历即可。减少内存耗费 上图中每个节点至少占用索引值...原创 2020-03-05 13:37:44 · 183 阅读 · 0 评论 -
数据结构与算法--轻松玩转红黑树
文章目录二叉树二叉查找树(二叉排序树)支持重复数据时间复杂度红黑树插入调整删除删除调整红黑树 VS AVL树代码二叉树 二叉树每个节点最多有两个子节点。 特殊二叉树有:满二叉树(除叶子节点外每个节点都有两个子节点)、完全二叉树(除最下层外其他层节点全满,且最下层叶子节点靠左排列) 二叉树的存储方式有两种:一种是基于链式存储(通过指针),另一种是基于数组(左子节点为2i,右子节点为2i...原创 2020-03-02 17:22:43 · 288 阅读 · 0 评论 -
数据结构与算法--跳表、hash
文章目录引子跳表复杂度针对插入、删除导致的跳表退化Hash哈希冲突复杂度简易代码实现工业级hashhash应用安全加密区块链唯一标识数据校验负载均衡hash表+双向链表扩展引子 我们之前学了线性表中的数组和链表,它们之间各有优势和缺点,且链表和数组的优缺点正好互补。那么我们可不可以用一种新的数据结构来代替链表和数组,使其继承它们各自的优点呢? 而接下来所讲的跳表、hash表,都是结合了数...原创 2020-02-29 14:35:28 · 692 阅读 · 0 评论 -
数据结构与算法--杂谈(递归、分治、dfs、bfs)
文章目录杂谈递归警惕堆栈溢出对于递归的调试分治在海量数据上的应用DFS伪代码复杂度BFS伪代码复杂度对比dfs和bfs杂谈递归 递归满足三个条件: (1)问题可以拆分为几个更小的子问题 (2) 子问题除了数据范围和规模不同,求解思路完全一样 (3) 存在递归终止条件 递归的优点是比较直观; 缺点就是空间复杂度高、有堆栈溢出的风险、存在重复计算、大量函数调用耗时较多等问题警惕堆栈...原创 2019-12-28 16:32:03 · 300 阅读 · 0 评论 -
数据结构与算法--查找和排序
文章目录查找与排序排序关于稳定性关于内部和外部排序选择排序复杂度冒泡排序复杂度插入排序复杂度插入排序优于冒泡?归并排序复杂度快速排序复杂度降低最坏情况发生的概率快排比优于归并排序?扩展小作业桶排序复杂度优化空间利用适应场景基数排序复杂度高效通用排序思考题二分查找复杂度三要素变型查找与排序 建议大家好好看看查找、排序这两个程序员的必修课,希望大家能学有所获排序 常见的排序有:冒泡排序、插...原创 2019-12-18 23:07:05 · 274 阅读 · 0 评论 -
数据结构与算法--线性表
文章目录线性表数组复杂度优化思路针对数组的插入操作针对数组的删除操作注意事项扩展小作业链表复杂度优化思路注意事项扩展小作业栈复杂度应用场景扩展小作业队列复杂度优化思路应用场景扩展小作业线性表 线性表数据排列像线一样,每个线性表的数据最多只有前和后两个方向。数组、链表、队列、栈等都是线性表结构。数组 数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 连...原创 2019-12-16 22:21:26 · 210 阅读 · 0 评论 -
数据结构与算法--复杂度
文章目录复杂度时间复杂度规则常见的时间复杂度最好、最坏、平均时间复杂度空间复杂度规则常见的空间复杂度复杂度 复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系。 复杂度分析可以在初期帮助程序员预估该程序的性能耗费。 时间复杂度用于表示算法的时间耗费与数据规模增长之间的关系 空间复杂度用于表示算法的存储空间与数据规模增长之间的关系时间...原创 2019-12-15 21:51:55 · 376 阅读 · 0 评论