- 博客(190)
- 资源 (39)
- 收藏
- 关注
原创 算法-21-普利姆算法
二十一、普利姆算法(Prim)0、最小生成树从一个带有权值的无向连同图中,选择出一颗所有边上权值的和最小的树,这就是最小生成树(Minimum Spanning Tree, MST)。特点:有n个顶点,则对应n-1条边节点包含全部的顶点生成最小生成树的算法主要是Prim和Kruskal1、Prim算法概念在包含n个顶点的连通图中,找出只有n-1条边包含所有n个顶点的连通图,这就是极小连通图。2、过程从指定的起始顶点开始查找。创建一个和顶点数组长度一样的数组,用于标记某个顶点
2021-04-11 21:34:15
322
原创 算法-20-贪心算法
二十、贪心算法1、概念在对问题求解时,尽量每一步选择是最好或最优的,从而希望结果也是最好或最优的解法。在实际运用时,得到的结果不一定是最优的结果,但都是相对接近最优的结果。常用于集合覆盖等问题。2、集合覆盖问题现有几个元素,每个元素都能满足一定的场景,且存在重复的场景,问怎样组合元素,才能使得所有元素所满足的场景最多(尽量不重复),且选择的元素数量最少。如果使用穷举法来组合每个元素,则随着元素数量的增加,组合的结果也会跟着增加。公式是2^n - 1。这是一个指数阶,非常地耗时。但是使用贪心
2021-04-11 21:32:04
594
原创 算法-19-字符串匹配算法
十九、字符串匹配算法1、暴力匹配用子字符串去依次匹配主字符串的每一个字符,直到匹配完子字符串的全部字符(找到了)或匹配完主字符串的全部字符(没找到)。需要两个索引,分别记录匹配主字符串和匹配子字符串的字符索引位置,如果遇到相同的字符,则后移两个索引位置,否则就将主字符串匹配索引移动到当前索引位置减去子字符串索引位置,再后移一位,并重置子字符串索引位置为0,然后再重新匹配主字符串的字符元素。示例public int violenceSearch(final String str, final Str
2021-04-11 21:28:56
265
原创 算法-18-动态规划
十八、动态规划(Dynamic Programming)1、概念和分治算法类似,动态规划也是将大问题划分为多个小问题解决,最终获取最优解的算法。不同的是,动态规划所拆分的小问题之间存在依赖性,即下一步骤的解决依赖于上一步骤的解决。可以通过填表法来逐步推进问题的解决,最终得到最优解。2、背包问题现有一个背包,存在容量上限,还有若干物品,分别有对应的体积和价值。要求在不超过背包容量上限的情况下,装入背包中的物品的总价值最大。问如何选择物品。01背包:要求装入的物品不能重复,即每个物品的数量最多一个
2021-04-11 21:27:29
167
原创 算法-17-分治算法
十七、分治算法1、概念分治(Divide-and-Conquer),分而治之,将一个复杂的问题,分成两个或多个相同或类似的子问题,再把子问题分成更小的子问题,直到问题简单到可以直接求解,再将所有的子问题的解合并成一个解,即原问题的解。应用:快速排序、归并排序、二分查找、汉诺塔问题等2、汉诺塔问题一共有三根柱子,在其中一根柱子上,从上往下按照从小到大的顺序放着n个圆盘(64个)。现在需要将这些圆盘还按照从小到大的顺序放置到另外的一根柱子上,要求每次只能移动一个圆盘,且小圆盘只能放到大圆盘上。问全部移
2021-04-11 21:25:30
140
原创 算法-16-哈夫曼编码
十六、哈夫曼编码(Huffman Coding)1、概念它是哈夫曼树(Huffman Tree)在电讯通信领域中的经典应用。广泛应用于数据文件的压缩,压缩率一般在20% ~ 90%之间,属于**可变长编码(VLC)**的一种,重复的内容越多,压缩率越好。但是一个文件如果已经是压缩过的,那么再次压缩,其文件大小可能不会有明显的变化。它属于无损压缩。2、原理定长编码,将信息的原本形式,先转换为字节数组(byte[]),然后再获取每一个字节所对应的二进制(低8位),再进行数据的传输。变长编码,将信息
2021-04-11 21:23:35
431
原创 算法-15-斐波那契查找
十五、斐波那契查找0、斐波那契数列第一个元素和第二个元素都是1,之后从三个元素开始,它的值等于前两个元素的和,每个元素之间的比值接近于0.618。示例前10个:1 1 2 3 5 8 13 21 34 55代码实现/** * 递归版 */public int fibonacci(int n) { if (0 >= n) { throw new IllegalArgumentException("n must > 0!"); } if (1
2021-04-11 21:20:08
130
原创 算法-14-插值查找
十四、插值查找1、概念和二分查找类似,不同的是中间索引位置,不是(最小索引 + 最大索引) / 2,而是最小索引 + (最大索引 - 最小索引) × (待查找元素值 - 最小索引元素值) / (最大索引元素值 - 最小索引元素值)元素序列必须是有序的。2、示例public int interpolationSearch(int[] array, int element) { int len = array.length; if (element < array[0] ||
2021-04-11 21:18:59
253
原创 算法-13-二分查找
十三、二分查找1、概念使用二分的思想,将序列分为两部分,并比较待查找元素和中间索引元素值的大小,如果相等就返回中间索引;如果小于,则查找起始索引到中间索引的前一位;如果大于,则查找中间索引的后一位到终止索引。元素序列必须是有序的。2、示例返回找到的一个索引值/** * 递归版 */public int binarySearch(int[] array, int element) { int len = array.length; if (element < array
2021-04-11 21:17:35
143
原创 算法-12-线性查找
十二、线性查找1、概念按照顺序,依次查找给定元素序列,直到找到为止。元素序列可以是无序的。2、示例public int linearSearch(int[] array, int element) { for (int i = 0, len = array.length; i < len; i++) { if (element == array[i]) { return i; } } return -1;}
2021-04-11 21:16:02
88
原创 算法-11-堆排序
十一、堆排序(Heap Sort)1、概念使用堆数据结构,而实现的一种排序。分为大顶堆和小顶堆两种:大顶堆,它是一棵完全二叉树,每个节点的值都大于或等于其左右子节点的值,但是没有规定左子节点的值和右子节点的值的大小关系。正序使用大顶堆。array[i] >= array[i * 2 + 1] && array[i] >= array[i * 2 + 2]小顶堆:它是一棵完全二叉树,每个节点的值都小于或等于其左右子节点的值,但是没有规定左子节点的值和右子节点的值
2021-04-07 00:41:17
125
原创 算法-10-基数排序
十、基数排序(Redix Sort)1、概念又称桶排序,它是利用排序桶,将排序序列按照从最低位到最高位的排序,以实现最终的排序。优化:初始化排序桶时,不要指定桶元素数组,在每次添加桶元素时,再动态地扩容桶元素数组,并添加元素。2、过程获取最大值的个数,即需要重新给定排序序列元素的次数。创建排序桶,非负数(0~9),个数就是10个。从最低位到最高位进行重新给定排序序列元素,以当前位的值取余桶的个数,得到桶索引,并更新桶元素个数统计值。遍历所有的桶,重新分配排序序列元素的索引位置。3、示例
2021-04-07 00:39:18
149
2
原创 算法-9-归并排序
九、归并排序(Merge Sort)1、概念使用归并思想,将排序序列进行分-合的操作,实现最终的排序。分-合(devide-conquer):将问题分为一些小问题,递归(也可以采用迭代的方式)拆分子序列(完全二叉树),各个求解,再将得到的各个答案,合并在一起。 34158276 3415 8276 34 15 82 763 4 1 5 8 2 7 6 34 15 28 67 1534
2021-04-07 00:37:05
146
原创 算法-8-快速排序
八、快速排序(Quick Sort)1、概念使用二分的思想,每次将排序序列分成两组。找到中间索引元素值,依次比较两端元素值和中间索引,后移开始索引,前移结束索引,不断地向中间索引位置逼近,如果开始索引大于结束索引,则跳出循环,否则就交换两端索引值,如果两端有元素值等于中间索引值,则需要移动对端索引值。最后判断开始索引和前移后的结束索引之间是否还有元素,如果存在,则仍需快排。同理后移后的开始索引和结束索引之间也要判断是否需要进行快排。快速排序属于交换排序的一种。2、过程首先定义一个排序方法,入
2021-04-07 00:36:07
142
原创 算法-7-希尔排序
七、希尔排序(Shell Sort)1、概念使用二分的思想,将排序序列分组,直到每组的元素数量是1为止。交换式:以分组元素数量为索引间距,依次比较每个分组的首元素和尾元素,若发现逆序,则交换元素顺序(在比较过程中,排好多个组的顺序)。最终将所有组的元素都比较一遍,实现最终的排序。位移式:以分组元素数量为索引间距,对每个分组进行直接插入排序(依次比较每个分组的首元素和尾元素,若发现逆序,则将首元素的值覆盖掉尾元素的值,比较完毕后,再将尾元素的值覆盖掉上次比较到逆序的元素索引的下一个索引间距的元素的值。
2021-04-07 00:35:02
164
原创 算法-6-直接插入排序
六、直接插入排序(Insert Sort)1、概念从排序序列的头开始比较,第一次比较前两个元素,第二次比较前三个元素,依次类推,直到比较所有的元素。每次拿初始查找索引元素值进行从后向前的比较,如果该索引元素值小于(正序)前一位索引元素值,则将前一位的索引值覆盖掉当前索引索引值,然后前置索引,依次比较,直到比较到头(索引=0),并用初始查找元素值覆盖掉初始查找索引的下一位。反复比较,实现最终排序。直接插入排序属于插入排序的一种。2、过程两层嵌套循环。外层循环,用于指定排序索引的初始位置,从
2021-04-07 00:34:05
214
原创 算法-5-简单选择排序
五、简单选择排序(Select Sort)1、概念从排序序列的待确认元素索引位置开始比较,从前往后,找到最小值(正序),整个排序序列比较完成后,可以确认一个最值,与开始比较的索引值进行交换。反复比较,实现最终排序。简单选择排序属于选择排序的一种。2、过程两层嵌套循环。外层循环,用于表示是第几次比较,排序完成,需要比较排序序列元素个数次。用一个临时变量记录本次比较的起始下标,再用一个临时变量记录本次比较的起始下标对应的元素值。内层循环,用于比较两个元素的大小,从本次查找的起始下标的
2021-04-07 00:33:15
153
原创 算法-4-冒泡排序
四、冒泡排序(Bubble Sort)1、概念依次比较排序序列的待比较部分的相邻两个元素,每次可以确定一个较大值(正序),如果逆序则交换顺序,这样可以将其放到上次比较得出的最大值(正序)的前一位。反复比较,实现最终排序。它就像水底的气泡一样逐渐上冒。优化:每次比较时,可以增加一个判断,即本次排序比较中,是否有过交换元素顺序,若没有交换过,即已排序完毕,无需再次比较。冒泡排序属于交换排序的一种。2、过程两层嵌套循环。内层循环,用于比较相邻两个元素的大小,从下标0开始,到排序序列元素个数减1,
2021-04-07 00:32:15
344
原创 算法-2-空间复杂度
二、算法空间复杂度(Space Complexity)1、概念一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,是算法在运行过程中,临时所占用的存储空间大小的度量,它也是一个算法规模为n的函数。有的算法需要占用的临时工作单元数和解决问题的规模n有关,它会随着n的增大而增大,当n较大时,将会占用较多的存储单元。2、实际应用一般对算法的分析和讨论,更多的是看时间复杂度,也即程序执行的效率(用户体验角度)。...
2021-04-07 00:29:47
120
原创 接口测试
接口测试1、概念测试系统组件间接口的一种测试,重点关注数据传递。一般用于多系统间交互开发,或者拥有多个子系统的应用系统开发的测试。2、RESTRepresentational State Transfer,一种软件架构风格,可以降低开发的复杂性,提高系统的可伸缩性。最早是由Roy Fielding博士发表的论文中提到的,一种分布式系统的应用层解决方案。可以让Client端和Server端进一步解耦。POST:创建资源GET:获取资源PUT:更新资源DELETE:删除资源幂等性(Id
2021-04-07 00:25:39
188
2
原创 算法-1-时间复杂度
一、算法时间复杂度(Time Complexity)1、概念时间频度:一个算法所花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数越多,它所花费的时间也就越多。一般情况下,算法中的基本操作语句的重复执行次数,是问题规模n的某个函数,用T(n)表示。若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n) / f(n) 的极限值为不等于零的常数,则称 f(n) 是 T(n) 的同数量级函数,记作 T(n) = O(f(n)) 。我们称 O(f(n)) 为算法的渐进时间复杂度,简称时间复
2021-04-05 19:26:33
1461
原创 数据结构-13-图
十三、图(Graph)1、概念二叉树最多有两个子节点,节点存在父子关系,当我们想表示更多的关联关系时,就需要使用图来表示。一个图由多个顶点(vertex)组成,每两个相连顶点间的通路被称之为边(edge)。从某个顶点到另外一个顶点所经过的所有顶点,被称之为路径。无向图:顶点和顶点间的连接没有方向。即A-B,也可以是B-A。A***B*** ** *C***D有向图:顶点和顶点间的连接有方向。即只能是A-B,不能是B-A。A-->B↓↘C-->D带权图(网):图
2021-04-05 19:23:36
129
原创 数据结构-12-多路查找树
十二、多路查找树0、二叉树存在的问题当树的结点很多时,就会占用很多内存,并且在创建二叉树时,需要多次进行I/O操作(从磁盘中获取数据),同时树的深度较大,会降低操作效率。1、多叉树(Multiway Tree)① 多叉树二叉树的每个节点都有数据项,且最多只有两个子节点。如果二叉树的每个节点可以存放更多的数据、指向更多的子节点,这就是多叉树。多叉树通过重新组织节点,可以减少树的深度,从而优化二叉树结构。② 2-3树2-3树是由二节点和三节点构成的树结构,它是B树的一种。二节点要么有两个子节点,
2021-04-05 19:21:37
105
原创 数据结构-11-平衡二叉树
十一、平衡二叉树(AVL Tree)1、概念先看一个问题,如果给二叉排序树添加节点时是顺序的,那么创建出来的二叉排序树可能是一个单向链表,一直左子树或一直右子树,这样就失去了二叉树的优势(父节点可以含有两个子节点),而且树的高度可能会很大,查询效率会大大降低。1 9 2 8 3 7 4 6 5 5为了避免这种现象,产生了平衡二叉树。又叫平衡二叉搜索树(Self-bal
2021-04-05 19:20:09
271
原创 数据结构-10-二叉排序树
十、二叉排序树(Binary Sort Tree)1、概念也称为二叉搜索树(Binary Search Tree),对于每个非叶子节点,其左子节点的值小于或等于当前节点的值,而右子节点的值大于或等于当前节点的值。2、方法添加节点判断是否存在根节点,不存在直接赋值为根节点。存在则继续判断节点值和根节点值的大小,如果小于则向左子树添加,如果大于等于则向右子树添加。添加到子树时,先判断子节点是否存在,如果不存在则 直接指定为子节点,否则就给以子节点为根节点的子树,添加节点。查找结点判断是否和
2021-04-05 19:18:35
127
原创 数据结构-9-哈夫曼树
九、哈夫曼树(Huffman Tree)1、概念二叉树有n个节点,每个节点都有一个权值,所有叶子节点的权值最小的二叉树,被称为哈夫曼树。若根节点的层数为1,则从根节点到第L层的节点的路径长度为L-1。节点的权值,即带权路径长度(WPL,Weighted Path Length),节点与节点间的路径上,存在某个权值,某个节点与根节点的路径的权值之和,即节点的权值。哈夫曼树中权值较大的节点,距离根节点较近(最优)。2、转换过程所有的元素值存放在叶子节点上。将给定元素序列,依次添加到集合当中。
2021-04-05 19:16:55
784
原创 数据结构-8-线索化二叉树
八、线索二叉树1、概念n个节点的二叉树中含有 n + 1 ==> 2n - (n - 1) 个空指针(没有指向任何节点,一般是叶子节点),将这些节点,在某种遍历次序下,与其前一个结点(前驱节点,一般是父节点)或后一个节点(后继节点,一般是父节点)连接,这种连接的指针被称之为线索。所以线索二叉树又分为:前序线索二叉树、中序线索二叉树和后序线索二叉树 1 2 34 5 64的左指针为空,右指针指向25的左指针指向2,右指针指向16的左指针指向1,右指针指向3 12
2021-04-05 19:15:42
109
原创 数据结构-7-顺序存储二叉树
七、顺序存储二叉树1、概念将二叉树的节点,按照树的深度,一层一层地顺序依次存储到数组当中,并与二叉树进行绑定。顺序存储二叉树,一般只考虑完全二叉树。元素n(下标)的左子节点为 n * 2 + 1元素n(下标)的右子节点为 n * 2 + 2元素n(下标)的父节点为 (n - 1) / 2[1, 2, 3, 4, 5, 6, 7] 1 2 34 5 6 72、示例class ArrayBinaryTree<T> { private final T[] a
2021-04-05 19:14:09
183
原创 数据结构-6-二叉树
六、二叉树(Binary Tree)1、概念先看数组结构:可以通过下标访问元素,速度快,对于有序数组,还可以使用二分查找法,提高查询效率。但是如果检索具体的元素或插入元素(按照一定顺序),则会整体移动数组,效率较低。再看链表结构:插入和删除元素效率较高。但是查找元素时,需要从头节点开始查找,效率较低。树结构:将数组结构和链表结构结合,能提高添加和查找元素的效率。 ⑴ -------------- 根节点 ⑵ ⑶ -------------- 父节点
2021-04-05 19:12:23
119
原创 软件测试
软件测试1、概念软件测试是对程序能够按照预期运营建立起的一种信息(Bill Hetzel,1973)。测试是为发现错误而执行程序的过程(Myers,1979)。使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异(ISO/IEC/IEEE电气电子工程师学会 29119)。2、遵循的原则测试显示缺陷的存在,但不能证明系统不存在缺陷穷尽测试是不可能的,应设定及时终止的条件测试应该尽早进行【详见:缺陷百分比】缺陷具备群集特性(某个模块质量
2021-04-05 19:06:48
229
原创 Bootstrap
1、概念Bootstrap是Twitter公司开发的,基于HTML、CSS和JavaScript的前端框架。它为实现Web应用程序的快速开发,提供了一套前端工具包。它可以很方便地实现响应式布局,以及移动设备优先的样式。2、特性响应式设计栅格布局完整的类库jQuery插件3、下载一共有三种:用于生产环境的 BootstrapBootstrap 源码Sass这里我们使用用于生产环境的 Bootstrap,点击下载Bootstrap压缩包需要注意的是,由于Bootstrap依赖
2021-01-25 04:00:26
287
原创 MyBatis Generator
Maven依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version></dependency><dependency> <groupId>org.mybatis.generator</
2021-01-14 19:27:30
97
原创 PageHelper
PageHelper1、概念MyBatis 分页插件 PageHelperMaven依赖<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version></dependency>2、简单示例① Maven坐标&
2021-01-14 19:24:50
143
原创 使用JDK的API,解析XML文件
使用JDK的API,解析XML文件package com.test;import org.w3c.dom.Document;import org.xml.sax.ErrorHandler;import org.xml.sax.InputSource;import org.xml.sax.SAXException;import org.xml.sax.SAXParseException;import javax.xml.parsers.DocumentBuilder;import java
2020-12-13 21:36:00
246
原创 XML约束
1、概念一个用来约束XML文档的书写规范的文件2、常用的约束XML DTDXML Schema3、DTD约束① 概念DTD(Document Type Definition),文档类型定义② 语法(1)元素定义使用 ELEMENT 来声明一个XML元素<!ELEMENT 父标签 (子标签 | 子标签 | 子标签)>用 | 分割表示子标签只能是其中一个<!ELEMENT 父标签 (子标签, 子标签, 子标签)>用 逗号 分割表示子标签的顺序必须和声明时
2020-12-13 21:24:55
220
1
jakarta-taglibs-standard-1.1.2
2017-03-03
elasticsearch-head-master
2017-12-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人