
数据结构
文章平均质量分 67
leo_messi94
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构(二十八) -- 常用的十种算法(十) -- 骑士周游回溯算法
【代码】数据结构(二十七) -- 常用的十种算法(十) -- 骑士周游回溯算法。原创 2022-09-30 16:19:57 · 168 阅读 · 0 评论 -
数据结构(二十七) -- 常用的十种算法(九) -- Floyd算法
【代码】数据结构(二十六) -- 常用的十种算法(九) -- Floyd算法。原创 2022-09-30 14:38:04 · 333 阅读 · 0 评论 -
数据结构(二十六) -- 常用的十种算法(八) -- Dijkstra算法
从起始节点A开始,遍历剩余节点,找到直连的节点,这就是A到这些点的最短路径,并标记A为已遍历找出剩余节点中路径最短的节点B,以B作为起始节点,遍历B到其他节点的距离,判断B到当前节点的距离+A到B的距离是否小于A到当前节点距离的其他组合方式(如A到C到当前节点),如果小于则设置A到当前节点的最小距离为A到B再到当前节点重复第二步。原创 2022-09-29 16:49:03 · 522 阅读 · 0 评论 -
数据结构(二十五) -- 常用的十种算法(七) -- Kruskal算法
在含有n个顶点的连通图中选择n-1条边,构成一颗极小连通子图,并使该连通子图中n-1条边上权值之和达到最小,则称其为连通网的最小生成树。用上图G4,来对Kruskal进行演示:(用数组R保存最小生成树结果)例如,对于上图G4所示的联通网可以有多棵权值总和不同的生成树。原创 2022-09-28 17:59:19 · 178 阅读 · 0 评论 -
数据结构(二十四) -- 常用的十种算法(六) -- Prim算法
Prim算法求最小生成树,也就是在包含n个顶点的连接图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图。原创 2022-09-28 00:02:03 · 185 阅读 · 0 评论 -
数据结构(二十三) -- 常用的十种算法(五) -- 贪心算法
贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪心算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。原创 2022-09-27 21:10:18 · 624 阅读 · 0 评论 -
数据结构(二十二) -- 常用的十种算法(四) -- KMP算法
Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法。假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++,继续匹配下一个字符;如果j!= -1,且当前字符匹配失败(即S[i]!原创 2022-09-27 18:27:37 · 116 阅读 · 0 评论 -
数据结构(二十一) -- 常用的十种算法(三) -- 动态规划算法
其中j-w[i]原创 2022-09-27 15:25:03 · 505 阅读 · 0 评论 -
数据结构(二十) -- 常用的十种算法(二) -- 分治算法
分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或者更多的相同或相似的子问题,再把子问题分成更小的子问题。。。直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高校算法的基础,如排序算法(快速排序、归并排序),傅里叶变换。。。。原创 2022-09-27 11:50:24 · 402 阅读 · 0 评论 -
数据结构(十九) -- 常用的十种算法(一) -- 二分查找
数组{1,3,8,10,11,67,100}编程实现二分查找,要求使用非递归的方式完成。原创 2022-09-26 23:19:49 · 171 阅读 · 0 评论 -
数据结构(十八) -- 图
所以在上面的基础上定义一个edgesTo变量来后向记录所有到s的顶点的记录,和仅记录从当前节点到起始节点不同,我们记录图中的每一个节点到开始节点的路径。上图中是黑色线条表示 深度优先搜索中,所有定点到原点0的路径, 他是通过edgeTo[]这个变量记录的,可以从右边可以看出,他其实是一颗树,树根即是原点,每个子节点到树根的路径即是从原点到该子节点的路径。下面是一个迷宫和图之间的对应关系:迷宫中的每一个交会点代表图中的一个顶点,每一条通道对应一个边。下图是深度优先搜索算法的一个简单例子的追踪。原创 2022-09-26 22:23:30 · 678 阅读 · 0 评论 -
数据结构(十四) -- 树(六) -- 平衡二叉树(AVL树)
平衡二叉树也叫平衡二叉搜索树,又被成为AVL树,可以保证查询效率较高具有以下特点:它是一颗空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一颗平衡二叉树。平很二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。原创 2022-09-22 18:24:54 · 486 阅读 · 0 评论 -
数据结构(十二) -- 树(四) -- 霍夫曼树
通信领域中信息的处理方式:定长编码:变长编码:目前存在匹配的多意性,比如10010110100,我们是理解成10 0 101 10 100,但是机器也能理解成1 0 0。。。。霍夫曼编码注意:在获取字符出现次数时,可能出现重复的情况,但是这个不影响,我们生成的霍夫曼的树不一样,但是树的权(WPL)还是一样的,也就是压缩效率还是一致的。原创 2022-09-20 17:59:50 · 2629 阅读 · 0 评论 -
数据结构(十一) -- 树(三) -- 堆排序
将无序序列构建成一个堆,根据升序降序要求选择大顶堆还是小顶堆将堆顶元素和末尾元素交换,将最大元素沉到数组末端重新调整结构,使其满足堆定义,然后继续交换堆顶元素和当前末尾元素,反复执行,直到使整个序列有序。原创 2022-09-19 11:41:55 · 654 阅读 · 0 评论 -
数据结构(十) -- 树(二) -- 线索二叉树
n个节点的二叉链表中含有n+1【公式 2n - (n-1) = n+1】个空指针域。利用二叉链表中的空指针域,存放指向该节点在某种遍历次序下的前驱和后继节点的指针(这种附加的指针称为线索)这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树。根据线索性质的不同,线索二叉树可以分为前序线索二叉树以及中序/后序线索二叉树。一个节点的前一个节点,称为前驱节点一个节点的后一个节点,称为后继节点。原创 2022-09-18 22:02:34 · 141 阅读 · 0 评论 -
数据结构(九) -- 树(一) -- 树结构及顺序查找二叉树
树的每个节点最多只能有2个子节点。原创 2022-09-18 20:02:20 · 286 阅读 · 0 评论 -
数据结构(八) -- 哈希表
散列表(hash table,也叫哈希表),是根据关键码值(key,value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数存放记录的数组叫做散列表。原创 2022-09-15 16:54:28 · 178 阅读 · 0 评论 -
数据结构(七) -- 查找算法
差值查找算法类似于二分查找,不同的是差值查找每次从自适应mid处开始查找将折半查找中的求mid索引的公式,low表示左边索引left,high表示右边索引right。key就是前面讲的findval。举例说明差值查找算法1-100的数组黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是0.618.由于按此比例设计的造型十分美丽,因此成为黄金分割,也称中外比。原创 2022-09-14 17:37:03 · 345 阅读 · 0 评论 -
数据结构(四) -- 递归
八皇后问题,十一给古老而著名的问题,是回溯算法的典型案例。该问题由马克斯贝瑟尔在1848年剔除:在8X8格的国际象棋上拜访八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法(92种)原创 2022-09-02 17:00:16 · 237 阅读 · 0 评论 -
数据结构(三) -- 栈
运算符,因此弹出5和7,计算出7。原创 2022-08-31 18:01:52 · 306 阅读 · 0 评论 -
数据结构(二) -- 链表(单链表、双向链表、约瑟夫环)
使用带head头的单链表实现:水浒英雄排行榜管理完成对人物的增删改查操作。代码:(看不懂的可以自己画个链表,然后跟着代码画图走一遍)原创 2022-08-31 11:55:58 · 199 阅读 · 0 评论 -
数据结构(一) -- 队列
队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。原创 2022-08-30 11:58:49 · 211 阅读 · 0 评论 -
布隆过滤器及解决缓存穿透
https://www.jianshu.com/p/2104d11ee0a2原创 2020-07-28 01:16:21 · 210 阅读 · 0 评论 -
数据结构(六) -- 高级排序(希尔、快速、归并、基数(桶))
前言:在基本排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的。本篇博客将介绍2种高级的排序算法:希尔排序和快速排序。另外还有一种O(NlogN)的排序算法:归并排序。但是归并排序有个缺点,它需要的空间是原始数组空间的两倍,当我们需要排序的数据占据了整个内存的一半以上的空间,那么是不能使用归并排序的。所以暂时不讲希尔排序基本思想希尔排序是基于插入排序的,又叫缩小增量排序。原创 2020-06-03 01:09:23 · 741 阅读 · 0 评论 -
数据结构参考博主及资料
https://www.yycoding.xyz/https://www.jianshu.com/nb/41117784https://www.cnblogs.com/ysocean/category/1120217.htmlhttps://blog.csdn.net/csdn_aiyang/article/details/73108606原创 2020-06-03 00:50:57 · 237 阅读 · 0 评论 -
数据结构(五) -- 基本排序(冒泡、插入、选择排序)
概述所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法根据是否需要访问外存分为内部排序和外部排序。首先建一个排序Util,然后在里面加入排序代码,后面就不统一贴了。public class SortUtil { private int[] array; public SortUtil(int[] array) { this.array = array; } // 按顺序打印数组中的元素 publ原创 2020-06-02 23:01:24 · 470 阅读 · 0 评论 -
数据结构(十七) -- 树(九) --B树B+树
出现背景:二叉查找树、AVL树、红黑树等都属于二叉树的范围,查找的时间复杂度是O(log 2N),与树的深度相关,那么降低树的深度自然会提高查找效率。但是我们面对这样一个实际问题:大规模数据存储中,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。因此,为了减少磁盘I/O的次数,必须降低树的深度,将“瘦高”的树变得“矮胖”。一个基本的想法就是:每个节点存储多个元素摒弃原创 2020-06-02 11:26:37 · 3329 阅读 · 1 评论 -
数据结构(十六) -- 树(八) --2-3-4树
前言通过前面的介绍,我们知道在二叉树中,每个节点只有一个数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树。本篇博客我们将介绍的——2-3-4树,它是一种多叉树,它的每个节点最多有四个子节点和三个数据项。同时它也是一个平衡查找树,效率比红黑树稍差。定义简介2-3-4树每个节点最多有四个子节点和三个数据项,名字中 2,3,4 的数字含义是指一个节点可能含有的子节点的个数。对于非叶节点有三种可能的情况:有一个数据项的节点总是有两个子节点;有二个数据项的节点总是原创 2020-06-02 00:33:33 · 1625 阅读 · 1 评论 -
数据结构(十五) -- 树(七) -- 红黑树
前言上一篇博客我们介绍了二叉搜索树,二叉搜索树对于某个节点而言,其左子树的节点关键值都小于该节点关键值,右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构,其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的二叉搜索树上体现的,也就是如果插入的数据是随机的,则效率很高,但是如果插入的数据是有序的,比如从小到大的顺序【10,20,30,40,50】插入到二叉搜索树中:从大到小就是全部在左边,这和链表没有任何区别了,这种情况下查找的时间复杂度原创 2020-06-01 18:29:25 · 767 阅读 · 0 评论 -
数据结构(十三) -- 树(五) -- 二叉排序(搜索)树
比如图一的B节点有三个子节点,那么它就不是二叉树,称为多路树。图二就是一个二叉树。原创 2020-06-01 00:04:45 · 658 阅读 · 0 评论 -
时间复杂度的计算
名词解释:在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。时间复杂度的表示方法其实就是算法(代码)的执行效率,算法代码的执行时间。我们来看下面一个简单的代码:int sumFunc(int n) { int num = 0; // 执行一次 for (int i原创 2020-05-28 17:55:49 · 771 阅读 · 2 评论