
算法分析
xiaoxiao刘
这个作者很懒,什么都没留下…
展开
-
记录Java实现图的深度优先遍历与广度优先遍历练习
package upload;import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;public class DfsandBfs { private ArrayList<String> vertex;// 顶点 private int[][] edges;// 边,实际上是邻接矩阵 private int number_of_edge;// 边的数目 private boo原创 2020-12-09 23:41:49 · 151 阅读 · 0 评论 -
回溯法解决从自然数n中选r个数的组合
要求从自然数1,2,3,… ,n中任取r个数的所有组合思路代码及测试public static void main(String[] args) { RcombineofN rbn = new RcombineofN(); rbn.seekcombine(5, 3); } /** * arr[i]最小值是i * arr[i]最大值是n-r+i * * @param n:这个数组的范围 * @param r:组合的个数 */ public void原创 2020-12-09 21:19:52 · 3276 阅读 · 0 评论 -
最长公共子序列(LCS)Java实现
动态规划中的经典问题——最长公共子序列(LCS)了解了算法的思路进行的一次练习,看起来还有很多不足需要改进public class Lcs { public static void main(String[] args) { // TODO Auto-generated method stub char[] a = { 'B', 'D', 'C', 'A', 'B', 'A' }; char[] b = { 'A', 'B', 'C', 'B', 'D', 'A', 'B' }; i原创 2020-12-03 00:24:51 · 422 阅读 · 0 评论 -
记录辗转相除法(欧几里得算法)
public class Gcd { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int a=in.nextInt(); int b = in.nextInt(); Gcd gc = new Gcd(); gc.gcd(a, b); } public void gcd(int a, int b)原创 2020-11-28 22:08:59 · 88 阅读 · 0 评论 -
bfptr算法总结Java实现
不讲思路,讲疗效说到bfptr算法,可能想起来的有号称能显著提高快速排序最坏时间复杂度到线性O(n)常用于查找一个数组中第k小或者第k大的元素实际工程应用中比较常见,面试的时候还有可能涉及等等…关于这个算法的思路网上都有详细的介绍,只是当看到人家的代码,一方面,大都是用C语言实现,另一方面,写的步骤确实抽象,又找不到参考视频,看完直接崩溃。在我心态爆炸完又一步一步把心态拼好后,想对那些注释不清,以及难以理解的部分记录下来,当个笔记,接下来一起看看bfptr的庐山真面目吧:开始寻宝1.采用原创 2020-11-18 22:25:24 · 272 阅读 · 0 评论 -
地道的快速排序渐行渐远
背景网上大多数快速排序算法介绍都是挂羊头卖狗肉,为何我有这种感慨,那是因为快速排序是一种不稳定的算法,如果将它改成稳定算法的话,是不是有些四不像,说的再好听一些就是快速排序的一些变种,改进都说不上,因为改的失去了快速排序的原汁原味。但是想不到网上不少人对该算法津津乐道,称之为简单快捷,我愿将之称为伪快排问题分析:来进入代码看一看这种类快排或者伪快速排序(不含测试方法): public static void quicksortbyleft(int[]arr , int left,int righ原创 2020-11-17 23:11:07 · 160 阅读 · 0 评论 -
0-1背包问题的图解过程
心心念的0-1背包问题书上给出题解流程:转换成我们的语言=>If(背包容量装不下第i个物品){既然装不下第i个物品,那么装入前i个物品的最大价值就等于装下前i-1个物品的价值}else(背包容量可以装下第i个物品){很开心可以增加价值了,但是我这心里有点犯嘀咕,会不会我这放入第i个物品后,第i个物品不仅价值低,而且占地方还大,我是不是还要和装入前i-1个物品的价值进行比较,择优选择所以:Max(只装入前i-1个物品的价值,装入i后的价值+前i-1个物品的价值在减去第i个物品价值的容量原创 2020-11-16 19:57:01 · 1497 阅读 · 0 评论 -
分析学习API文档实现LRU缓存置换算法的思路流程
需求:设计一个缓存类,利用LRU算法机制实现插入和删除数据。分析 关于LRU缓存在乐扣中的解答是通过Java API中LinkedHashMap这个类来实现,实现步骤如下: 1.在定义的LRU缓存类中声明一个缓存容量和一个LinkedHashMap类型的变量 2.在这个类的构造方法中给这个类的容量大小赋值,构造一个空的 LinkedHashMap实例,具有指定的初始容量(initialCapacity),负载因子(loadFactor)和排序模式(accessOrder)。initialC原创 2020-11-15 23:34:48 · 92 阅读 · 0 评论 -
关于斐波那契查找思路的问题总结
前言:在学习斐波那契查找的过程中,刚开始以为和插值查找一样,变变公式加上几个判断条件,就照着二分查找的思路走一下,万万没想到,整个学习过程仍然花费了不少功夫,你敢信,这家伙并不像看起来的那样美丽。回到正题,其实网上关于这个查找过程实现和代码都有不少,从中能收获不少,但是还是有许多地方与实现思路有问题,就比如说创建一个临时数组的长度是怎样的?这里我会总结一些思路上容易纠结的地方,如果我还是没讲清楚,推荐去debug一下代码,梳理一下。需要特别注意的几个地方和解释:整个查找的实现流程如下:----.原创 2020-11-13 02:43:20 · 192 阅读 · 0 评论 -
基数排序中关于小桶数据读入详细图解
桶排序:空间换时间的典型代表背景:最近在学习排序算法时,听韩顺平老师的课发现,往小桶放数据的那段代码搞不清楚,本着求真务实的态度去debug了一下(其实就是脑袋转不过来弯儿),才突然悟了,下面把出现问题的地方和之后的桶排序流程拿出来分析一下,在提供思路参考的同时,顺便当作一个教训,好好吸取。问题:当时想不透的地方主要是第一轮排序中的下面这段代码: for(int i = 0 ; i<arr.length;i++) { int digit = arr[i] % 10; bucket[di原创 2020-11-11 15:20:42 · 167 阅读 · 0 评论 -
二路归并排序中的双递归流程详解
二路归并排序中的双递归流程在二路归并算法中,除了分治思想,还有一个双递归的流程问题,有时候在学习算法的过程中,在程序中debugList item二级标题三级标题四级标题五级标题六级标题...原创 2020-11-10 15:55:34 · 839 阅读 · 4 评论