Java_算法
文章平均质量分 73
记录遇到的各种经典算法
秃头洗头用飘柔
自强不息 明治高远
展开
-
贪心算法_电台覆盖问题
贪心算法算法简介贪心算法又称贪婪算法,它的核心思想就是不管要做什么选择,或是得到什么结果,都要最好的最优的,跟名字的比较贪婪,但是最后得到的结果不一定是最好的。可能是最好的,或是无限接近于最好的结果。电台问题如果有如图这些广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号问题分析首先我们可以把所有需要覆盖到的所有地区都存入一个集合,然后遍历这些电台,找到可以覆盖最多的一个,然后拿出,并且从集合中去掉已经覆盖的城市。依次类推,直至存地区的集合为空,问题解决原创 2020-12-11 14:09:56 · 267 阅读 · 0 评论 -
克鲁斯卡尔算法_修路问题
克鲁斯卡尔算法问题描述修路问题:七个村庄(A,B,C,D,E,F,G)要修路,七个村庄之间路线很多,要怎样才可以在保证联通所有村庄的同时修最短的路思路分析我们可以把所有的边存入数组,然后按照从小到大的取出去构建最小树,但是保证取出的边不会构成回路。如图我们有十条边,先都存入数组,然后取出依次取出,先取出最短的A->G,不构成回路,继续取...原创 2020-12-11 13:24:59 · 463 阅读 · 0 评论 -
轻而易举理解_普利姆算法_修路问题
普利姆算法问题描述修路问题:现在有A,B,C,D,E,F,G七个村庄,道路四通八达,有一天为了交通便利,几个村庄就想修路,但是经济条件有限,道路却有很多条,我们要怎么知道在修最短路程的基础上又保证所有村庄都可以联通起来。思路分析这就是一个求最小生成树的问题,举例我们从A村开始修,这时候A可以修往(C B G)三个村,因为是修最短路径,如图所示A->G最短,我们就修往G村。此时修到了G村,我们在G这个村庄判断G可以修往的村庄,如图所示G可以修往(A B E F )但是此时去往A村庄的路已经通了原创 2020-12-04 15:54:31 · 330 阅读 · 0 评论 -
简单分析_动态规划_01背包
动态规划_01背包问题描述01背包问题:假设你有一个背包,可以装4㎏东西,但是你有很多东西比如;锤子(1000元,1kg),棒子(1500元,2kg),棍子(2000元,1kg)…等。你要怎么样在你的书包里放入组合起来价值最大的物品。简而言之,在有限的空间怎样搭配才可以装入最大价值的东西,并且物品不重复。解决思路穷举法:把所有的可能性都列举出来,然后一一对比,可以达到一个解决问题的目的,但是可选择的物品如果多一些,从时间上和效率上,并不可取。动态规划:怎么去理解动态规划呢。就是从最优解的基础上去推原创 2020-12-04 14:06:23 · 101 阅读 · 1 评论 -
简单分析二分查找
二分查找算法二分查找跟快速排序很相似,有兴趣的或没了解过的,客官 这边请点击传送介绍二分查找也叫折半查找,听名字就知道折一半,优点就是减少了查找次数。场景分析有一天你朋友对你说:猜我有多少钱,提前告诉你1~100之间。你会咋猜,不会从1到100,一个一个猜吧。这个时候咱如果用二分查找的话就会快一些,先取一半50,他如果说大了,再取一半的左边的一半25,反正取右边的一半75。相信我没几回合就猜出来了代码实现(非递归)递归版本的话参考我的快排点击传送public static void main原创 2020-11-27 17:33:01 · 63 阅读 · 0 评论 -
简单分析kmp算法
KMP算法介绍没有了解暴力匹配算法的可以先看看暴力匹配算法比较简单点击可以传送kmp算法跟暴力匹配算法目的相同,都是解决类似于字符串匹配这样的问题的,但是kmp算法不同与暴力算法的是,暴力匹配算法时一次匹配不成功就回溯到上次匹配的下一个位置从新匹配,但是kmp算法可以根据需要子字符串前缀和后缀生成一个next数组,当匹配不成功时根据next数组里相对应的值,决定继续匹配的位置。举个例子:如果子串是 AB…AB…。如果匹配失败了,就把前面的AB直接挪到后面AB的位置继续匹配。next数组next数原创 2020-11-27 17:05:48 · 92 阅读 · 0 评论 -
简单明了_暴力匹配算法
暴力匹配算法使用场景如果有两个字符串或数字str1(1123312333211),str2(123),想知道str2是否跟str1里面的某一处完全匹配(完全一样)如果匹配的话。匹配的起始位置是哪里。算法介绍暴力匹配算法还是比较好理解,字面上就可以看出比较暴力。我们拿str1的第一个数据跟str2的第一个数据进行比较,如果一样就继续比较str1和str2的第二个数据,如果不一样,就拿str2的第一个数据跟str1的第二个数据进行比较。以此类推。简而言之如果匹配失败。就拿着str2的第一个数据和str1原创 2020-11-27 14:52:35 · 624 阅读 · 2 评论 -
通俗易懂_汉诺塔(java递归实现)
汉诺塔汉诺塔介绍汉罗塔游戏简单来说就是,有三根柱子(记作ABC),A柱子上有从小到大的若干个圆盘,我们要怎么把A柱子上的这若干个圆盘全部挪到C,并且保证顺序还是从小到大。 规则是:挪的过程中大圆盘不能放在小圆盘上面。图解一下(来自参考资料)可以看到如果只有一个圆盘我们可以直接挪到C。A -> B有两个的话先把上面圆盘的挪到B,然后把最下面圆盘的挪到C,再把B的圆盘挪到C。(重点理解)A -> BA -> CB -> C有三个的话我们也得把最下面圆盘上面所有的圆原创 2020-11-27 14:13:40 · 588 阅读 · 0 评论