![](https://img-blog.csdnimg.cn/20200822121405396.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
数据结构
AnEra
厚积薄发, 天道酬勤
展开
-
串(Sequence)
串(Sequence)字符串 thank 的前缀(prefix)、真前缀(proper prefix)、后缀(suffix)、真后缀(proper suffix)串匹配算法蛮力(Brute Force) KMP Boyer-Moore Karp-Rabin Sunday蛮力(Brute Force)以字符为单位,从左到右移动模式串,直到匹配成功蛮力算法1蛮力1 – 执行过程蛮力1 – 实现/** * 蛮力匹配1 */public static原创 2020-09-23 19:44:29 · 218 阅读 · 0 评论 -
跳表(Skip List)
跳表(SkipList)1. 跳表,又叫做跳跃表、跳跃列表,在有序链表的基础上增加了“跳跃”的功能2. Redis中 的 SortedSet、LevelDB 中的 MemTable 都用到了跳表3. 对比平衡树, 跳表的实现和维护会更加简单, 跳表的搜索、删除、添加的平均时间复杂度是 O(logn)使用跳表优化链表跳表的搜索1. 从顶层链表的首元素开始,从左往右搜索,直至找到一个大于或等于目标的元素,或者到达当前层链表的尾部2. 如果该元素等于目标元素,则表明该元素已被找到3.原创 2020-09-22 20:08:17 · 743 阅读 · 2 评论 -
B+树
B + 树B+树是B树的变体,常用于数据库和操作系统的文件系统中MySQL数据库的索引就是基于B+树实现的B+树的特点:(1) B+树分为内部节点(非叶子)、叶子节点2种节点 内部节点只存储key,不存储具体数据 叶子节点存储key和具体数据(2) 所有的叶子节点形成一条有序链表(3) m阶B+树非根节点的元素数量 x (┌ m/2 ┐ ≤ x ≤ m)硬盘盘片(platter)、盘面(side)、读写磁头(head)硬盘一般由多个盘片组成 每个盘片...原创 2020-09-22 19:48:37 · 455 阅读 · 0 评论 -
布隆过滤器
目录思考布隆过滤器 (Bloom Filter)布隆过滤器的原理布隆过滤器的误判率布隆过滤器的实现思考1. 如果要经常判断 1 个元素是否存在,会怎么做? 很容易想到使用哈希表(HashSet、HashMap),将元素作为 key 去查找 时间复杂度:O(1),但是空间利用率不高,需要占用比较多的内存资源2. 如果需要编写一个网络爬虫去爬10亿个网站数据,为了避免爬到重复的网站,如何判断某个网站是否爬过? 很显然,HashSet、H...原创 2020-09-18 11:35:00 · 130 阅读 · 0 评论 -
AOV网(拓扑排序)和AOE网
目录AOV网(Activity On Vertex Network)拓扑排序(Topological Sort)拓扑排序 – 思路拓扑排序 – 实现AOE网 (Activity On Edge Network)AOV网与AOE网的关系AOV网(Activity On Vertex Network)一项大的工程常被分为多个小的子工程, 子工程之间可能存在一定的先后顺序,即某些子工程必须在其他的一些子工程完成后才能开始; 在现代化管理中,人们常用有向图来描述和分析一项工程的计划和原创 2020-09-04 13:19:18 · 5910 阅读 · 0 评论 -
图
图(Graph)图由顶点(vertex) 和边(edge) 组成,通常表示为 G = (V, E)G表示一个图,V是顶点集, E是边集顶点集V有穷且非空任意两个顶点之间都可以用边来表示它们之间的关系, 边集E可以是空的...原创 2020-09-03 18:40:38 · 266 阅读 · 0 评论 -
并查集
需求描述假设有n个村庄,有些村庄之间有连接的路,有些村庄之间并没有连接的路设计一个数据结构,能够快速执行2个操作:查询2个村庄之间是否有连接的路 连接2个村庄使用数组、链表、平衡二叉树、集合(Set),查询、连接的时间复杂度都是: O(n)并查集能够办到查询、连接的均摊时间复杂度都是 O(α(n)), α(n) < 5并查集非常适合解决这类“连接”相关的问题基础概念并查集也叫作不相交集合(Disjoint Set)并查集有2个核心操作查找(Find): 查找.原创 2020-08-21 20:08:16 · 3356 阅读 · 1 评论 -
二叉堆
1. 堆(Heap)是一种树状的数据结构, 但是在堆中任意节点的值总是 ≥( ≤ )子节点的值, 并且堆中的元素必须具备可比较性如果任意节点的值总是 ≥ 子节点的值,称为:最大堆、大根堆、大顶堆如果任意节点的值总是 ≤ 子节点的值,称为:最小堆、小根堆、小顶堆2. 二叉堆的逻辑结构就是一棵完全二叉树,所以也叫完全二叉堆, 鉴于完全二叉树的一些特性,二叉堆的底层(物理结构)一般用数组实现即可索引 i 的规律( n 是元素数量) 如果 i = 0 ,它是根节点 如果 i > 0...原创 2020-08-11 16:50:08 · 323 阅读 · 0 评论 -
红黑树
红黑树的五条性质:1. 节点是 RED 或者 BLACK2. 根节点是 BLACK3. 叶子节点(外部节点,空节点)都是 BLACK4. RED 节点的子节点都是 BLACK RED 节点的 parent 都是 BLACK 从根节点到叶子节点的所有路径上不能有 2 个连续的 RED 节点5. 从任一节点到叶子节点的所有路径都包含相同数目的 BLACK 节点红黑树的等价变换...原创 2020-07-24 15:53:43 · 302 阅读 · 0 评论 -
B-树
B树的特点B树是一种平衡的多路搜索树,多用于文件系统、数据库的实现1 个节点可以存储超过 2 个元素、可以拥有超过 2 个子节点 拥有二叉搜索树的一些性质 平衡,每个节点的所有子树高度一致 比较矮m阶B树的性质(m≥2)假设一个节点存储的元素个数为 x 根节点:1 ≤ x ≤ m − 1 非根节点:┌ m/2 ┐ − 1 ≤ x ≤ m − 1 (┐为向上取整)如果有子节点,子节点个数 y = x + 1 根节点...原创 2020-07-24 10:48:45 · 303 阅读 · 0 评论 -
AVL树
AVL树是最早发明的自平衡二叉搜索树之一平衡因子(Balance Factor):某结点的左右子树的高度差AVL树的特点: 每个节点的平衡因子只可能是 1、0、-1(绝对值 ≤ 1,如果超过 1,称之为“失衡”) 每个节点的左右子树高度差不超过 1 搜索、添加、删除的时间复杂度是 O(logn)AVL树失衡情况分析:BF: Balance Factor(该节点的平衡因子)H: Height(节点高度)原始子树1:添加节点n情况1(平衡):...原创 2020-07-22 11:50:22 · 242 阅读 · 1 评论 -
二叉树
目录二叉树定义1. 遍历:1.1 先序遍历递归非递归1.2 中序遍历递归非递归1.3 后序遍历递归非递归1.3 层序遍历非递归2. 删除节点2.1 前驱节点2.2 后继节点2.3 删除节点3. 高度4. 添加5. 是否为完全二叉树二叉树定义private static class Node<E> { E element; Node<E> left; Node<E> right;原创 2020-07-21 19:01:31 · 207 阅读 · 0 评论