数据结构与算法
文章平均质量分 79
虚火徉攻
一只菜鸟
展开
-
马踏棋盘算法 - 备忘录
马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格。原创 2023-01-27 22:52:21 · 100 阅读 · 0 评论 -
弗洛伊德算法 - 备忘录
和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每一个顶点到其他顶点的最短路径。原创 2023-01-20 22:13:41 · 126 阅读 · 0 评论 -
迪杰斯特拉算法 - 备忘录
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。原创 2023-01-19 22:17:11 · 112 阅读 · 0 评论 -
克鲁斯卡尔算法 - 备忘录
克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路具体做法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止。原创 2023-01-15 00:46:49 · 117 阅读 · 0 评论 -
普利姆算法 - 备忘录
普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图普利姆的算法如下:1.设G=(V,E)是连通网,T=(U,D)是最小生成树,V,U是顶点集合,E,D是边的集合2.若从顶点u开始构造最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v的visited[u]=1。原创 2022-10-30 00:41:59 · 82 阅读 · 0 评论 -
贪心算法 - 备忘录
贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。原创 2022-10-19 00:07:32 · 102 阅读 · 0 评论 -
KMP算法 - 备忘录
KMP算法应用场景-字符串匹配问题暴力匹配算法KMP算法介绍代码示例原创 2022-10-03 21:06:07 · 152 阅读 · 0 评论 -
动态规划算法 - 备忘录
1.动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法2.动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。3.与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。( 即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解 )4.动态规划可以通过填表的方式来逐步推进,得到最优解.原创 2022-10-02 21:15:54 · 382 阅读 · 0 评论 -
分治算法 - 备忘录
分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。原创 2022-09-25 19:34:12 · 115 阅读 · 0 评论 -
图 - 备忘录
所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略: (1)深度优先遍历 (2)广度优先遍历。原创 2022-09-19 21:39:19 · 89 阅读 · 0 评论 -
多路查找树(B树,B+树,B*树) - 备忘录
B-tree树即B树,B即Balanced,平衡的意思。树通过重新组织节点,降低树的高度,并且减少i/o读写次数来提升效率。如图B树通过重新组织节点,降低了树的高度.文件系统及数据库系统的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页(页得大小通常为4k),这样每个节点只需要一次I/O就可以完全载入将树的度M设置为1024,在600亿个元素中最多只需要4次I/O操作就可以读取到想要的元素,B树(B+)广泛应用于文件存储系统以及数据库系统中。......原创 2022-07-25 22:58:42 · 107 阅读 · 0 评论 -
二叉排序树(BST)&平衡二叉树(AVL) - 备忘录
二叉排序树BST(BinarySort(Search)Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明如果有相同的值,可以将该节点放在左子节点或右子节点。.........原创 2022-07-20 23:38:32 · 113 阅读 · 0 评论 -
赫夫曼编码 - 备忘录
基本介绍1.赫夫曼编码也翻译为哈夫曼编码(HuffmanCoding),又称霍夫曼编码,是一种编码方式,属于一种程序算法2.赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。3.赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间4.赫夫曼码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,称之为最佳编码原理剖析通信领域中信息的处理方式1-定长编码注意。...原创 2022-07-18 22:44:21 · 253 阅读 · 0 评论 -
哈希表-备忘录
跳转到总目录文章目录哈希表基本介绍图解说明代码示例哈希表场景:要求不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。图解说明代码示例/** * @author haowu * @create 2022-05-09-22:13 *原创 2022-05-30 23:49:52 · 115 阅读 · 0 评论 -
查找算法-备忘录
跳转到总目录文章目录查找算法线性查找算法二分查找算法插值查找算法斐波那契(黄金分割法)查找算法查找算法在java中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找线性查找算法有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】。思路:查找到全部符合条件的值。代码示例//线性查找public class SeqSearch { public static void main(Strin原创 2022-05-26 23:50:29 · 111 阅读 · 0 评论 -
排序算法-备忘录
跳转到总目录文章目录排序算法冒泡排序选择排序插入排序希尔排序快速排序归并排序基数排序常用排序算法总结和对比排序算法排序的分类:内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见的排序算法分类(见下图): 冒泡排序基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后原创 2022-04-22 00:21:06 · 168 阅读 · 0 评论 -
递归-备忘录
跳转到总目录文章目录递归递归介绍递归-迷宫问题递归-八皇后问题递归递归介绍简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。递归调用机制打印问题://输出什么? 可先思考输入4时输出顺序后在运行。public static void test(int n) {if (n > 2) { test(n - 1);}System.out.println("n=" + n);}打印问题图解:递归需要遵原创 2022-04-12 13:54:44 · 234 阅读 · 0 评论 -
栈-备忘录
跳转到总目录文章目录栈栈的介绍栈实现之综合计算器(中缀表达式)逆波兰计算器(后缀表达式) 带中缀转后缀表达式栈栈的介绍栈的英文为(stack)。栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和- 删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好原创 2022-04-12 10:26:19 · 135 阅读 · 0 评论 -
链表-备忘录
跳转到总目录文章目录链表单向链表双向链表环形链表(约瑟夫环)链表链表是有序的列表,但是它在内存中是存储如下:由上图小结:链表是以节点的方式来存储,是链式存储.每个节点包含 data 域, next 域:指向下一个节点.如图:发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定.单向链表举例示范: 使用带head头的单向链表实现 –水浒英雄排行榜管理.完成对英雄人物的增删改查操作.示例图如下:第一种方法在添加英雄时,直接添加到链原创 2022-04-12 10:24:12 · 159 阅读 · 0 评论 -
队列-备忘录
跳转到总目录文章目录队列数组模拟队列环形队列数组模拟环形队列队列队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出.队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输出而改变,而 rear则是随着数据输入而改变,如下图所示:原创 2022-04-12 10:22:40 · 76 阅读 · 0 评论 -
数据结构之数组-备忘录
跳转到总目录文章目录数组稀疏数组处理方法应用实例代码实现数组稀疏数组当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。处理方法记录数组一共有几行几列,有多少个不同的值.把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模.第一行来记录原先二维数组的几行几列,有多少个不同的值.第二行开始记录原先数组中的所有值.应用实例使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等).把稀疏数组存盘,并且可以从新恢复原来的二维数组数原创 2022-04-12 09:58:07 · 125 阅读 · 0 评论 -
数据结构与算法-目录
数组,队列,链表,栈,递归,排序算法,查找算法,哈希表,二叉树,赫夫曼编码,二叉排序树,多路查找树,图,分治算法原创 2022-04-12 09:56:17 · 557 阅读 · 0 评论