
算法
文章平均质量分 93
GolvenDong
这个作者很懒,什么都没留下…
展开
-
收录一些常见的算法题型
s.trim()原创 2023-10-06 20:38:23 · 431 阅读 · 0 评论 -
武汉理工大学计算机考研历年复试真题实现
2019年算法真题No.1 凑硬币【题目】:现在有硬币1分,5分,10分,25分。我现在想凑齐63分的硬币,请问如何用最少的硬币凑成63分呢。比如这道题答案应是25,25,10,1,1,1思想:采用贪心法,每次选取超过当前money的最大的硬币值,然后计算每次需要的不同硬币的个数public static void main(String[] args) { int[] coin = {1,5,10,25}; int money=63; chooseCoin(coin,原创 2021-04-02 13:42:39 · 2347 阅读 · 0 评论 -
武汉理工大学计算机考研复试-算法与程序设计(绿皮书算法java实现)
算法与程序设计复试经典算法设计与分析递归函数在运行是调用自身,并且一定要包含条件语句,在合适的时候终止递归//2013年算一个M的N次方,要求用递归;public class recursion { public static void main(String[] args){ System.out.println(f(5,3)); } public static Integer f(int M,int N){ if(N==1){原创 2021-03-05 20:59:36 · 850 阅读 · 0 评论 -
弗洛伊德(Floyd)算法介绍和实现(Java)
弗洛伊德(Floyd)算法介绍和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉...原创 2019-11-03 11:13:17 · 810 阅读 · 0 评论 -
迪杰斯特拉(Dijkstra)算法的基本介绍和实现方法(Java)
迪杰斯特拉(Dijkstra)算法介绍迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个结点到其他结点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。算法过程:设置出发顶点为v,顶点集合V{v1,v2,vi…},v到V中各顶点的距离构成距离集合Dis,Dis{d1,d2,di…},Dis集合记录着v到图中各顶点的距离(到自身可以...原创 2019-11-02 22:34:23 · 660 阅读 · 0 评论 -
克鲁斯卡尔算法的基本介绍和实现方法(Java)
克鲁斯卡尔(Kruskal)算法介绍:克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路具体做法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入到森林中,并使森林中不产生回路,直至森林变成一棵树为止应用案例:公交站问题:1)、某城市新增7个站点(A, B, C,...原创 2019-11-02 17:03:35 · 2928 阅读 · 0 评论 -
普里姆算法的基本介绍和实现方法(Java)
应用场景-修路问题题目:有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路:er 将10条边,连接即可,但是总的里程数不是最小.正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少.最小生成...原创 2019-11-02 13:37:25 · 1173 阅读 · 1 评论 -
贪心算法的基本原理和实现方法(java)
贪心算法:1)、贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法2)、贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果贪心算法最佳应用-集合覆盖假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到...原创 2019-11-01 20:13:50 · 2615 阅读 · 0 评论 -
kmp算法的基本原理和实现方法(Java)
介绍:1)、KMP是一个解决模式串在文本串是否出现过,如果出现过,最早出现的位置的经典算法2)、Knuth-Morris-Pratt 字符串查找算法,简称为 “KMP算法”,常用于在一个文本串S内查找一个模式串P 的出现位置,这个算法由Donald Knuth、Vaughan Pratt、James H. Morris三人于1977年联合发表,故取这3人的姓氏命名此算法.3)、KMP方法算法...原创 2019-11-01 14:12:17 · 2525 阅读 · 0 评论 -
动态规划算法的原理和实现(Java)
动态规划算法介绍动态规划(Dynamic Programming)算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法动态规划算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。 (即下一个子阶段的求解是建立在上一个子阶...原创 2019-10-31 17:22:08 · 2310 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历介绍和实现(Java)
图的深度优先遍历(DFS)基本介绍:图的深度优先搜索(Depth First Search) :1)、深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第一个邻接结点, 可以这样理解:每次都在访问完当前结点后首先访问当前结点的第一个邻接结点。2)、我们可以看到,这样的访问策略是优先...原创 2019-10-29 21:09:49 · 667 阅读 · 0 评论 -
图的基本介绍和创建方法(Java)
图的基本介绍:为什么要有图:前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图图的举例说明:图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V(vertex)是图G中顶点的集合,E(edge)是图G中边的集合。图的常用...原创 2019-10-29 19:29:17 · 2671 阅读 · 0 评论 -
多路查找树的介绍
二叉树的问题分析:二叉树的操作效率较高,但是也存在问题, 请看下面的二叉树二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.多叉树:在二叉树中,每个节...原创 2019-10-28 21:07:03 · 164 阅读 · 0 评论 -
平衡二叉树的基本原理和实现方法(Java)
平衡二叉树(AVL树)的来源:看一个案例(说明二叉排序树可能的问题)给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在.BST 存在的问题分析:1)、左子树全部为空,从形式上看,更像一个单链表.2)、插入速度没有影响3)、查询速度明显降低(因为需要依次比较), 不能发挥BST的优势,因为每次还需要比较左子树,其查询速度比单链表还慢解决方案-...原创 2019-10-28 19:48:19 · 706 阅读 · 2 评论 -
二叉排序树的基本原理和实现方法(Java)
二叉排序树基本介绍:二叉排序树(BST): (Binary Sort(Search) Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。特别说明:如果有相同的值,可以将该节点放在左子节点或右子节点比如针对前面的数据 (7, 3, 10, 12, 5, 1, 9,2) ,对应的二叉排序树为:算法分析:二叉排序树创建和遍历:...原创 2019-10-27 22:05:26 · 1461 阅读 · 0 评论 -
赫夫曼树的创建和遍历(Java)
赫夫曼树的基本介绍:给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree), 还有的书翻译为霍夫曼树。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。如下图中第二个树才是赫夫曼树,因为它的wpl值最小赫夫曼树的几个重要概念:1)、路径和路径长度:在一棵树中,从一个结点往下可以达到...原创 2019-10-27 16:11:14 · 644 阅读 · 1 评论 -
堆排序的基本原理和实现方法(Java)
堆排序的基本原理:堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆大顶堆举例说明:我们对堆中的结...原创 2019-10-27 12:34:07 · 1159 阅读 · 0 评论 -
线索二叉树的基本原理和实现方法(Java)
线索二叉树的基本概念:n个结点的二叉链表中含有n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")。这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索...原创 2019-10-26 22:05:30 · 477 阅读 · 0 评论 -
顺序存储二叉树的基本原理和实现(Java)
顺序存储二叉树的概念:基本说明:从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看下面的示意图。要求:右图的二叉树的结点,要求以数组的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]要求在遍历数组 arr时,仍然可以以前序遍历,中序遍历和后序遍历的方式完成结点的遍历顺序存储二叉树的特点:1、顺序二叉树通常只考虑...原创 2019-10-26 18:34:39 · 499 阅读 · 0 评论 -
二叉树的基本原理和实现方法(Java)
二叉树的来源:数组存储方式的分析优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低链式存储方式的分析优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需要将插入节点,链接到链表中即可, 删除效率也很好)。缺点:在进行检索时,效率仍然较低,比如(检索某个值,需要从头节点...原创 2019-10-26 15:28:56 · 1514 阅读 · 1 评论 -
哈希表的基本原理和实现方法(Java)
哈希表的基本介绍:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。其逻辑图如下所示:演示题目:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求...原创 2019-10-25 12:55:28 · 3079 阅读 · 0 评论 -
栈的基本原理及实现(Java)
栈的基本原理:栈的英文为(stack),它是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,最后放入...原创 2019-10-23 20:23:10 · 638 阅读 · 0 评论 -
单向环形链表(Josephu的java实现方式)
Josephu问题简述:Josephu问题为:设编号为1,2,… n的n个人围坐一圈,约定编号k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。(n = 5 , 即有5个人 ;k = 1, 从第一个人开始报数;m = 2, 数2下)分析:用一个不带头结点的循环链表来...原创 2019-10-22 23:15:14 · 312 阅读 · 1 评论 -
双向链表的基本原理和实现(Java)
双向链表基本原理:双向链表也是链表的一种,它每个数据结点中都有两个结点,分别指向其直接前驱和直接后继。所以我们从双向链表的任意一个结点开始都可以很方便的访问其前驱元素和后继元素。双向链表的结构如下图所示:双向链表的基本操作:分析 双向链表的遍历,添加,修改,删除的操作思路遍历:和单链表一样,只是可以向前,也可以向后查找添加 (默认添加到双向链表的最后):(1) 先找到双向链表的最...原创 2019-10-22 18:45:33 · 924 阅读 · 0 评论 -
单向链表基本原理及实现方法(Java)
链表(Linked List)链表是有序的列表,但是它在内存中是存储如下:链表的基本特征:1、链表是以节点的方式来存储,是链式存储2、每个节点包含 data 域, next 域:指向下一个节点.3、如图:发现链表的各个节点不一定是连续存储.4、链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定算法分析:链表中元素的增加(需要按照编号的顺序添加):首先找到新添加的节...原创 2019-10-21 22:54:00 · 467 阅读 · 0 评论