- 博客(25)
- 收藏
- 关注
原创 图论之图与图的遍历(Java) --关系网
图论之图与图的遍历图论之图与图的遍历(Java) -- 每个顶点都是主角图的构造 -- 邻接矩阵图的构造 -- 邻接表图的连通分量 -- 深度优先图的连通分量 -- 广度优先图论之图与图的遍历(Java) – 每个顶点都是主角 聊图要先聊聊树,一棵树需要有一个根,别的节点都是在根的基础上散发开的,根据节点与根之间和父子节点之间不同的关系形成了很多特殊的树;其实图(连通图)也可以看作是一棵树,无非就是随便选取一个顶点作为根就好了,不同的是树中有根和父子节点的概念,在图中没有,每个顶点都可以是根,也就是说
2021-04-19 09:14:11
235
原创 并查集(Java) --造就优质矮胖树
并查集并查集(Java) -- 关系网并查集 -- 实现并查集(Java) – 关系网 其实际意义就是可快速找到两个元素是否同属一个集合,可将两点是否连通的图论问题简化为其根是否一致;主要涉及到的方法是find和union,用数组进行实现可以元素与父节点的对应关系,元素可为数组中的index,父节点则为数组中的值;~~ 并查集的优化的两种方式以高为秩和以元素个数为秩,也就是要么越高的当集合合并后的新老大,要么越多的当集合合并后的新老大;实际感觉两种优化差不多,按顺眼度来吧~~并查集 – 实现/
2021-04-12 10:23:34
187
原创 平衡二叉树(Java) -- 左旋旋右旋旋
平衡二叉树平衡二叉树(Java) -- 左旋旋右旋旋平衡二叉树 -- 代码平衡二叉树(Java) – 左旋旋右旋旋 平衡二叉树全称平衡二叉搜索树,所以首先具备了二叉搜索树的特性,因为二叉搜索树并未对树的高做限制,只要求了左小右大,这就可能再极端情况下,出现左斜树或右斜树,这是查找就从O(logn)的期望退化成了O(n),即使不那么极端,树的高度也是没办法控制在一个稳定值上,这就使得当数据量庞大时,查找耗时过多;这就产生了如何对一棵树进行优化,使其高度稳定,这就首先需要对树的高度进行获取和记录,通过左旋
2021-02-22 11:03:27
827
原创 二叉搜索树(Java) -- 左小右大
二叉搜索树二叉搜索树(Java) -- 左小右大二叉搜索树 -- 递归玩法二叉搜索树 -- 性能二叉搜索树(Java) – 左小右大 树的概念应该比较直观,一个根延伸出很多的分支,每个分支又延伸出多个分支,以此类推,直到没有分支的为叶,以此枝繁叶茂;二叉树则是一棵有性格的树,规定了一个节点的分支不能超过2个;二叉搜索树则是在这个基础上再规定了,一个节点的左子节点的值必须小于该节点的值,右子节点的值必须大于该节点的值 这里二叉搜索树是基于递归实现的,递归实现起来要简便一些,思路是从上至下的,只需
2021-01-23 14:18:39
1237
原创 堆排序(Java) -- 虽快,但非主业
堆排序堆排序(Java) -- 虽快,但非主业堆排序 -- 反向复制堆排序 -- 逐级最大堆化堆排序性能PK赛堆排序(Java) – 虽快,但非主业 堆排序是一个O(nlog(n))级别的算法,因为堆的特性,决定其的级别,好歹是个完全二叉树,怎么滴都带着二分的特性,O(nlog(n))顺理成章了;实现堆排序的算法有很多,这里列举了两种,都是用最大堆来实现的,会用到 最大堆实现 两种堆排序都用到了上面的最大堆实现中的最大堆类,可点击上面的链接查看~~堆排序 – 反向复制 反向复制玩法思路
2020-12-30 14:21:39
80
原创 堆(Java) --优先级队列的代理者
堆堆(Java) --优先级队列的代理者最大堆堆(Java) --优先级队列的代理者 聊堆不能不聊优先级队列,优先级队列就是决定哪个任务优先执行的队列,通常会有一个优先级的数据,通过数据的大小来判断优先级,实现优先级队列其实有三种方式:第一种:无序数组队列,这种在入队时的时间复杂度为O(1),但是出队时的时间复杂度是O(n);第二种:有序数组队列,这种在入队时的时间复杂度为O(n),但是出队时的时间复杂度是O(1);第三种:堆,最大堆或最小堆,入队出队都是O(logn),虽然相较于第一种第二种
2020-12-29 13:24:20
88
原创 快速排序(Java) -- 优不优化两个世界
快速排序快速排序(Java) -- 优不优化两个世界快速排序快速排序性能PK赛快速排序(Java) – 优不优化两个世界 快速排序是一个O(nlogn)的算法,这个算法优化好后在综合性能上是相当优秀的,不进行优化或者优化不好会慢到怀疑人生,因为一不小心就会退化成O(n2)的算法;所以可以这么说,别的算法可能优不优化都能用,快速排序是不优化没法用; 快速排序与归并排序一样用到的也是分治的算法思路,或者说二分法,不同的是归并排序的拆分和合并一定是2的倍率,而快速排序则不一定是拆分成一半+一半(最好的情
2020-11-06 16:38:44
84
原创 归并排序(Java) -- 速度与空间有机结合
归并排序归并排序(Java) -- 速度与空间有机结合归并排序 -- 自顶向下归并排序 -- 自底向上插入排序与归并排序性能PK赛归并排序(Java) – 速度与空间有机结合 归并排序也是一个O(nlogn)的算法,之所以称这个算法为速度与空间的有机结合,是因为这个算法既能做到O(nlogn)时间赋值度的效率,又能借助外部的空间进行排序,因为只有数据比较的时候需要将数据存入到主机中进行,别的时候数据都可以存储在外部存储中,当然这种情况下就多了很多数据的读取和写入,效率会有很大影响,但能力还是在的;所以
2020-11-05 13:41:13
124
原创 简单排序(Java)-- 数据结构与算法的游戏开始
数据结构与算法的游戏从简单排序开始 简单排序是排序算法中基础的部分,这部分算法都是属于O(n2)的算法,虽然从数量级上看时间消耗要比后续的O(nlog(n))级别的算法要慢,但实际表现却不见得;特别是优化过后的插入排序,在对基本有序序列的排序的时耗很低,甚至可以超越Onlog(n)级别的算法;怎么实现呢,我们逐个来看看(各排序耗时PK在最后)~~选择排序选择排序的主体实现思路:从数组的第一个成员开始逐个遍历,找到最小那个放到第一个位置,以此类推;这里放的是优化版本,一次循环直接找到最大值和最小值,减
2020-11-04 13:24:21
82
原创 离散数学(小总结) -- 逻辑数学观
离散数学线性代数(小总结) -- 逻辑数学观线性代数(小总结) – 逻辑数学观 供大家参考,欢迎提意见,字体太小可放大查看~~
2020-10-19 08:20:17
144
原创 线性代数(小总结) -- 雾里看花
线性代数线性代数(小总结) -- 雾里看花线性代数(小总结) – 雾里看花 供大家参考,欢迎提意见,字体太小可放大查看~~
2020-09-18 19:39:52
97
原创 图论之最短路径(C++) -- 拉帮结派搞关系
图论之最短路径图论之最短路径(C++) --拉帮结派搞关系带权图的边图论之最短路径(C++) --拉帮结派搞关系 这时一个能让人悟出人生道理的算法,为什么这么说?0?,让我们试想一下,有这么一群相互认识的人,这群人都想吃烤串,但是只有其中一个人会烤串,而且这个人一次只能为一个人烤串,先为谁烤,只取决于谁和他关系好(大佬总是这么会对金钱烦恼的,所以不考虑金钱),这时这群人中的另外两个人,小明和这个烤串大佬是兄弟关系,小红和这个大佬只见过一面或者压根不认识,但和小明是同学关系,这时对于这两人来说,小明想快
2020-07-23 11:42:40
221
原创 图论之最小生成树(C++) -- 找最近的朋友拉拉手
图论之最小生成树图论之最小生成树(C++) -- 找最近的朋友拉拉手Kruskal算法 -- 最短的,你出来图论之最小生成树(C++) – 找最近的朋友拉拉手 最小生成树(MST, Minimum Spanning Tree)顾名思义就是一棵树,这颗树要满足两个要求,一是这是一棵树,既然是一颗树就不能有环,也就是如果在找到的最小生成树中去掉任意一条边,都会将这棵树分成两颗,数学说法是两个连通分量,二是所有图中的顶点都在树中;想象一个房间里塞满了人,全是抠脚大汉,油腻多汗,出去的条件是所有人都手拉手(一
2020-07-20 11:27:54
200
原创 图论之图与图的遍历(C++) -- 每个顶点都是主角
图的遍历图的遍历(C++) -- 每个顶点都是主角图的遍历图的遍历(C++) – 每个顶点都是主角 聊图要先聊聊树,一棵树需要有一个根,别的节点都是在根的基础上散发开的,根据节点间和与根直接不同的关系形成了很多特殊的树;其实图(连通图)也可以看作是一棵树,无非就是随便选取一个顶点作为根就好了,不同的是树中有根和父子节点的概念,在图中没有,每个顶点都可以是根,也就是说图有着更广泛的性质; ...
2020-04-27 16:37:57
510
原创 并查集(C++) -- 关系网
并查集并查集(C++) -- 关系网并查集 -- 基本思路实现并查集 -- 优化实现并查集(C++) – 关系网 并查集,并就是组件关系网,查就是查找关系网中的成员;通俗来理解就是A和B交朋友,A和B就形成了一个AB的关系网,A和C交朋友,ABC就成了一个关系网,因为B可以通过A认识C,以此类推;所以并查集关心的是哪些成员是相互联系的,不管是直接的还是间接的; 一个集合总要有个老大才能表...
2020-04-16 14:38:06
762
原创 平衡二叉树(C++) -- 左旋旋右旋旋
平衡二叉树平衡二叉树(C++) -- 左旋旋右旋旋平衡二叉树 -- 左单旋平衡二叉树 -- 右单旋平衡二叉树 -- 左右双旋平衡二叉树 -- 右左双旋平衡二叉树 -- 插入和删除实现平衡二叉树(C++) – 左旋旋右旋旋 平衡二叉树全称平衡二叉搜索树,所以首先具备了二叉搜索树的特性,因为二叉搜索树并未对树的高做限制,只要求了左小右大,这就可能再极端情况下,出现左斜树或右斜树,这是查找就从O(...
2020-04-16 11:50:06
1427
原创 二叉树的遍历(C++) -- 左顾右盼
二叉树的遍历二叉树的遍历(C++) -- 左顾右盼深度优先 -- 先序遍历深度优先 -- 中序遍历深度优先 -- 后序遍历广度优先 -- 层序遍历二叉树的遍历(C++) – 左顾右盼 二叉树的遍历也就是对二叉树的每个节点都获取一遍该节点所存的键值或值,每个树肯定是从根节点开始走,但是走归走,不一定走到这就非得立马将值获取过来,因为二叉树的特性,遍历时每个节点必定会经过3次,这就使得深...
2020-04-10 14:51:14
149
原创 二叉搜索树(C++) -- 左小右大
二叉搜索树二叉搜索树(C++) -- 左小右大二叉搜索树 -- 递归玩法二叉搜索树 -- 性能二叉搜索树(C++) – 左小右大 树的概念应该比较直观,一个根延申出很多的分支,每个分支又延伸出多个分支,以此类推,直到没有分支的为叶,以此枝繁叶茂;二叉树则是一棵有性格的树,规定了一个节点的分支不能超过2个;二叉搜索树则是在这个基础上再规定了,一个节点的左子节点的值必须小于该节点的值,右子节...
2020-04-10 13:23:30
1923
原创 二分查找(C++) -- 查找思路的起始
二分查找二分查找(C++) -- 查找思路的起始二分查找法 -- 非递归玩法二分查找法 -- 递归玩法二分查找(C++) – 查找思路的起始 二分查找就是将有序序列一分为二,注意必须是有序序列,将待查找的值与有序序列的中间位置的值进行比较,相等则已找到,小于则在左半继续找,大于则在右半继续找,依次类推,每找一次去掉一半的数据,用排序算法将序列排好序且可以进行各种动态维护后,就可以用二分查...
2020-04-09 15:45:01
152
原创 快速排序(C++) -- 优不优化两个世界
快速排序快速排序(C++)--优不优化两个世界快速排序--基本玩法快速排序--双路玩法快速排序--三路玩法快速排序性能PK赛快速排序(C++)–优不优化两个世界 快速排序是一个O(nlogn)的算法,这个算法优化好后在综合性能上是相当优秀的,不进行优化或者优化不好会慢到怀疑人生,因为一不小心就会退化成O(n2)的算法;所以可以这么说,别的算法可能优不优化都能用,快速排序是不优化没法用; ...
2020-04-02 16:14:40
95
原创 归并排序(C++) -- 速度与空间有机结合
归并排序归并排序(C++)--速度与空间有机结合归并排序--自顶向下归并排序--自底向上插入排序与归并排序性能PK赛归并排序(C++)–速度与空间有机结合 归并排序也是一个O(nlogn)的算法,之所以称这个算法为速度与空间的有机结合,是因为这个算法既能做到O(nlogn)时间赋值度的效率,又能借助外部的空间进行排序,因为只有数据比较的时候需要将数据存入到主机中进行,别的时候数据都可以存储在...
2020-04-02 16:14:33
151
原创 索引堆(C++) -- 小索引与大数据的那些事
索引堆索引堆(C++) -- 小索引与大数据的那些事索引堆(C++) – 小索引与大数据的那些事 堆是优先级队列的最佳代理者,一般情况下已经很好用了,但是因为堆的维护需要进行大量的数据赋值操作,当数据很大时会有大量的时间损耗,所以索引堆就发挥其意义了;在堆的类中新建一个索引数组,索引数组的一个索引值对应一个元素数据,且索引数组中索引与元素数据的对应关系不变(当然可以进行数据的相应操作,增删改...
2020-04-02 16:14:11
204
原创 堆排序(C++) -- 虽快,但非主业
堆排序堆排序(C++) -- 虽快,但非主业堆排序 -- 反向复制堆排序 -- 逐级最大堆化堆排序 -- 原地变有序堆排序性能PK赛堆排序(C++) – 虽快,但非主业 堆排序是一个O(nlog(n))级别的算法,因为堆的特性,决定其的级别,好歹是个完全二叉树,怎么滴都带着二分的特性,O(nlog(n))顺理成章了;实现堆排序的算法有很多,这里列举了三种,都是用最大堆来实现的,会用到 ...
2020-04-02 14:19:52
149
原创 堆(C++) --优先级队列的代理者
堆堆(C++) --优先级队列的代理者最大堆堆(C++) --优先级队列的代理者 聊堆不能不聊优先级队列,优先级队列就是决定哪个任务优先执行的队列,通常会有一个优先级的数据,通过数据的大小来判断优先级,实现优先级队列其实有三种方式:第一种:无序数组队列,这种在入队时的时间复杂度为O(1),但是出队时的时间复杂度是O(n);第二种:有序数组队列,这种在入队时的时间复杂度为O(n),但是出...
2020-04-02 11:19:47
112
原创 简单排序(C++)-- 数据结构与算法的游戏开始
简单排序数据结构与算法的盛宴从简单排序开始选择排序冒泡排序插入排序希尔排序插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入数据结构与算法的盛宴从简单排序开始 简单排序是排序算...
2020-03-15 11:08:27
221
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人