
数据结构
数据结构
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 · 260 阅读 · 0 评论 -
跳表(Skip List)
跳表(SkipList) 1. 跳表,又叫做跳跃表、跳跃列表,在有序链表的基础上增加了“跳跃”的功能 2. Redis中 的 SortedSet、LevelDB 中的 MemTable 都用到了跳表 3. 对比平衡树, 跳表的实现和维护会更加简单, 跳表的搜索、删除、添加的平均时间复杂度是 O(logn) 使用跳表优化链表 跳表的搜索 1. 从顶层链表的首元素开始,从左往右搜索,直至找到一个大于或等于目标的元素,或者到达当前层链表的尾部 2. 如果该元素等于目标元素,则表明该元素已被找到 3.原创 2020-09-22 20:08:17 · 957 阅读 · 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 · 511 阅读 · 0 评论 -
布隆过滤器
目录 思考 布隆过滤器 (Bloom Filter) 布隆过滤器的原理 布隆过滤器的误判率 布隆过滤器的实现 思考 1. 如果要经常判断 1 个元素是否存在,会怎么做? 很容易想到使用哈希表(HashSet、HashMap),将元素作为 key 去查找 时间复杂度:O(1),但是空间利用率不高,需要占用比较多的内存资源 2. 如果需要编写一个网络爬虫去爬10亿个网站数据,为了避免爬到重复的网站,如何判断某个网站是否爬过? 很显然,HashSet、H...原创 2020-09-18 11:35:00 · 153 阅读 · 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 · 6306 阅读 · 0 评论 -
图
图(Graph) 图由顶点(vertex) 和边(edge) 组成,通常表示为 G = (V, E) G表示一个图,V是顶点集, E是边集 顶点集V有穷且非空 任意两个顶点之间都可以用边来表示它们之间的关系, 边集E可以是空的 ...原创 2020-09-03 18:40:38 · 316 阅读 · 0 评论 -
并查集
需求描述 假设有n个村庄,有些村庄之间有连接的路,有些村庄之间并没有连接的路 设计一个数据结构,能够快速执行2个操作: 查询2个村庄之间是否有连接的路 连接2个村庄 使用数组、链表、平衡二叉树、集合(Set),查询、连接的时间复杂度都是: O(n) 并查集能够办到查询、连接的均摊时间复杂度都是 O(α(n)), α(n) < 5 并查集非常适合解决这类“连接”相关的问题 基础概念 并查集也叫作不相交集合(Disjoint Set) 并查集有2个核心操作查找(Find): 查找.原创 2020-08-21 20:08:16 · 3405 阅读 · 1 评论 -
二叉堆
1. 堆(Heap)是一种树状的数据结构, 但是在堆中任意节点的值总是 ≥( ≤ )子节点的值, 并且堆中的元素必须具备可比较性 如果任意节点的值总是 ≥ 子节点的值,称为:最大堆、大根堆、大顶堆 如果任意节点的值总是 ≤ 子节点的值,称为:最小堆、小根堆、小顶堆 2. 二叉堆的逻辑结构就是一棵完全二叉树,所以也叫完全二叉堆, 鉴于完全二叉树的一些特性,二叉堆的底层(物理结构)一般用数组实现即可索引 i 的规律( n 是元素数量) 如果 i = 0 ,它是根节点 如果 i > 0...原创 2020-08-11 16:50:08 · 383 阅读 · 0 评论 -
红黑树
红黑树的五条性质: 1. 节点是 RED 或者 BLACK 2. 根节点是 BLACK 3. 叶子节点(外部节点,空节点)都是 BLACK 4. RED 节点的子节点都是 BLACK RED 节点的 parent 都是 BLACK 从根节点到叶子节点的所有路径上不能有 2 个连续的 RED 节点5. 从任一节点到叶子节点的所有路径都包含相同数目的 BLACK 节点 红黑树的等价变换 ...原创 2020-07-24 15:53:43 · 656 阅读 · 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 · 349 阅读 · 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 · 694 阅读 · 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 · 468 阅读 · 0 评论