![](https://img-blog.csdnimg.cn/20191009180909595.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
数据结构与算法
chihaihai
你懂的越多,也就懂得的越少
展开
-
算法---KMP奶奶都懂了的白话解释
核心原理:从主串中查找是否包含子串abcdabcya b c x a b c d a b x a b c d a b c d a b c y |a b c d a b c y从头开始对比abc都通过,知道第四位d与主串中x不匹配。此时需要看d之前的子串中是否包含相同前后缀,此时abc中不存在相同前后缀。没有则需要回到开头继续比对,头a移动到x。(因为第一次对比前三位abc都一致所以已经排除从前三位开始匹配的可能)a b原创 2020-05-25 18:56:16 · 161 阅读 · 0 评论 -
数据结构---跳表
什么是跳表:跳表其实是对普通链表的一种优化结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。并且Redis中的有序集合(Sorted Set)就是用跳表实现的,zset 的内部实现是一个 hash 字典加一个跳跃列表 (skiplist)。数据结构:传统的链表结构在增删的操作上性能十分优异,但是当需要进行查询时就显得有点无力需要通过不断的遍历来找出目标。跳表有点像hash map一样原创 2020-05-16 17:59:18 · 383 阅读 · 0 评论 -
9种分布式ID生成方式
1.基于UUID优点:生成足够简单,本地生成无网络消耗,具有唯一性缺点:无序的字符串,不具备趋势自增特性没有具体的业务含义长度过长16 字节128位,36位长度的字符串,存储以及查询对MySQL的性能消耗较大,MySQL官方明确建议主键要尽量越短越好,作为数据库主键 UUID 的无序性会导致数据位置频繁变动,严重影响性能。2.基于数据库自增ID基于数据库的auto_increment自增ID完全可以充当分布式ID,具体实现:需要一个单独的MySQL实例用来生成ID,建表结构如转载 2020-05-10 17:51:25 · 590 阅读 · 0 评论 -
数据结构---红黑树
红黑树本质是二叉搜索树的一个变种,它在每个节点上增加了一个存储位来表示节点的颜色,可以是红或者黑。通过对任何一条根节点到叶子结点的路径上各个节点的颜色进行约束,确保没有任何一条路径会比其它路径长出2倍,从而达到近似于平衡。红黑树包含五大特性:每个节点要么是黑色,要么是红色根节点一定是黑色每个叶子结点(NIL)一定是黑色每个红色节点的两个子节点一定是黑色,即不能有两个红色节点相连任意一...原创 2020-04-23 15:22:19 · 870 阅读 · 2 评论 -
经典排序算法
这里给大家两个算法可视化网站自己在学习时可以更加直观的理解VisuAlgoalgorithm-visualizer1.冒泡排序冒泡排序是稳定的排序算法,最容易实现的排序, 最坏的情况是每次都需要交换, 共需 遍历 并交换将近n²/2次, 时间 复杂度为O(n²). 最佳的情况是内循环遍历一次后发现排序是对的, 因此退出循环, 时间复杂度为O(n). 平均来讲, 时间复杂度为O(n²). 由...原创 2019-10-12 01:46:03 · 413 阅读 · 0 评论