- 博客(19)
- 收藏
- 关注
原创 Floyd(弗洛伊德)算法
一.简介弗洛伊德算法寻找多源点之间最短路径的算法,即所有节点之间最短路径。二.实现package com.vincent;import java.util.*;public class Main { public static void main(String[] args) throws Exception { char[] datas = {'a','b','c','d','e','f'}; int[][] graph = new int[dat
2020-06-24 22:51:22 404
原创 Dijkstra(迪杰斯特拉)算法
一.简介迪克斯特拉算法又名Dijkstra算法(属于贪心算法)。Dijkstra算法是从一节点到其余各节点最短路径计算方法。迪杰斯特拉算法以起始点为中心向外层层扩展,直到扩展到终点为止。二.实现package com.vincent;import java.util.*;public class Main { public static void main(String[] args) throws Exception { char[] datas = {'a',
2020-06-23 22:30:57 2280
原创 普里姆 & 克鲁斯卡尔算法
一.简介连通图:任意2节点之间都有路径相通最小生成树:一个 n 结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边(n-1)。 最小生成树可以用prim(普里姆)算法或kruskal(克鲁斯卡尔)算法求出。二.实现package com.vincent;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class Main
2020-06-21 22:48:51 1107
原创 贪心算法
一.简介贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解。贪心算法适用前提是局部最优解会导致全局最优解(局部最优解不一定是全局最佳解)二.实现1.期望商品找零纸币数最少:package com.vincent;import java.util.ArrayList;import java.util.List;public class Main { public static voi
2020-06-21 18:24:00 482
原创 KMP算法
一.简介KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败字符前面已匹配字符计算跳转表,子串从跳转表获取下一次比较索引。定义问题:主串:s = S[0,1,2,…,n-1] 字符串长度为n子串:p = P[0,1,…,m-1], 字符串长度为m且m<=n暴力匹配1.从主串的首字符开始,与模式串逐一进行匹配2.匹配失败时主串回溯到开始匹配
2020-06-19 19:49:21 447
原创 动态规划 & 枚举算法
一.简介二.实现package com.vincent;import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) throws Exception { int[][] data = {{1,1500},{4,3000},{3,2000}}; List<Integer> rst =
2020-06-16 08:27:34 1112
原创 DFS & BFS
一.简介二.实现package com.vincent;public class Main { public static void main(String[] args) throws Exception { int[][] data = new int[5][5]; data[0][1] = 1; data[0][2] = 1; data[0][3] = 1; data[1][0] = 1;
2020-06-15 19:22:26 322
原创 B+tree
一.简介二.实现package com.vincent;import java.util.*;public class Main { public static void main(String[] args) throws Exception { BPlusTree<Integer> tree = new BPlusTree<>(5); for(Integer data : Arrays.asList(4,3,6,5,7,8,9
2020-06-14 21:17:54 354
原创 B-tree
一.简介B树是平衡的多叉树,B是balance的首字母,表示平衡2-3树是阶为3的B树,相对2叉排序树、AVL树、红黑树,每个节点可以多存储一个数据,对于存储于磁盘的大数据量还是需要非常频繁的IO操作,在2-3树基础上可以扩展出节点度更高的任意平衡树。二.实现package com.vincent;import java.util.*;public class Main { public static void main(String[] args) throws Exceptio
2020-06-11 17:37:30 454
原创 2-3树
一.简介大量数据会造成二叉排序树的深度特别大,尤其是数据存储在硬盘上时,大量的数据将导致过多的IO,严重影响程序效率。多路查找树的每个节点处可以存储多个元素,且每一个节点的孩子可以多于两个。二.实现三.总结...
2020-06-08 23:06:42 361
原创 红黑树
1.简介红黑树作为一种二叉搜索树的一种实现,红黑树的左右子树高度差可能大于 1。所以红黑树不是严格意义上的平衡二叉树(AVL),但 对之进行平衡的代价较低, 其平均统计性能要强于 AVL 。红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。1.节点是红色或黑色。2.根节点是黑色。3.每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)4.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。故红黑树是黑色平衡的树如果插入节点是黑色则所在路径
2020-06-07 23:08:56 2389
原创 平衡二叉树(AVL)
一.简介AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。1.本身首先是一棵二叉搜索树。2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。二.实现三.总结...
2020-06-04 22:55:33 727
原创 排序二叉树(BST)
一.简介二.实现package com.vincent;import java.util.*;public class Main { public static void main(String[] args) throws Exception { BinSortTree<Integer> tree = new BinSortTree<>(); for(int i=0;i<32;i++){ tree.
2020-06-04 08:26:00 509
原创 霍夫曼编码/解码
一.简介把信息转换成计算机能够识别的二进制形式,被称为编码。按编码位数长度是否固定分为:定长编码、变长编码。定长编码容易设计,运行效率高。如果要对数据信息压缩就需要采用变长编码,把出现频率高的用位数少的编码,出现频率低的用更多位编码便可以实现数据压缩。霍夫曼树是一种WPL(树的带权路径) 最小的二叉树,二叉树刚好有左/右节点,可以方便映射为2进制(如左节点方向表示0,右节点方向表示1)。霍夫曼编码是一种可变长编码方式,依据字符出现频率作为霍夫曼树节点的权重构建霍夫曼树。二.实现三.总结1.霍夫
2020-06-02 23:28:15 1438 1
原创 霍夫曼树
一.简介二.实现package com.vincent.main;import java.util.*;public class Main { public static void main(String[] args) { int[] arr = new int[]{}; System.out.println(Arrays.toString(arr)); HuffmanTree tree = new HuffmanTree()
2020-06-02 17:30:27 311
原创 堆排序
一.简介堆排序(英语:Heapsort)是利用堆这种数据结构所设计的一种排序算法。堆是一个完全二叉树的结构,并满足堆积的性质:子结点的值总是小于(或者大于)它的父节点。大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]二.实现package com.vincent.main;import java.uti
2020-06-02 13:56:50 272
原创 二叉树顺序存储与线索二叉树
一.顺序存储二叉树将二叉树存储在一个数组中,通过存储元素的下标反映元素之间的父子关系。按照二叉树结点自上向下、自左向右的顺序存储。使用此存储方式,结点的前驱和后继不一定是它们在逻辑上的邻接关系,非常适用于满二又树和完全二又树。顺序存储到数组中父节点与左右节点索引关系:二.线索化二叉树对于二叉链表,不管二叉树的形态如何,n个结点的二叉链表共有2n个链域,非空链域为n-1个(从根节点开始一个指针链接一个节点),故其中的空链域有n+1个。为提高空指针利用率提出了一种方法,利用原来的空链域存放指针,
2020-06-01 22:44:48 1023
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人