- 博客(46)
- 收藏
- 关注
原创 Java8新特性
Lambda 表达式:在java8语言引入的一种心得语法元素和操作符,这个操作符为 “->” ,该操作符被统称为Lambda操作符或者箭头操作符。* -> :lambda操作符,也称箭头操作符* -> 左边是 lambda形参列表 (接口中抽象方法的形参列表)* -> 右边是 lambda体 (重写的抽象方法的方法体)如果一个接口中,只声明一个抽象方法,则此接口就称为函数式接口。
2022-09-18 00:07:37
779
原创 骑士周游算法(Java)
1)马踏棋盘(骑士周游问题)实际上是图的深度优先搜索(DFS)的应用2)如果使用回溯(深度优先搜索)来解决,假如马走了53个点,如图:坐标(1,0)发现已经走到尽头,没有办法继续回退,查看其他路径,就在棋盘上不停的回溯,3)分析第一种方式的问题,使用贪心算法(greedyAlgorithm)进行优化,解决马踏棋盘问题后续会用贪心算法优化。
2022-09-16 00:12:04
1166
原创 弗洛伊德算法(Java)
弗洛伊德(Floyd)算法1)和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法,该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特-弗洛伊德命名2)弗洛伊德(Floyd)算法计算图中各顶点之间的最短路径3)迪杰斯特拉算法用于计算图中某一顶点到其他顶点的最短路径4)弗洛伊德算法与迪杰斯特拉算法的区别。
2022-09-15 16:28:27
2168
原创 迪杰斯特拉算法(Java)
迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个顶点到其他顶点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。算法过程设置出发顶点为v,顶点集合V{ v1, v2,vi …} ,v到V中各顶点的距离构成距离集合Dis,Dis{ d1,d2,di…},Dis集合记录着b到图中各顶点的距离(到自身距离为0,v 到vi距离对应为di)1)从Dis中选择值最小的di移出Dis集合,同时移出V集合中对应的顶点vi,此时的v到vi即是最短路径。
2022-09-15 00:46:30
4811
原创 克鲁斯卡尔kruskal算法(Java)
1)克鲁斯卡尔(kruskal)算法,是用来求加权连通图的最小生成树的算法2)基本思想:按照权值从小到大的顺序选择n-1条边(假设最小生成树有n个顶点,则有n-1条边),并保证这n-1条边不构成回路3)具体做法:首先构造一个只含n个顶点的森林,然后依照权值从小到大从连通网中选取边加入到森林中,使得森林中不产生回路,直到森林变成一颗树为止(最小生成树)
2022-09-14 11:09:23
1454
2
原创 普利姆算法(Java)
1)普利姆(Prim)算法求最小生成树,也就是在包含n个顶点的连通图中,找出只有(n - 1 )条边包含所有n个顶点的连通子图,也就是所谓的极小连通子图2)普利姆算法如下①设G = (V,E) 是连通图,T = (U,D) 是最小生成树, V、U是顶点集合,E,D是边的集合②若从顶点u开始构成最小生成树,则从集合V中取出顶点u放入集合U中,标记顶点v 的visited[u] = 1。
2022-09-13 23:09:34
605
1
原创 贪心算法(Java)
1)贪心算法:是指在对问题进行求解时,在每一步选择中都采取最好或者最优的选择,从而希望能够导致结果是最好或者最优的算法2)贪心算法所得的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果。
2022-09-13 14:46:14
681
原创 KMP算法(java)
1)KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现大的位置的经典算法2)Knuth-Morris_Pratt字符串查找算法,简称:KMP算法,常用于在一个文本串内查找一个模式串P的出现位置,这个算法是由DonaldKnuth、vaughanPratt、JamesH.Morris三人于1977年联合发表,故取这三人的姓氏命名此算法。
2022-09-13 00:03:51
430
原创 0-1背包java(动态规划)
1)动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法2)动态规划算法与分治算法类似,其基本思想也还是将待求解问题分解成若干个小问题,先求解子问题,然后从这些子问题的解得到原问题的解3)与分治算法不同的是:以用于用动态规划求解的问题,经分解得到子问题往往不是相互独立的(即:下一个子阶段的求解是建立在上一个子阶段的基础上。进行进一步的求解)4)动态规划是可以通过填表的方式逐步推导,得到最优解。
2022-09-12 14:58:22
1259
原创 汉诺塔(Java)
分治算法的基本介绍1)分治法是一种很重要的算法,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多相同或相似的子问题。。。
2022-09-11 15:37:10
395
原创 图的遍历(Java)
本篇文章主要是:简单的介绍了图相关的知识,并用java实现图的深度优先遍历和图的广度优先遍历。编译器使用的是IDEA。文中有详细教程地址。
2022-09-10 22:55:49
1616
1
原创 平衡二叉树(Java)
1)平衡二叉树也叫平衡二叉搜索树(Self-balancingBinarySearchTree)又被称为AVL树,可以保证查询效率较高2)具有以下特点:它是一颗空树或它的左右两个子树的高度差绝对值不超过1,并且左右两颗子树都是一颗平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树。
2022-09-07 14:15:11
671
原创 二叉搜索树(Java)
二叉排序树:BST:(BinarySort(Search)Tree),对于二叉排序树的任何一个非叶子节点,要求左子节点比当前节点的值小,右子节点的值比当前的节点的值大。**特别说明:**如果有相同的值,可以将该节点放在左子节点或者右子节点。
2022-09-06 21:20:23
343
原创 哈夫曼树(Java)
1)给定n个权值作为n个叶子节点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树称为最优二叉树,也称为哈夫曼树(Huffmantree)2)哈夫曼树是带权路径长度最短的树,权值较大的节点离根节点较近。
2022-09-03 21:15:30
660
原创 堆排序(Java)
1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是一种不稳定的排序。
2022-09-03 14:30:35
301
1
原创 顺序存储二叉树(Java)
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。最后,认识一下,我是小白。努力成为一名合格的程序员。期待与你的下次相遇。5)n:表示二叉树中的第几个元素(按0开始编号)4)第n个元素的父节点为(n - 1) / 2。在 100-101p. 20分钟即可看完。2)第n个元素的左子节点为2*n + 1。3)第n个元素的右子节点为2*n + 2。1)顺序二叉树通常只考虑完全二叉树。
2022-09-02 19:05:06
422
原创 线索化二叉树(Java)
韩顺平 数据结构 YYDS!!!!这是我的学习笔记,希望大家去看韩老师的教程再来提取我的笔记,(文章里面有学习的地址)对你深入学习有很好的帮助!!!
2022-09-02 19:00:52
423
原创 哈希表(Java)
散列表(Hash table)也叫哈希表,根据关键码值(key -value)而直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找速度,这个映射函数就叫做散列函数,存放记录的数组就叫散列表。...
2022-08-31 17:54:20
350
原创 基数排序(Java)
1)基数排序(radix sort)属于“分配式排序” (distribution sort),又称“桶子法”(bucket sort)或bin sort 顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用2)基数排序式属于稳定性的排序,基数排序法的是效率高的稳定性排序法3)基数排序是桶排序的扩展4)基数排序 是1887年赫尔曼—赫勒里发明的,它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。......
2022-08-29 19:21:47
441
原创 归并排序(Java)
归并排序(MERGE—SORT) 是利用归并的思想实现的排序方式,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则是将分的阶段得到的各答案“修补”在一起,即分而治之。代码实现。...
2022-08-29 16:31:11
172
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人