
数据结构与算法
数据结构的知识和常用的算法
PCC.
这个作者很懒,什么都没留下…
展开
-
第十四章:常用的十大算法
14.10马踏棋盘算法马踏棋盘规则:将马随机放在国际象棋的 8×8 棋盘 Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64 个方格算法实现:1、 马踏棋盘问题(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用2、 如果使用回溯(就是深度优先搜索)来解决,假如马儿踏了 53 个点,如图:走到了第 53个,坐标(1,0),发现已经走到尽头,没办法那就只能回退了,查看其他的路径,就在棋盘上不停的回溯……package原创 2021-12-11 10:44:48 · 101 阅读 · 0 评论 -
第十四章:常用的十大算法
14.9弗洛伊德算法(Floyd)Floyd算法介绍:1、 和 Dijkstra 算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法2、 弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径,迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径3、 弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点 的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所以需要将每一个顶点看做被访问顶点,求出从每 一个顶点到原创 2021-12-11 10:39:19 · 1139 阅读 · 0 评论 -
第十四章:常用的十大算法
14.8迪杰斯特拉算法(Dijkstra)Dijkstra算法介绍:迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以 起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止Dijkstra算法思路:1、 设置出发顶点为 v,顶点集合 V{v1,v2,vi…},v 到 V 中各顶点的距离构成距离集合 Dis,Dis{d1,d2,di…},Dis 集合记录着 v 到图中各顶点的距离(到自身可以看作 0,v 到 vi距离对应为di)2原创 2021-12-11 10:30:32 · 555 阅读 · 0 评论 -
第十四章:常用的十大算法
14.7克鲁斯卡尔算法(Kruskal)Kruskal算法也是求最短路径(最小生成树)的经典算法,一定要掌握,因为在很多的面试题中都会出现Kruskal算法介绍:1、 克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法2、 基本思想:按照权值从小到大的顺序选择 n-1 条边,并保证这 n-1 条边不构成回路(注意对比,Prim算法是添加顶点,再从顶点选最小的边,Kruskal是直接选最小的边加入)3、 具体做法:首先构造一个只含 n 个顶点的森林,然后依权值从小到大从连通网中选原创 2021-12-10 20:04:29 · 483 阅读 · 0 评论 -
第十四章:常用的十大算法
14.6普里姆算法(Prim)Prim算法是求最短路径(最小生成树)的经典算法,一定要掌握,因为在很多的面试题中都会出现最小生成树介绍:给定一个带权的无向连通图,如何选取一棵生成树,使树上所有边上权的总和为最小,这叫最小生成树1、N 个顶点,一定有 N-1 条边2、包含全部顶点,N-1 条边都在图中Prim算法介绍:普利姆(Prim)算法求最小生成树,也就是在包含 n 个顶点的连通图中,找出只有(n-1)条边包含所有 n 个顶点的连通子图,也就是所谓的极小连通子图1、 设 G=(V,E)是原创 2021-12-10 19:49:24 · 196 阅读 · 0 评论 -
第十四章:常用的十大算法
14.5贪心算法贪心算法的介绍:1、 贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法2、 贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果贪心算法的应用例子解题思路:1、 遍历所有的广播电台, 找到一个覆盖了最多未覆盖的地区的电台(此电台可能包含一些已覆盖的地区,但没有关系)2、 将这个电台加入到一个集合中(比如 ArrayList), 想办法把该电台覆盖原创 2021-12-10 19:32:30 · 306 阅读 · 0 评论 -
第十四章:常用的十大算法
14.4KMP算法字符串匹配问题:1、 有一个字符串 str1= “我爱中国中国爱我爱中国”,和一个子串 str2=“中国爱我”;2、 现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1对于这类寻找父串中是否存在指定子串的问题,有两种解决方法1、 暴力匹配算法2、 KMP算法暴力匹配算法:就是一个字一个字地进行匹配,直到匹配成功或者父串结束为止1、 如果当前字符匹配成功(即 str1[i] == str2[j]),则 i++,j++,继续匹配原创 2021-12-09 17:32:46 · 519 阅读 · 0 评论 -
第十四章:常用的十大算法
14.3动态规划算法动态规划算法介绍:1、 动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法2、 动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解3、 与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 (即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)4、 动态规划可以通过填表的方式来逐步原创 2021-12-09 17:06:22 · 424 阅读 · 0 评论 -
第十四章:常用的十大算法
14.2分治算法分治算法的介绍:分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或 相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题 的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法的基本步骤:1、 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题2、 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题原创 2021-12-09 16:56:38 · 157 阅读 · 0 评论 -
第十四章:常用的十大算法
14.1二分查找算法(非递归)二分查找算法(非递归)介绍:1、 二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找2、 二分查找法的运行时间为对数时间 O(㏒₂n) ,即查找到需要的目标位置最多只需要㏒₂n 步,假设从[0,99]的 队列(100 个数,即 n=100)中寻到目标数 30,则需要查找步数为㏒₂100 , 即最多需要查找 7 次(2^6 < 100 < 2^7)package com.atguigu14.binarySearchNoRecu原创 2021-12-07 14:31:21 · 513 阅读 · 0 评论 -
第十三章:图
13.4图的深度优先遍历所谓图的遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:1、 深度优先遍历2、 广度优先遍历图的深度首先遍历思路:1、 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点,可以这样理解: 每次都在访问完当前结点后首先访问当前结点的第一个邻接结点2、 这样的访问策略是优先往纵向挖掘深入,而不是对一个结原创 2021-12-06 09:59:43 · 195 阅读 · 0 评论 -
第十三章:图
13.2图的表示方式图的表示方式:1、 邻接矩阵(用二维数组来表示)邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于 n 个顶点的图而言,矩阵是的 row 和 col 表示的是 1…n 个点(邻接矩阵实质上就是,横坐标和纵坐标分别是结点,如果两个结点之间存在边,那么对应的位置就是1,否则就是0,这是按照个人的约定来设置)2、 邻接表(用链表来表示)(1) 邻接矩阵需要为每个顶点都分配 n 个边的空间,其实有很多边都是不存在,会造成空间的一定损失(2) 邻接表的实现只关心存在的边,不关心不存在的原创 2021-12-06 09:56:40 · 404 阅读 · 0 评论 -
第十三章:图
13.1图基本介绍为什么需要图?在需要表示多对多的关系的时,用图图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。图的基本概念:1、 顶点2、 边3、 路径4、 无向图5、 有向图6、 带权图看图说明:...原创 2021-12-06 09:54:20 · 78 阅读 · 0 评论 -
第十二章:多路查找树
12.3B树、B+树和B*树B树的介绍:B-tree 树即 B 树,B 即 Balanced,平衡的意思。有人把 B-tree 翻译成 B-树,容易让人产生误解。会以为 B-树 是一种树,而 B 树又是另一种树。实际上,B-tree 就是指的 B 树对B树的说明:1、 B 树的阶:节点的最多子节点个数。比如 2-3 树的阶是 3,2-3-4 树的阶是2、 B-树的搜索,从根结点开始,对结点内的关键字(有序)序列进行二分查找,如果命中则结束,否则进入查询 关键字所属范围的儿子结点;重复,直到所对应的原创 2021-12-06 09:52:59 · 74 阅读 · 0 评论 -
第十二章:多路查找树
12.2(2-3树)2-3树的基本介绍:2-3树是最简单的B树结构,具有以下特点:1、 2-3 树的所有叶子节点都在同一层.(只要是 B 树都满足这个条件)2、 有两个子节点的节点叫二节点,二节点要么没有子节点,要么有两个子节点3、 有三个子节点的节点叫三节点,三节点要么没有子节点,要么有三个子节点4、 2-3 树是由二节点和三节点构成的树2-3树应用案例:其他说明:除了 23 树,还有 234 树等,概念和 23 树类似,也是一种 B 树。 如图:...原创 2021-12-06 09:50:51 · 68 阅读 · 0 评论 -
第十二章:多路查找树
12.1二叉树与B树二叉树问题的讨论:二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如 1 亿),就存在如下问题:1、 在构建二叉树时,需要多次进行 i/o 操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响2、 节点海量,也会造成二叉树的高度很大,会降低操作速度多叉树:在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree)B树的基本介绍:B 树通过重新原创 2021-12-06 09:49:07 · 581 阅读 · 0 评论 -
第十一章:树结构实际应用
11.5平衡二叉树平衡二叉树出现的原因介绍:因为二叉排序树可能会出现所有的节点都在同一棵子树上,导致出现二叉树变链表的情况,因此需要对二叉树进行调整,也就是所谓的平衡二叉树平衡二叉树的基本介绍:1、 平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为 AVL 树,可以保证查询效率较高2、 具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、原创 2021-12-03 17:42:22 · 591 阅读 · 0 评论 -
第十一章:树结构实际应用
11.4二叉排序树二叉排序树的介绍:二叉排序树:BST: (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当 前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点二叉排序树的构建与遍历较为简单直接在代码中实现二叉排序树的删除节点的思路,删除情况比较复杂,有下面三种情况需要考虑:1、 删除叶子节点 (比如:2, 5, 9, 12)(1) 需求先去找到要删除的结点 targetNode(原创 2021-12-03 17:39:31 · 268 阅读 · 0 评论 -
第十一章:树结构实际应用
11.3赫夫曼编码赫夫曼编码基本介绍:1、 赫夫曼编码也翻译为哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式, 属于一种程序算法2、 赫夫曼编码广泛地用于数据文件压缩。其压缩率通常在20%~90%之间通信领域中信息的处理方式:1、 定长编码这种处理方法实质:每一个字符都对应一个Ascll编码,将对应字符转换成相应的Ascll编码,再把Ascll编码转换成对应的二进制,就可以进行传输,不过这种处理方法有一个很严重的缺陷,那就是编码长度太长了!2、 变长编码变长编码原创 2021-12-03 17:28:43 · 612 阅读 · 0 评论 -
第十一章:树结构实际应用
11.2赫夫曼树赫夫曼树基本介绍:1、 给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度 (wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树2、 赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近赫夫曼树几个重要概念和举例说明:1、 路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-原创 2021-12-03 17:22:45 · 782 阅读 · 0 评论 -
第十一章:树结构实际应用
11.1堆排序堆排序的基本介绍:1、 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序2、 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值, 称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系3、 每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆4、 每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆(注意:一般升序采用大顶堆,降序采用小顶堆。因为原创 2021-12-03 17:20:41 · 352 阅读 · 0 评论 -
第十章:树结构的基础部分
10.3线索化二叉树线索化二叉树就是在二叉树的基础上,将那些没有使用到的指针(如:叶子节点的左右指针),按照遍历的方式(前序、中序、后序)分别指向该节点的前驱和后继【暂时还没发现线索化二叉树的应用】线索二叉树基本介绍1、 n个结点的二叉链表中含有n+1【公式 2n-(n-1)=n+1】个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")2、 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树 (Threaded Bin原创 2021-11-29 11:31:47 · 267 阅读 · 0 评论 -
第十章:树结构的基础部分
10.2顺序存储二叉树顺序存储二叉树的概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组【总结:也就是用数组来实现二叉树的结构】顺序存储二叉树的特点:1、 顺序二叉树通常只考虑完全二叉树【注意:其他的树应该不行】2、 第n个元素的左子节点为 2 * n + 1【即:左孩子节点 = 父节点 * 2 + 1】3、 第n个元素的右子节点为 2 * n + 2【即:右孩子节点 = 父节点 * 2 + 2】4、 第n个元素的父节点为 (n-1) / 2【原创 2021-11-29 11:30:24 · 543 阅读 · 0 评论 -
第十章:树结构的基础部分
10.1二叉树二叉树是一种数据结构,二叉树与数组、链表的比较:1、 数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度缺点:如果要检索具体某个值,或者插入某个值(按一定顺序)会整体移动,效率较低【总结:数组便于查询,不适于插入】2、 链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好)缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点开始遍历)【总结原创 2021-11-29 11:28:25 · 297 阅读 · 0 评论 -
第九章:哈希表
9.2哈希表的基本介绍哈希表的基本介绍:散列表(Hash table,也叫哈希表), 是根据关键码值(Key value)而直接进 行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表链式哈希表的结构:哈希表实质上就是一个数组,数组的每一个元素里面存放的是一条链表(也就是一个链表数组)。在存入数据时,根据要存入数据的id求出该数据应该存放在哪一条链表之上(通常是采用求模的方法:id % 数组的长度),之后将该原创 2021-11-26 09:21:34 · 1014 阅读 · 0 评论 -
第八章:查找算法
8.4插值查找算法插值查找原理介绍:1、 插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找2、 将折半查找中的求mid 索引的公式 , low 表示左边索引left, high表示右边索引right. key 就是前面我们讲的 findVal3、 int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ;/插值索引/对应前面的代码公式: int mid = left + (right原创 2021-11-26 09:18:05 · 185 阅读 · 0 评论 -
第八章:查找算法
8.3二分查找算法二分查找算法的介绍:二分查找算法是对有序数组进行查找的算法。通过将需要查找的值与数组中间位置的值比较,从而确定要查找的数在中间值的左半部分或者右半部分,利用递归的思想,得到最终的结果package com.atguigu07.search;import java.util.ArrayList;import java.util.Scanner;/** * @author peng * @date 2021/11/23 - 14:26 * 实现二分查找 */publi原创 2021-11-26 09:16:40 · 465 阅读 · 0 评论 -
第八章:查找算法
8.1查找算法介绍在java中,我们常用的查找有四种:1、 顺序(线性)查找2、 二分查找/折半查找3、 插值查找4、 斐波那契查找(没有掌握)8.2线性查找算法线性查找算法是最简单的一种查找算法。就是通过遍历数组,判断数组中每一个值与需要查找的值是否相等,从而做出判断的算法package com.atguigu07.search;import java.util.Scanner;/** * @author peng * @date 2021/11/23 - 11:40 * &原创 2021-11-26 09:15:21 · 196 阅读 · 0 评论 -
第七章:排序算法
7.12常用排序算法总结与对比常用排序算法对比:重要概念:1、 稳定:如果 a原本在 b前面,而a=b , 排序之后 a仍然在 b的前面2、 不稳定:如果 a原本在 b的前面,而 a=b,排序之后 a可能会出现在 b的后面3、 内排序:所有排序操作都在内存中完成4、 外排序:由于数据太大,因此把数据 放在磁盘中,而排序通过磁盘和内存 的数据传输才能进行5、 时间复杂度: 一个算法执行所耗费的时间6、 空间复杂度:运行完一个程序所需内存的大小7、 n: 数据规模8、 k: “桶”的个数原创 2021-11-25 10:05:48 · 256 阅读 · 0 评论 -
第七章:排序算法
7.11基数排序基数排序(桶排序)介绍:1、 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶 子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值, 将要排序的元素分配至某些“桶”中,达到排序的作用2、 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法3、 基数排序(Radix Sort)是桶排序的扩展4、 基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然原创 2021-11-25 10:04:21 · 473 阅读 · 0 评论 -
第七章:排序算法
7.10归并排序归并排序介绍:归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一 起,即分而治之)归并排序思想示意图1-基本思想:归并排序思想示意图2-合并相邻有序子序列:再来看看治阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比 如上图中的最后一次合并,要将[4,5,7,8]和[1,2原创 2021-11-25 10:02:12 · 168 阅读 · 0 评论 -
第七章:排序算法
7.9快速排序快速排序法介绍:快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序 将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分 的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个 排序过程可以递归进行,以此达到整个数据变成有序序列快速排序法示意图:package com.atguigu06.sort;/** * @author peng * @date 2021/11/20 - 15:01 * * 实现快速排序 *原创 2021-11-25 10:00:54 · 651 阅读 · 0 评论 -
第七章:排序算法
7.8希尔排序希尔排序法介绍:希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序希尔排序法基本思想:希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序; 随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止希尔排序算法示意图:package com.atguigu06.sort;/** * @author peng原创 2021-11-25 09:59:44 · 193 阅读 · 0 评论 -
第七章:排序算法
7.7插入排序插入排序法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的 适当位置,以达到排序的目的插入排序法思想:插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为 一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表插入排序思路图:package com.atguigu原创 2021-11-25 09:58:27 · 260 阅读 · 0 评论 -
第七章:排序算法
7.6选择排序基本介绍:选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一 元素,再依规定交换位置后达到排序的目的选择排序思想:选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第 一次从arr[0]~arr[n-1]中选取最小值,与arr[0]交换,第二次从 arr[1]arr[n-1]中选取最小值,与arr[1]交换,第三次从arr[2]arr[n-1]中 选取最小值,与arr[2]交换,…,第i次从arr[i-1]~arr[n-1]中选取最小值,原创 2021-11-25 09:56:57 · 104 阅读 · 0 评论 -
第七章:排序算法
7.5冒泡排序基本介绍:冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大 的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒冒泡排序的优化思路:如果当前数列还不是有序数列, 那么每一轮都会发生位置的交换;如果当前数列已经是有序数列了,那么就不会发生位置的交换了。因此我们可以这样想,设置一个flag变量来监视每一轮是否发生了位置的交换,如果有则说明还不是有序数列;如果没有则说明当前数列已经是有序的原创 2021-11-25 09:55:10 · 84 阅读 · 0 评论 -
第七章:排序算法
7.3算法的时间复杂度度量一个程序(算法)执行时间的两种方法:1、 事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素, 这种方式,要在同一台计算机的相同状态下运行,才能比较那个算法速度更快2、 事前估算的方法通过分析某个算法的时间复杂度来判断哪个算法更优时间频度一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句原创 2021-11-25 09:51:07 · 137 阅读 · 0 评论 -
第七章:排序算法
7.1排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程排序的分类:1、 内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序2、 外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序7.2排序的分类常见的排序算法:...原创 2021-11-25 09:45:51 · 71 阅读 · 0 评论 -
第六章:递归
八皇后问题package com.atguigu05.recursion;/** * @author peng * @date 2021/11/18 - 14:32 * * 使用递归解决八皇后问题 * 八皇后问题: * 任意的两个皇后不能放置在同一行、同一列或者同一对角线上 */public class Queue8 { //定义皇后的个数 int max = 8; //定义一个数组用来存放皇后的位置,数组元素的下标表示皇后所在的行,数组元素的值表示皇后所在的原创 2021-11-19 10:25:49 · 237 阅读 · 0 评论 -
第六章:递归
迷宫问题package com.atguigu05.recursion;/** * @author peng * @date 2021/11/18 - 11:14 * * 使用递归解决迷宫问题 */public class MiGong { public static void main(String[] args) { //创建二维数组模拟迷宫 int[][] map = new int[8][7]; //使用数字1表示迷宫的墙原创 2021-11-19 10:23:45 · 99 阅读 · 0 评论