自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 分治算法

一.简介分治算法的思想是将一个规模为n的问题分解为k个规模较小的子问题,解决小规模的方法与解决大规模的方法一样。二.实现三.总结

2020-06-15 20:19:22 264

原创 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

原创 Graph(图)

一.简介图是一种多对多的非线性结构,每个节点有0到多个相邻节点,节点之间的连接成为边。二.实现三.总结

2020-06-15 09:29:56 390

原创 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关注的人

提示
确定要删除当前文章?
取消 删除