自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 马踏棋盘算法(骑士周游问题)——贪心算法优化

骑士周游问题在8x8的国际棋盘上,按照马走日的规则,验证是否能够走遍棋盘。解题思路创建棋盘 chessBoard,是一个二维数组。将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(ArrayList),最多有8个位置,每走一步,就使用step+1。遍历ArrayList中存放的所有位置,看看哪个可以走通,如果走通,就继续,走不通,就回溯。判...

2020-02-12 15:24:08 1343

原创 弗洛伊德算法——最短路径算法

弗洛伊德(Floyd)算法介绍和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径 。迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法VS迪杰斯特拉算法:迪杰斯特...

2020-02-11 22:07:59 2239

原创 迪杰斯特拉算法——最短路径算法

基本介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。基本思想集合S表示最短距离已经确定的顶点集。其余的顶点放在另一个集合V-S中。数组D来记录当前所找到的从源点s到每个顶点的最短特殊路径长度。从尚未确定最短路径长度的集合V-S中取出一个最短特殊路径长度最小...

2020-02-11 16:06:40 3826

原创 常用算法——动态规划算法

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

2020-01-31 15:30:45 802

原创 常见算法——分治算法

常见算法——分治算法基本介绍分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。基本思想当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解...

2020-01-30 12:58:26 292

原创 常用算法——二分查找(非递归)

二分查找(非递归)基本介绍二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则...

2020-01-29 16:07:37 328

原创 图的创建和代码实现

要求:代码实现如下图结构思路分析存储顶点String 使用ArrayList保存矩阵int[ ] [ ]edges代码实现package com.atguigu.graph;import java.util.ArrayList;import java.util.Arrays;public class Graph { private ArrayList<String...

2020-01-26 13:59:36 1497 1

原创 平衡二叉树思路分析及代码实现

基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary searchtree)又被称为AVL树,可以保证查询效率较高。具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二又树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等。举例说明:应用案例(一)——单旋转(左旋转)以数列{4,3...

2020-01-25 18:27:17 533

原创 测试题

测试题逆序打印单链表解题思路:方法1:先将单链表进行反转操作,然后再遍历即可,这样的做的问题是会破坏原来的单链表的结构,不建议。方式2:可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,就实现了逆序打印的效果。// 方式2: // 可以利用栈这个数据结构,将各个节点压入到栈中,然后利用栈的先进后出的特点,就实现了逆序打印的效果 public static ...

2020-01-24 15:19:00 85

原创 二叉排序树

二叉排序树需求给你一个数列(7,3,10,12,5,1,9),要求能够高效的完成对数据的查询和添加解决方案分析使用数组数组未排序,优点:直接在数组尾添加,速度快。缺点:查找速度慢。数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数...

2020-01-23 13:14:49 324

原创 哈夫曼树

哈夫曼树基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二又树为最优二又树,也称为哈夫曼树(Huffman Tree),还有的书翻译为赫夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。哈夫曼树的重要概念路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长...

2020-01-07 13:49:24 201

原创 堆排序

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

2020-01-05 10:48:14 230

原创 线索化二叉树

基本概念n个结点的二叉链表中含有n+1【公式2n-(n-1)=n+1】个空指针域。利用二又链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为“线索")这种加上了线索的二又链表称为线索链表,相应的二又树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二又树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种一个结点...

2020-01-04 15:31:48 213

原创 顺序存储二叉树

基本说明从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,如图。顺序存储二叉树的特点:顺序二又树通常只考虑完全二叉树第n个元素的左子节点为2*n+1第n个元素的右子节点为2*n+2第n个元素的父节点为(n-1)/2n:表示二叉树中的第几个元素(按0开始编号如图所示)代码实现package com.tree;public c...

2020-01-03 11:38:15 318

原创 二叉树删除结点思路分析及代码实现

二叉树删除结点思路分析完成删除的操作规定:如果删除的结点是叶子节点,则删除该节点如果删除的结点是非叶子节点,则删除该子树思路:因为我们的二叉树是单向的,所以我们是判断当前结点的子结点是否需要删除结点,而不能去判断当前这个结点是不是需要删除结点如果当前结点的左子结点不为空,并且左子结点就是要删除结点,就将this.left=null;并且就返回(结束递归删除)如果当前结点的右...

2019-12-30 21:19:31 784 1

原创 哈希表思路分析及代码实现

哈希表哈希表(散列)-Google上机题看一个实际需求,google公司的一个上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址.),当输入该员工的id时,要求查找到该员工的所有信息。要求:不使用数据库,尽量节省内存,速度越快越好=>哈希表(散列)哈希表的基本介绍散列表(Hashtable,也叫哈希表),是根据关键码值(Key value...

2019-12-12 10:37:43 193

原创 斐波那契查找(黄金分割法查找)思路分析及代码实现

斐波那契(黄金分割法)原理斐波那契查找原理与前两种相似,仅仅改变了中间结点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近,即mid=low+F(k-1)-1(F代表斐波那契数列),如下图所示对F(k-1)-1的理解:由斐波那契数列F[k]=F[k-1]+F[k-2]的性质,可以得到**(F[k]-1)=(F[k-1]-1)+(F[k-2]-1)+1**。该式说明...

2019-12-03 10:47:16 629

原创 插入查找思路分析及代码实现

插入查找的原理插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。将折半查找中的求mid索引的公式,low表示左边索引left,high表示右边索引right. key 就是前面我们讲的 findVal(二分查找)。3. int mid=low+(high-low)* (key-arr[low])/(arr[high]-arr[low]);/* 插值索引* /对...

2019-12-03 09:40:27 229

原创 查找算法之二分查找思路分析及代码实现

查找算法介绍在java中,我们常用的查找有四种:顺序(线性)查找二分查找/折半查找插值查找斐波那契查找线性查找算法有一个数列:{1,8,10,89,1000,1234},判断数列中是否包含此名称【顺序查找】要求:如果找到了,就提示找到,并给出下标值。二分查找算法请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并且求出下...

2019-12-01 20:56:27 369

原创 基数排序(桶排序)思路分析及代码实现

基数排序(桶排序)介绍:基数排序(RadixSort)属于“分配式排序”(DistributionSort),又称“桶子法”(Bucket Sort)顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序基数排序(RadixSort)是桶排序的扩展基数排序是1887年赫尔曼·何乐礼发明的。它是这样...

2019-12-01 15:42:52 360

原创 归并排序思路分析及代码实现

归并排序思路分析及代码实现归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。思路分析归并排序比较占用内存,但却是一种效率...

2019-12-01 13:48:44 399

原创 快速排序的思路分析及代码实现

快速排序的思路分析及代码实现快排介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列思路分析它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都...

2019-11-30 11:23:07 296

原创 希尔排序思路分析及代码实现

希尔排序思路分析及代码实现思路分析希尔排序(Shell Sort)又叫做缩小增量排序(diminishing increment sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序时,对有...

2019-11-26 10:29:11 261

原创 插入排序思路分析及代码实现

插入排序思路分析及代码实现思路分析插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。算法分析1,当初始序列为正序时,只需要外循环n-1次,每...

2019-11-25 22:45:05 315

原创 选择排序思路分析及代码实现

选择排序思路分析及代码实现一、思路分析n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:①初始状态:无序区为R[1…n],有序区为空。②第1趟排序在无序区R[1…n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1…1]和R[2…n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。……③第i趟排序第i趟排序开始时,当前...

2019-11-24 12:16:39 337

原创 冒泡排序的思路分析及代码实现

冒泡排序的思路分析及代码实现基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置, 如果一趟比较下来没有进行过交换,就说明序列有序, 因此要在排序过程中设置一个标志flag判断元素是否进行...

2019-11-24 10:26:24 1004

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

八皇后问题(回溯算法)问题描述八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。计算机发明后...

2019-11-17 17:32:21 750

原创 迷宫回溯问题分析及实现

迷宫回溯问题分析先创建二维数组map[ ][ ],模拟迷宫。约定:使用“0”表示没有走过,“1”表示墙,“2”表示通路可以走,“3”表示已经走过但是走不通。i,j表示从哪个位置开始出发(1,1)制定行走的策略,先走 下->右->上->左,如果走不通再回溯代码实现package com.recursion;public class MiGong { publi...

2019-11-17 16:25:19 424

原创 中缀表达式转后缀表达式思路分析及代码实现

中缀表达式转后缀表达式思路步骤分析初始化两个栈:运算符栈s1和储存中间结果的栈s2;从左至右扫描中缀表达式;遇到操作数时,将其压52;遇到运算符时,比较其与s1栈顶运算符的优先级:(1)如果s1为空,或栈顶运算符为左括号“(",则直接将此运算符入栈;(2)否则,若优先级比栈顶运算符的高,也将运算符压入s1;(3)否则,将s1栈顶的运算符弹出并压入到s2中,再次转到(4.1)与...

2019-11-16 13:01:17 1093

原创 栈实现计算器—思路分析及代码实现

栈实现计算器思路分析创建两个栈,一个存放数一个存放运算符。通过一个index值(索引),来遍历我们的表达式如果发现是一个数字,就直接入数栈如果发现扫描到是一个符号,就分如下情况:(1)如果发现当前的符号栈为空,就直接入栈.(2)如果符号栈有操作符,就进行比较,如果当前的操作符的优先级小于或者等于栈中的操作符,就需要从数栈中pop出两个数,在从符号栈中pop出一个符号,进行运算,将得...

2019-11-12 22:05:41 557 2

原创 数组模拟栈思路分析及代码实现

思路分析使用数组来模拟栈定义一个top来表示栈顶,初始化为-1入栈的操作,当有数据焦炉到栈时,top++;stack[top]=data;出栈的操作,int value=stack[top];top–,return value代码实现package com.stack;import java.util.Scanner;import javax.management.Run...

2019-11-05 15:32:18 146

原创 单链表的增删改查

添加单链表的添加分为两种:无序的添加,直接在链表末端加入新的节点元素有序添加,根据序号添加到对应的节点位置效果图如下话不多说,代码实现一波。代码的备注写的很清楚,不懂的地方可以看备注代码实现无序添加,直接在链表末端加入新的节点元素// 添加节点到单链表 // 不考虑编号的顺序时,找到当前链表的最后节点;将最后这个节点的next指向新的节点 public void ad...

2019-11-02 10:05:38 258

原创 最短路径

最短路径单源最短路径(Dijstra算法)任意点对之间的最短路径(Floyd算法)路径上的第一个顶点为源点(Sourse),最后一个顶点为终点(Destination)Dijstra算法给定一个带权图G=<V,E>,其中每条边(vi,vj)上的全W[vi,vj]是一个非负实数。另外,给定V中的一个顶点s充当源点。现在要计算从源点s到所有其他各项顶点的最短路径,这个问题...

2019-10-27 14:46:40 150

原创 最小生成树

构造成连通网的最小代价生成树(MinimumCostSpanningTree)称为最小生成树(简称MST)。最小化生成树的构造方法普利姆(Prim)算法克鲁斯卡尔(Kruskal)算法Prim算法思想G=(V,E)是具有n个顶点的连通图,设U是最小生成树中顶点的集合,TE是最小生成树中边的集合;初始,U={u1},TE={ }重复执行:在所有u∈U,v∈V-U的边(u,v)...

2019-10-26 15:31:42 2385

原创 图的遍历

给出一个图G和其中任意一个顶点V0,从V0出发系统的访问G中所有的顶点,每个顶点访问一次,这叫图的遍历。深度优先搜索(depth-first search)简称DFS基本思想访问一个顶点V,然后访问该顶点邻接到的未被访问过的顶点V’再从V’出发递归地按照深度优先的方式遍历;当遇到一个所有邻接于它多的顶点都被访问过了的顶点U时,则回到已访问顶点序列中最后一个未被访问的相邻顶点的顶点W;...

2019-10-26 13:39:26 260

原创 图的定义和术语

图(Graph)是一种较线性表和树更为复杂的数据结构。在线性表中,数据元素之间仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。在树形数据结构中,数据元素之间有着明显的层次关系,并且每一层的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。在图结构中,节点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。图的定义图是数据结构,加上一组基本操作,就构成了抽...

2019-10-15 08:10:05 378

原创 二叉树

二叉树的定义二叉树(Binary Tree)是另一种树形结构,它的特点是每个结点至多有两棵子树(即二叉树中不存在度>2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。二叉树的5种基本形态空二叉树仅有根结点的二叉树右子树为空的二叉树左、右子树均非空的二叉树左子树为空的二叉树二叉树的重要性质性质1: 在二叉树的第i层上至多有2i-1个结点(i≥1)。性质2:...

2019-09-26 08:36:15 220

原创 二叉树的存储结构

顺序存储结构完全二叉树的结点可以按从上至下和从左至右的次序存储在一维数组中,其结点之间的关系可以由公式计算得到。对于一般的非完全二叉树;增加空结点,以便顺序存储。...

2019-09-21 10:50:45 313

原创 数组模拟队列思路分析及代码实现

数组模拟队列队列队列是一个有序列表,可以用数组或链表来实现。遵循先入先出原则。即:先存入队列的数据,要先取出来。数组模拟思路分析队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图,其中maxSize是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量front及rear分别记录队列前后端的下标,front会随着数据输出而改变,而...

2019-09-19 22:06:39 376

原创 数据结构—树

树的定义树(Tree)是n(n≥0)个结点的有限集。在任意一颗非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当n>1时,其余的结点可分为m(m>0)个互不相交的有限集T1,T2,…,Tm,其中每一个集合又是一棵树,并且称为根的子树(SubTree)。树的结构定义是一个递归定义,即在树的定义中又用到了树的概念,它道出了树的固有特性。树的结点: 包含一个数据元素及...

2019-09-17 21:20:09 168

空空如也

空空如也

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

TA关注的人

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