
数据结构与算法
文章平均质量分 91
yigg
追逐成功的路上只有逆风
展开
-
开头:数据结构和算法
目录: 基础 算法基础 数据结构 数据结构是由某一数据对象及该对象中所有数据元素之间的关系组成。 数据在计算中的存储方式,也称为数据的物理结构。 基本概念 数据 数据对象 数据元素 4种基本的逻辑结构 集合结构 线性结构 树形结构 图状结构 数据逻辑结构可分为线性结构和非线性结构两类。集合结构、树形结构、图状结构,统...原创 2018-11-20 11:11:38 · 710 阅读 · 0 评论 -
数据结构 - 并查集
目录:基本概念 存储方式 单链表表示 并查集森林 并查集森林的两种改进策略 按秩合并(union by rank) 路径压缩(path compression) 应用一.基本概念不相交集类维持着多个彼此之间没有交集的子集的集合,可以用于 判断两个元素是否属于同一个集合,或者合并两个不相交的子集。比如, { {1,3,5},{2},{4},{6,7} }这整体就是一个不相交集合。里面的一些子集也是彼此互不相交的。注意,对于每一个子集,往往用某一个元素来代表,..转载 2020-08-02 22:58:51 · 466 阅读 · 0 评论 -
伸展树
目录:概念 存在的意义 基本的自底向上伸展树:伸展 基本伸展树操作 伸展操作 查找操作 插入操作 删除操作 合并操作 启发式合并 划分操作 其他操作 优势 缺点 应用(https://www.cnblogs.com/csushl/p/10122047.html) 时间复杂度分析 自顶向下的伸展树一.概念 伸展树(Splay Tree),也叫分裂树,是一种二叉排序树,它能在O(log n)内完成插入、查找和删除操作。它由丹尼尔·斯...原创 2020-07-27 09:38:50 · 384 阅读 · 0 评论 -
跳表
目录:简介 原理 理想情况 实例 级的分配 性能分析 实现 实用场景+疑问一.简介 跳表是一个随机化的数据结构,可以被看做二叉树的一个变种,它在性能上和红黑树,AVL树不相上下,但是跳表的原理非常简单,目前在Redis和LeveIDB中都有用到。 它采用随机技术决定链表中哪些节点应增加向前指针以及在该节点中应增加多少个指针。跳表结构的头节点需有足够的指针域,以满足可能构造最大级数的需要,而尾节点不需要指针域。 采用这种随机技术,跳...原创 2020-07-20 23:33:46 · 215 阅读 · 0 评论 -
线段树
前置内容学习线段树前,你需要掌握二叉搜索树,只补充一个内容,就是关于二叉搜索树如何编号。二叉搜索树的根节点编号为1,对于每个节点,假如其编号为N,它的左儿子编号为2N,右儿子编号为2N+1。因此,整个二叉搜索树的编号如下:上图当中,结点上方的数字是结点的编号,后续为了简单,把编号写在结点内不。有读者可能要问了,为什么3的儿子是6和7,而不是4和5呢?这是因为虽然节点4和节点5不存在,但是仍然应该为他们保留4和5这2个编号,你可以把这棵树看成这样:线段树的概念线段树,英文名转载 2020-07-20 23:04:25 · 308 阅读 · 0 评论 -
树状数组
目录:概念 应用 充分性 建立树状数组 典题分析一.概念数组来模拟树形结构。那么、为什么不直接建树?没必要,因为树状数组能处理的问题就没必要建树。和Trie树的构造方式有类似之处。树状数组介绍如果每个父亲都存的是两个儿子的值,是不是就可以解决这类区间问题了呢。是的没错,但是这样的树形结构,叫做线段树。那真的的树形结构是怎样的,和上图类似,但省去了一些节点,以达到用数组建树。黑色数组代表原来的数组(下面用A[i]代替),红色结构代表我们的树状数组(下面用C[i].原创 2020-07-12 23:37:48 · 98 阅读 · 0 评论 -
Java代码实现红黑树
目录:红黑树的特性 节点不是红色就是黑色 根节点为黑色 叶子节点为黑色 每个红色节点其子节点必须是黑色节点。 任意节点到到其任意的子节点的所有路径的黑色节点的数量相等 红黑树维持其特性的方法:变色和旋转 算法 插入 删除 一.红黑树维持其特性的方法:变色和旋转 红黑树的基本操作包括删除和添加。在删除或者添加一个节点的时候就有可能打破原有的红黑树维...原创 2020-04-03 21:36:23 · 1116 阅读 · 0 评论 -
Java实现平衡二叉排序树
目录:平衡二叉排序树的概念 平衡二叉排序树四种不平衡的类型及解决方法 算法 插入 删除 查找 一.平衡二叉排序树的概念如果树T既是平衡二叉树(树中每个结点的左右子树的高度差不超过1),又是二叉排序树,那么它就是平衡二叉排序树。二.平衡二叉排序树四种不平衡的类型及解决方法在此文已经分析过:开头:数据结构和算法的平衡二叉排序树部分三.算法1....原创 2020-04-02 15:46:40 · 249 阅读 · 0 评论 -
Java实现二叉查找树
实现了以下方法:makeEmpty方法 isEmpty方法 contains方法 getMin方法 getMax方法 insert方法 remove方法说明:T extends Comparable<? super T>的含义extends/super分别是泛型的上下界(含)。对T的约束是Comparable的子类,对Comparable中泛型的约束是,至少是T的...原创 2020-04-03 16:04:07 · 215 阅读 · 0 评论 -
二叉树遍历
目录:递归 先序遍历 中序遍历 后序遍历 非递归 先序遍历(借助栈实现) 中序遍历(借助栈实现) 后序遍历(借助栈实现) 层次遍历(借助队列实现) 一.递归先序遍历 public static void preOrder(BiTree bt) { if(bt==null) { System.out.prin...原创 2019-11-18 18:16:31 · 135 阅读 · 0 评论 -
排序 - 总结(8)
稳定排序:* 冒泡排序( bubble sort ) — O(n²)* 插入排序 ( insertion sort ) — O(n²)* 桶排序 ( bucket sort ) — O(n); 需要 O(k) 额外空间* 计数排序 (counting sort) — O(n+k); 需要 O(n+k) 额外空间* 合并排序 ( merge sort ) — O...原创 2019-06-23 17:35:26 · 122 阅读 · 1 评论 -
排序 - 桶排序(7)
概念桶排序 (Bucket sort)或所谓的箱排序,桶排序是鸽巢排序的一种归纳结果。但桶排序并不是 比较排序,它不受到 O(n log n)下限的影响。桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:在额外空间充足的情况下,尽量增大桶的数量 使用的映射函数能够将输入的 N 个数据均匀的分配到 K ...转载 2019-06-23 14:20:32 · 181 阅读 · 0 评论 -
排序 - 计数排序(6)
概念计数排序是一个非基于比较的排序算法。当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Ο(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与最小值的差加上1),这使得计数排序对于数据范围很大的数组,需要大量时间和内存,当然这是一种牺牲空间换取时间的做法,而且当O(k)>...原创 2019-06-21 21:23:52 · 170 阅读 · 0 评论 -
排序 - 基数排序(5)
概念基数排序是根据组成关键字的各位值,用“分配”和“收集”的方法进行排序。实现方法最高位优先(Most Significant Digit first)法,简称MSD法:先按k1排序分组,同一组中记录,关键码k1相等,再对各组按k2排序分成子组,之后,对后面的关键码继续这样的排序分组,直到按最次位关键码kd对各子组排序后。再将各组连接起来,便得到一个有序序列。最低位优先(Least...原创 2019-06-21 21:13:50 · 247 阅读 · 0 评论 -
排序 - 合并排序(4)
概念合并排序是利用“合并”方法来进行排序。合并是将两个或多个有序表进行合并,得到一个有序表。该算法是采用分治算法(Divide and Conquer)的一个非常典型的应用。合并排序也叫归并排序。算法原理合并的思路是:只要比较各个有序表的第一个记录的键值,挑选最小的一个用于排序后的第一个记录的键值,取出这个记录存入排序结果表中。继续比较各个有序表的第一个记录的键值,挑选出键值最小者,最...原创 2019-06-21 16:42:09 · 424 阅读 · 0 评论 -
排序 - 快速排序(3)
分类冒泡排序和快速排序冒泡排序概念冒泡排序的基本思想:两两比较待排序记录的键值,并交换不满足顺序要求的那些偶对,直到全部满足顺序要求为止。将待排序的记录的键值顺次两两比较,若为“逆序”则将两个记录交换。将序列照此方法从头到尾处理一遍称为一趟冒泡排序,这一趟冒泡排序的效果是将键值最大的记录交换到该记录排序的最终位置。若某一趟过程没有任何记录交换发生,则排序过程结束。对含n个记录的...原创 2019-06-21 01:17:07 · 574 阅读 · 0 评论 -
排序 - 选择排序(2)
概念选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。分类简单选择排序和堆排序简单选择排序算法思想每次从待排序...原创 2019-06-20 22:47:32 · 318 阅读 · 0 评论 -
排序 - 插入排序(1)
概念插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序算法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。插入排序的基本思想是:每步将一个待排...原创 2019-06-20 19:36:21 · 286 阅读 · 0 评论