自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 Java十大算法之克鲁斯卡尔算法

应用场景:1.克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法,基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路,具体做法:首先构造一个只含有n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直到森林变成一棵树为止接下来用图解的方式进行一下分析:上面的连通网,不同的连通方式,权值总和...

2020-01-15 23:51:38 653

原创 Java十大算法之普里姆算法

场景:修路问题有胜利乡7个村庄(A,B,C,D,E,F,G),现在需要修路把7个村庄连通,各个村庄的距离用边线表示(权),比如A-B距离5公里,问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?先介绍一下最小生成树:最小生成树(Minimum Cost Spanning Tree),简称MST,给定一个带权的左向连接通图,如何选取一颗生成树,使树上所有边上权的总和为最小,这叫最...

2020-01-15 22:57:03 549

原创 Java十大算法之贪心算法

现有场景:假设存在下面需要付费的广播电台,以及广播台信号可以覆盖的地区,如何选择最少的广播台,让所有的地区都可以接受到信号1.贪心算法介绍贪心算法(贪婪算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优的选择,从而希望能够导致结果最好或者最优的算法,贪婪算法所得到的结果不一定是最优的结果(有时候是最优解),但是都是相对近似最优解的结果贪心算法最佳应用----集合覆盖对上面的...

2020-01-15 16:49:39 1507

原创 Java十大算法之KMP算法

场景:字符串匹配问题有一个字符串 a="abcdefg"和另一个字符串b=“bc”,现要判断a里面是否包含b,如果存在,返回第一次出现的位置,如果不存在,返回-1.传统解决方案:暴力匹配算法思路分析:(1)如果当前字符匹配成功,则i++,j++,继续匹配下一个字符(2)如果匹配失败,使i = i - (j - 1),j = 0,相当于每次匹配失败时,i回溯,j被置0代码实现packa...

2020-01-15 15:21:09 220

原创 Java十大算法之动态规划算法

动态算法的应用场景:1.动态规划算法介绍(1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分成小问题进行解决,从而一步步获取最优解的处理算法(2)动态规划算法与分治算法类似,其基本思想也是将待求问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解(3)与分治算法不同的是,适合于动态规划求解的问题,经分解得到子问题往往不是相互独立的(即...

2020-01-14 23:08:10 1415

原创 Java十大算法之分治算法

1.分治(Divide-and-Conquer)算法介绍分治算法是一种很重要的算法,字面上的解释是’分而治之’,就是把一个复杂的问题分解成两个或更多的相同或相似的问题,再把子问题分成更小的子问题…,直到最后子问题可以简单的直接求解,原问题的解即是子问题解的合并,这个技巧是很多高校算法的基础分治算法可以求解的一些经典问题:二分搜索,大整数乘法,棋盘覆盖,合并排序,快速排序,线性时间选择,最接近点...

2020-01-14 22:28:05 723

原创 Java十大算法之二分查找算法(非递归)

在前面的排序算法里面博主提到过二分查找算法,是使用递归的方式,下面博主分享一下二分查找算法的非递归方式1.二分查找算法介绍二分查找法只适用于从有序的数列中进行查找(比如数字,字母),将数列排序后再进行查找,二分查找法的运行时间为对数时间O(log2n),即查找到需要的目标位置最多只需要log2n步,假设从[0,99]的队列(100个数,即n=100)中寻找目标数30,则需要查找步数为log2 ...

2020-01-14 21:49:59 147

原创 数据结构之图及两种遍历(深度优先和广度优先)

为什么要有图?前面我们学到了线性表和树,线性表局限于一个直接前驱和一个直接后继的关系,树也只能有一个直接前驱也就是父节点,当我们需要表示多对多的关系时,这里就用到了图1.图的基本介绍图是一种数据结构,其中节点可以具有零个或多个相邻元素,两个节点之间的连接称为边,结点也可以称为顶点,如图:2.图的常用概念(1)顶点(vertex)(2)边(edge)(3)路径:比如从D->C的...

2020-01-14 21:24:31 1391

原创 多叉树/多路树(2-3树,2-3-4树,B树,B+树,B*树)

虽然二叉树操作效率比较高,但是也存在问题,请看下面这颗二叉树二叉树需要加载到内存中,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多,就会有如下问题;(1)在构建二叉树时,需要多次进行I/O操作(海量数据存在数据库或者文件中),节点海量,构建二叉树时,速度有影响(2)节点海量,也会造成二叉树的高度很大,会降低操作速度1.多叉树(1)在二叉树中,每个节点有数据项,最多有两个子节...

2020-01-14 14:24:47 354

原创 数据结构之平衡二叉树(AVL树,左旋转,右旋转,双向旋转)

引入:看一下案例(说明二叉排序树可能存在的问题)数列{1,2,3,4,5,6},二叉排序树(BST)的形式为平衡二叉树基本介绍(1)平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree),又被称为AVL树,可以保证查询效率比较高.(2)具有以下特点...

2020-01-13 22:20:18 1390

原创 数据结构之二叉排序树

1.二叉排序树介绍二叉排序树(Binary Sort Tree),对于二叉排序树的任何一个非叶子结点,要求左子结点的值对比当前节点的值小,右子节点的值比当前节点的值大特别说明:如果有相同的值,可以将该节点放在左子节点或者右子节点二叉排序树的创建和遍历package com.self.dataStructure.binarySortTree;public class binarySor...

2020-01-13 17:37:53 230

原创 算法之赫夫曼编码(压缩文件解压文件)

1.赫夫曼编码基本介绍(1)赫夫曼编码(Humffman Coding)是一种编码方式,属于一种程序算法,是赫夫曼树在电讯通信中的经典应用之一,广泛的用于数据文件压缩,其压缩率通常在20%~90%之间,赫夫曼编码是可变字长编码(VLC)的一种,Huffman于1952年提出一种编码方法,称为最佳编码.传统编码:(1)定长编码(2)变长编码赫夫曼编码原理剖析(1)传输的字符串(2...

2020-01-13 16:44:01 390

原创 数据结构之赫夫曼树

1.赫夫曼树基本介绍(1)给定n个权值作为n个叶子结点,构造一颗二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(HuffmanTree)(2)赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近概念介绍(1)路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或者孙子结点之间的通路,称为路径,若规定根节点的层数为1,则从根节点到第L层的路径...

2020-01-13 10:25:04 233

原创 堆排序(二叉树的实际应用)

1.堆排序的基本介绍(1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度为O(nlogn),它也是不稳定排序(2)堆具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意:没有要求结点的左孩子的值和右孩子的值的大小关系(3)每个结点的值都小于或者等于左右孩子结点的值,称为小顶堆大顶堆举例说明:小顶堆举...

2020-01-12 23:50:42 440

原创 数据结构之线索化二叉树

问题分析:将数列{1,3,6,8,10,14}构建成一颗二叉树当我们对上面的二叉树进行中序遍历时,数列为{8,3,10,1,6,14},但是6,8,10,14这几个节点的左右指针,并没有完全利用上,如果我们希望充分利用各个节点的左右指针,让各个节点可以指向自己的前后节点,怎么办? (线索化二叉树)线索化二叉树的基本介绍(1)n个结点的二叉树链表中含有n+1 [公式2n-(n-1)=n...

2020-01-12 22:30:52 195

原创 数据结构之顺序存储二叉树

1.顺序储存二叉树的概念从数据储存来看,数组储存方式和树的储存方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看一下示意图顺序储存二叉树的特点(1)顺序储存二叉树通常只考虑完全二叉树(2)第n个元素的左子节点为2n+1(3)第n个元素的右子节点为2n+2(4)第n个元素的父节点为(n-1)/2其中:n表示二叉树中的第几个元素(按0开始编号),如上图所示现需求:pac...

2020-01-12 19:23:12 824

原创 数据结构之二叉树

1.为什么需要树这种数据结构(1)数组储存方式分析:优点:通过下标的方式访问元素,速度快,对于有序数组,还可以使用二分查找来提高检索速度缺点:如果要检索某个具体值或者插入值,会整体移动,效率低(2)链表存储方式分析优点:在一定程度上对数组储存方式有优化,如插入一个数值节点,只需要将插入节点,链接到链表中即可,删除效率也很好缺点:在进行检索时,效率任然较低.(3)树储存方式分析能提高...

2020-01-12 12:02:21 128

原创 数据结构之哈希表

1.哈希表的基本介绍哈希表(Hash table)也叫做散列表,是根据关键码值(key value)而直接进行访问的数据结构,也就是说,它通过把关键码映射到表中的一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表哈希表实战题录入员工的信息,当输入员工的id时,查找出该员工要求:不要使用数据库,越快越好使用哈希表实现图分析代码实现:packag...

2020-01-11 23:23:59 236

原创 flink最佳实战

最佳实践此页面包含Flink程序员有关如何解决常见问题的最佳实践的集合。解析命令行参数并在Flink应用程序中传递它们将您的配置值放入 ParameterTool在Flink程序中使用参数命名大型TupleX类型使用Logback代替Log4j在IDE中/从Java应用程序中运行Flink时使用Logback在群集上运行Flink时使用Logback解析命令行参数...

2020-01-10 11:15:35 629

原创 Flink报错akka.pattern.AskTimeoutException: Ask timed out on......

报错日志:org.apache.flink.client.program.ProgramInvocationException: Could not retrieve the execution result. (JobID: 26d1ff5f9e4a48ae6e067e207dfbaf67)…Caused by: org.apache.flink.runtime.client.JobSub...

2020-01-09 14:31:24 4477

原创 flink的checkpoint设置和largeState

Overview为了使Flink应用程序能够大规模可靠地运行,必须满足两个条件:​ 应用程序需要能够可靠地接受检查点​ 故障后,资源必须足够赶上输入数据流第一部分讨论了如何获得性能良好的检查点。 最后一部分介绍了有关计划使用多少资源的一些最佳做法。1 监视状态和检查点监视检查点行为的最简单方法是通过用户界面的检查点部分。检查点监视的文档显示了如何访问可用的检查点指标。扩大检查点时特别...

2020-01-08 17:50:59 1071

原创 flink生产环境参数配置

1.flink生产环境目前的配置jobmanager.rpc.addressdqapp121076io.tmp.dirs/data12/tmpweb.tmpdir/data12/tmpfs.hdfs.hadoopconf/etc/hadoop/confweb.upload.dir/data12/tmp/uploadjobmanager.heap...

2020-01-07 22:07:48 8591 1

原创 四大查找算法

1 顺序(线性)查找就是用枚举的思想,把所有的数据拿出来逐一对比,找到即返回public static int sqeSearch(int[] array ,int value){ for (int i = 0; i < array.length; i++) { if(array[i] == value){ retu...

2020-01-06 21:51:50 317

原创 七大排序算法

1 冒泡排序冒泡的排序(Bubble Sorting)的基本思想是:通过对排序序列从前向后,依次比较相邻元素的值,若发现逆序则交换.因为在排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行交换,就说明序列有序,因此在排序过程中设置一个标识flag判断元素是否进行过交换,从而减少不必要的比较(优化的过程)下面举例,手动描述一下排序的过程冒泡排序规则总结:1)一共进行数组大小...

2020-01-06 20:16:22 119

原创 排序算法和时间复杂度空间复杂度

1 排序算法排序是将一组数据,依指定的顺序进行排列的过程排序分类: 1)内部排序:指将需要处理的所有数据都加载到内部储存器中进行排序 2)外部排序:数据量过大,无法全部加载到内存中,需要借助外部储存进行排序.2 算法时间复杂度度量一个程序(算法)执行时间的两种方法1)时候统计法:这种方法可行,但是存在两个问题,一是要想对设计的算法运行性能进行测评,需要实际运行该程序,二是所得时间...

2020-01-05 20:24:53 303

原创 递归之八皇后问题(回溯算法)

八皇后问算法思路分析1)第一个皇后先放第一行第一列2)第二个皇后放在第二行第一列,然后判断是否OK,如果不OK,继续放在第二列,第三列,依次把所有列都放完,找到一个合适的3)继续第三个皇后后,还是第一列,第二列…直到第8个皇后也能放在一个不冲突的位置,算是找到了一个正确解.4)当得到一个正确解时,在栈退回到上一个栈时,就会开始回溯,即将第一个皇后,放在第一列的所有正确解上,全部得到.5...

2020-01-05 18:26:13 301

原创 迷宫回溯问题分析

1 问题引入按照上面的地图,我们用二维数组模拟地图,因为红色的地方表示围墙,所以在二维数组里,我们用1表示围墙. int[][] map = new int[8][7]; //上下全部为1 for (int i = 0; i < 7 ; i++) { map[0][i] = 1; map[7][i] = 1...

2020-01-05 16:01:34 174

原创 递归应用场景和调用机制

1 递归的概念简单的说,递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得更简洁。递归的调用机制:1)当程序执行到一个方法时,就会开辟一个独立的空间(栈)2)每个空间的数据(局部变量),是独立的.public static void main(String[] args) { recursion(4); }...

2020-01-05 15:09:54 150

原创 数据结构之栈(前、中、后缀表达式)

1 栈的介绍1)栈的英文是stack2)栈是一个先进后出的有序列表3)栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,允许插入和删除的一段,为变化的一段,称为栈顶(top),另一端为固定的一端,称为栈底(bottom)2 栈的应用场景1)子程序的调用:在跳往子程序前,会先将下一指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中.2)处...

2020-01-02 22:44:42 1162

原创 数据结构之单向环形链表(约瑟夫问题)

关于单向环形链表的实际应用,先看一下下面这道题接下来,我们先简单分析一下单向环形链表的demo构建一个单向环形链表的思路1)先创建第一个节点,让first指向该节点,并形成环.2)后面当我们没创建一个节点,就把该节点,加入到已有的环形链表即可.遍历环形链表1)先让一个辅助指针(变量)curBoy,指向first节点2)然后通过一个while循环遍历该环形链表即可.package ...

2020-01-02 22:00:06 187

原创 数据结构之双向链表

单向链表的缺点分析:1)单向链表,查找的方向只能是一个方向,而双向链表可以向前或者向后查找.2)单向链表不能自我删除,需要靠辅助节点,而双向链表,则可以自我删除,所以前面我们单链表删除节点,总是找到temp,remp是待删除节点的前一个节点.双向链表分析(1)遍历:遍历和单链表一样,只是可以向前,也可以向后.(2)添加(添加到双向链表的最后):1):先找到双向链表的最后一个节点.2...

2020-01-01 23:04:25 113

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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