数据结构与算法游乐场(Java)
文章平均质量分 70
好玩的是过程~~
salt.Zhang
这个作者很懒,什么都没留下…
展开
-
图论之图与图的遍历(Java) --关系网
图论之图与图的遍历图论之图与图的遍历(Java) -- 每个顶点都是主角图的构造 -- 邻接矩阵图的构造 -- 邻接表图的连通分量 -- 深度优先图的连通分量 -- 广度优先图论之图与图的遍历(Java) – 每个顶点都是主角 聊图要先聊聊树,一棵树需要有一个根,别的节点都是在根的基础上散发开的,根据节点与根之间和父子节点之间不同的关系形成了很多特殊的树;其实图(连通图)也可以看作是一棵树,无非就是随便选取一个顶点作为根就好了,不同的是树中有根和父子节点的概念,在图中没有,每个顶点都可以是根,也就是说原创 2021-04-19 09:14:11 · 240 阅读 · 0 评论 -
并查集(Java) --造就优质矮胖树
并查集并查集(Java) -- 关系网并查集 -- 实现并查集(Java) – 关系网 其实际意义就是可快速找到两个元素是否同属一个集合,可将两点是否连通的图论问题简化为其根是否一致;主要涉及到的方法是find和union,用数组进行实现可以元素与父节点的对应关系,元素可为数组中的index,父节点则为数组中的值;~~ 并查集的优化的两种方式以高为秩和以元素个数为秩,也就是要么越高的当集合合并后的新老大,要么越多的当集合合并后的新老大;实际感觉两种优化差不多,按顺眼度来吧~~并查集 – 实现/原创 2021-04-12 10:23:34 · 195 阅读 · 0 评论 -
平衡二叉树(Java) -- 左旋旋右旋旋
平衡二叉树平衡二叉树(Java) -- 左旋旋右旋旋平衡二叉树 -- 代码平衡二叉树(Java) – 左旋旋右旋旋 平衡二叉树全称平衡二叉搜索树,所以首先具备了二叉搜索树的特性,因为二叉搜索树并未对树的高做限制,只要求了左小右大,这就可能再极端情况下,出现左斜树或右斜树,这是查找就从O(logn)的期望退化成了O(n),即使不那么极端,树的高度也是没办法控制在一个稳定值上,这就使得当数据量庞大时,查找耗时过多;这就产生了如何对一棵树进行优化,使其高度稳定,这就首先需要对树的高度进行获取和记录,通过左旋原创 2021-02-22 11:03:27 · 835 阅读 · 0 评论 -
二叉搜索树(Java) -- 左小右大
二叉搜索树二叉搜索树(Java) -- 左小右大二叉搜索树 -- 递归玩法二叉搜索树 -- 性能二叉搜索树(Java) – 左小右大 树的概念应该比较直观,一个根延伸出很多的分支,每个分支又延伸出多个分支,以此类推,直到没有分支的为叶,以此枝繁叶茂;二叉树则是一棵有性格的树,规定了一个节点的分支不能超过2个;二叉搜索树则是在这个基础上再规定了,一个节点的左子节点的值必须小于该节点的值,右子节点的值必须大于该节点的值 这里二叉搜索树是基于递归实现的,递归实现起来要简便一些,思路是从上至下的,只需原创 2021-01-23 14:18:39 · 1262 阅读 · 0 评论 -
堆排序(Java) -- 虽快,但非主业
堆排序堆排序(Java) -- 虽快,但非主业堆排序 -- 反向复制堆排序 -- 逐级最大堆化堆排序性能PK赛堆排序(Java) – 虽快,但非主业 堆排序是一个O(nlog(n))级别的算法,因为堆的特性,决定其的级别,好歹是个完全二叉树,怎么滴都带着二分的特性,O(nlog(n))顺理成章了;实现堆排序的算法有很多,这里列举了两种,都是用最大堆来实现的,会用到 最大堆实现 两种堆排序都用到了上面的最大堆实现中的最大堆类,可点击上面的链接查看~~堆排序 – 反向复制 反向复制玩法思路原创 2020-12-30 14:21:39 · 86 阅读 · 0 评论 -
堆(Java) --优先级队列的代理者
堆堆(Java) --优先级队列的代理者最大堆堆(Java) --优先级队列的代理者 聊堆不能不聊优先级队列,优先级队列就是决定哪个任务优先执行的队列,通常会有一个优先级的数据,通过数据的大小来判断优先级,实现优先级队列其实有三种方式:第一种:无序数组队列,这种在入队时的时间复杂度为O(1),但是出队时的时间复杂度是O(n);第二种:有序数组队列,这种在入队时的时间复杂度为O(n),但是出队时的时间复杂度是O(1);第三种:堆,最大堆或最小堆,入队出队都是O(logn),虽然相较于第一种第二种原创 2020-12-29 13:24:20 · 93 阅读 · 0 评论 -
快速排序(Java) -- 优不优化两个世界
快速排序快速排序(Java) -- 优不优化两个世界快速排序快速排序性能PK赛快速排序(Java) – 优不优化两个世界 快速排序是一个O(nlogn)的算法,这个算法优化好后在综合性能上是相当优秀的,不进行优化或者优化不好会慢到怀疑人生,因为一不小心就会退化成O(n2)的算法;所以可以这么说,别的算法可能优不优化都能用,快速排序是不优化没法用; 快速排序与归并排序一样用到的也是分治的算法思路,或者说二分法,不同的是归并排序的拆分和合并一定是2的倍率,而快速排序则不一定是拆分成一半+一半(最好的情原创 2020-11-06 16:38:44 · 88 阅读 · 0 评论 -
归并排序(Java) -- 速度与空间有机结合
归并排序归并排序(Java) -- 速度与空间有机结合归并排序 -- 自顶向下归并排序 -- 自底向上插入排序与归并排序性能PK赛归并排序(Java) – 速度与空间有机结合 归并排序也是一个O(nlogn)的算法,之所以称这个算法为速度与空间的有机结合,是因为这个算法既能做到O(nlogn)时间赋值度的效率,又能借助外部的空间进行排序,因为只有数据比较的时候需要将数据存入到主机中进行,别的时候数据都可以存储在外部存储中,当然这种情况下就多了很多数据的读取和写入,效率会有很大影响,但能力还是在的;所以原创 2020-11-05 13:41:13 · 129 阅读 · 0 评论 -
简单排序(Java)-- 数据结构与算法的游戏开始
数据结构与算法的游戏从简单排序开始 简单排序是排序算法中基础的部分,这部分算法都是属于O(n2)的算法,虽然从数量级上看时间消耗要比后续的O(nlog(n))级别的算法要慢,但实际表现却不见得;特别是优化过后的插入排序,在对基本有序序列的排序的时耗很低,甚至可以超越Onlog(n)级别的算法;怎么实现呢,我们逐个来看看(各排序耗时PK在最后)~~选择排序选择排序的主体实现思路:从数组的第一个成员开始逐个遍历,找到最小那个放到第一个位置,以此类推;这里放的是优化版本,一次循环直接找到最大值和最小值,减原创 2020-11-04 13:24:21 · 86 阅读 · 0 评论