算法笔记
文章平均质量分 79
用于记录算法的学习
同学郑学习
已毕业
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
归并排序的泛型接口实现
一、归并排序(一)自顶向下的归并排序1、思路还是很好理解的哦将一个待排序的数进行拆分成两个数组。然后对左边的数组进行递归,进行归并,最后得到一个左边的有序数组【在这内部也进行的内部的拆分为两个小数组,进行排序归并】。然后对右边的数组进行递归,进行归并,最后得到一个右边的有序数组【在这内部也进行的内部的拆分为两个小数组,进行排序归并】。最后将两个数组进行进行归并。2、代码实现代码阅读建议首先去看Merge类里面的merge方法,理解它的含义了去整体的看一遍Merge里面的所有排序方原创 2021-12-12 16:06:09 · 412 阅读 · 0 评论 -
选择,插值,希尔排序算法的泛型排序实现
1、思想我们一定要理解选择排序的思想,假设是按着升序排序的方式,首先找到最小的数,然后将第一个数组的第一个数据和它进行交换然后找到第二个小的数,将它和数组的第二个树进行交换依次下去2、代码这里我们使用了Comparable接口,这样的好处是,当我们自定义的类只要实现了Comparable接口,并且实现compareTo方法都可以调用这算法来进行排序package cn.mldn;public class SelectionSort { public static void原创 2021-12-09 16:48:16 · 383 阅读 · 0 评论 -
十大常用算法之马踏棋盘算法
十大常用算法的完整实现一、二分查找算法:https://blog.youkuaiyun.com/weixin_46635575/article/details/121532149二、分治算法:https://blog.youkuaiyun.com/weixin_46635575/article/details/121532941三、动态规划算法:https://blog.youkuaiyun.com/weixin_46635575/article/details/121534074四、KMP算法:https://blog.csdn.n原创 2021-12-04 15:28:41 · 1230 阅读 · 0 评论 -
十大常用算法之佛洛依德算法
一、基本介绍1、基本介绍2、图解Floyd算法【也是求最短路径的】(1)先初始化两个需要的数组(2)找过度节点(3)总体思路首先知道了什么是过度节点后。接下来看一下佛洛依德的算法思路首先以第一个中间节点A为过度节点然后就再以A为出发点,下面的A,BCDEFG为终点进行遍历然后再以B为出发点,下面的A,BCDEFG为终点进遍历然后再以C,D,E,F,G做为起点,循环遍历下去然后再以第二个中间节点B为过度节点,循环的往下面找然后就以CDEFG原创 2021-12-04 15:18:46 · 1488 阅读 · 0 评论 -
十大常用算法之地杰斯特拉算法
1、基本介绍(1)应用场景(2)介绍回忆一下我们的图的广度优先和深度优先广度优先是从一层一层的访问:所以是12345678深度优先是先走到底,然后回到起点进行重新查找,如果还是不是很理解的话,建议你去看一下我主页的图的算法的文章。v就是我们例子中的G点,Dis里面记录的是v到图中各个节点的距离(3)图解我们的题目当以G开始走一遍后当G访问后,接下来开始访问A开始访问。这时候三个数组也是要进行更新的,这时候的出发顶点任然是G点,只是以A点访问而已,不然我们无法记录G原创 2021-12-03 12:18:05 · 716 阅读 · 0 评论 -
十大常用算法之克鲁斯卡尔算法
一、基本介绍1、应用场景2、克鲁斯卡尔算法介绍(1)描述(2)分析分析场景图解算法(3)克鲁斯卡尔算法回路分析图解回路分析二、代码实现总的来说:要先根据节点来生成图,对生成好的树:得到我们的数据变,进行排序的编写然后还要对我们的判断是否会有回路的的情况最后才是编写我们的算法总的来说步骤有点多,但是不是很复杂的1、首先来根据节点生成图代码阅读建议首先要明白我们的思想:是用二维数组【也就是矩阵】来进行存放两边是否连通然后就先看我Mgraph原创 2021-12-02 12:26:01 · 1572 阅读 · 0 评论 -
十大常用算法之普里姆算法
1、普里姆(Prim)和MST介绍(1)应用场景(2)最小生成树(3)普里姆算法介绍(4)普里姆图解分析分析思路最后的一个结果2、代码实现首先我们因为要用写好的图,根据图来生成最小生成树,所以代码也分两部分:一部分是节点生成树然后编写prim算法(1)先对节点生成树代码阅读讲义这部分代码是与上面的介绍无关,主要是为了生成树,为了后续的prim打基础首先要看我们的class MGraph类的编写然后要来看miniTree最后再来看测试public原创 2021-12-01 15:29:09 · 504 阅读 · 0 评论 -
十大常用算法之贪心算法
1、贪心算法的应用案例2、贪心算法的概念3、以案例分析(1)思路分析使用穷举法来分析使用贪心算法分析(2)贪心算法解决案例使用贪心算法分析步骤分析第一步取得所有的元素总集合第二步是对比每个集合对应总集合的个数第三步然后找到覆盖最多的放到我们的selects集合里面【每次都是尽量找到最优的】第四步然后把对应的总集合里面的元素删除同样的重复第三四步,进行循环查询最后要达到把我们的总集合里面的删除【答案就是k1,k2,k3,k5】(3)案例分析原创 2021-11-30 11:32:29 · 1640 阅读 · 0 评论 -
十大常用算法之KMP算法
一、暴力匹配法1、内容讲解2、代码实现package cn.mldn.kmp;public class ViolenceMach { public static void main(String[] args) { String st1 = "你好,我不太好,你好呀不好,我你好"; String st2 = "你好呀"; int index = violenceMah(st1,st2); System.out.printl原创 2021-11-28 15:47:58 · 680 阅读 · 0 评论 -
java实现八大排序算法
各大排序算法的完整实现001冒泡排序:https://blog.youkuaiyun.com/weixin_46635575/article/details/120912718002选择排序:https://blog.youkuaiyun.com/weixin_46635575/article/details/120924632003插入排序:https://blog.youkuaiyun.com/weixin_46635575/article/details/120925291004希尔排序:https://blog.csdn.n原创 2021-11-26 11:30:01 · 235 阅读 · 0 评论 -
十大常用算法之动态规划(java版)
本文讲解的是动态规划和代码练习1、动态规划介绍1、背包问题2、动态规划介绍2、动态规划案例演示(背包问题)明天来原创 2021-11-25 11:35:51 · 594 阅读 · 0 评论 -
十种常用算法之分治算法(java版)
本文讲解:分治算法的理解和代码实现1、分治算法的介绍1、基本介绍2、基本步骤3、分治算法看百度百科的:当我们求解某些问题时,由于这些问题要处理的数据相当多,或求解过程相当复杂,使得直接求解法在时间上相当长,或者根本无法直接求出。对于这类问题,我们往往先把它分解成几个子问题,找到求出这几个子问题的解法后,再找到合适的方法,把它们组合成求整个问题的解法。如果这些子问题还较大,难以解决,可以再把它们分成几个更小的子问题,以此类推,直至可以直接求出解为止。这就是分治策略的基本思想。再来看这个原创 2021-11-25 11:27:14 · 1423 阅读 · 0 评论 -
十种常用算法之二分查找(java版)
本文写关于二分查找算法的另一种方式:非递归实现1、递归版的实现https://blog.youkuaiyun.com/weixin_46635575/article/details/1210555142、非递归的基本介绍2、非递归代码会实现比较简单package cn.mldn;public class binarySearch { public static void main(String[] args) { int [] arr = {1,3,4,6,8,10,14};原创 2021-11-25 10:49:05 · 806 阅读 · 0 评论 -
数据结构之图(java代码版)
图是一个基本的数据结构在于理解图和java代码实现一、图的基本介绍1、为什么要图复习一下我们之前学习的东西线性表和树线性表局限于只能连接一个前驱节点和一个后继节点树也只能连接一个直接前驱也就是父节点当我们需要表示多对多的情况时,这时候就表示两种结构都不能满足的情况(图产生的原因)2、图的基本概念图是一种数据结构,其中节点可以具有零个或多个相邻元素。两个节点之间的连接称为边,节点也可以称为顶点。(指不定我们的地图就是用这个来实现的)3、图的表示方式1表示它们之间能直接连原创 2021-11-23 10:24:14 · 1197 阅读 · 0 评论 -
数据结构之二叉排序树
首先这篇文章你可以了解到如下知识:首先了解几种存储方式的对比。二叉树的存储的思路分析二叉树的存储的java代码实现。上一篇文章地址:https://blog.youkuaiyun.com/weixin_46635575/article/details/121188680二叉排树一、问题引入1、给你一个数列{73,10,12,5,1,9},要求能够高效的完成对数据的查询和添加思路分析:可以使用数组来处理,假设数组没有排序的情况,优点是尾添加,缺点是查找速度慢;假设排序数组,可以用二分查找来查,速度快原创 2021-11-17 13:39:33 · 531 阅读 · 0 评论 -
赫夫曼树之赫夫曼解码
正文如下:原创 2021-11-15 20:05:22 · 195 阅读 · 0 评论 -
算法之赫夫曼编码
一、基本介绍赫夫曼编码也翻译哈夫曼编码(Huffman Conding),是一种编码方式,属于一种程序算法赫夫曼编码是利用赫夫曼树在电讯通信中的经典应用之一赫夫曼编码广泛地应用于数据文件压缩,其压缩通常在20%到90%之间赫夫曼是可变字长编码的一种,是赫夫曼1952年提出的。二、赫夫曼编码原理1、如果按照定长来走(定长编码)2、变长编码3、赫夫曼编码...原创 2021-11-12 20:41:22 · 466 阅读 · 0 评论 -
003数据结构之树线索化二叉树
一、线索化介绍1、先看个问题2、基本概念第一句话的意思就是比如:把它的空指针,指向接下来的该遍历的数的前驱或后继。不懂继续往后看二、思路和实现1、实现思路1、案例分析2、分析情况:来看看这个下面这些图片,比如说第一个数8,前驱节点没有,后继节点为3 ;比如3,但是3的前驱和后继都是用完了的不能动;又比如10的前驱要指到3,后继13、问题说明2、代码实现package cn.mldn.Thread;public class ThreadedBinaryTree原创 2021-11-07 12:43:42 · 156 阅读 · 0 评论 -
002数据结构之树顺序存储
这篇文章接着上面一篇文章内容讲的:上一篇文章地址:文章你可以从这篇文章中获取如下知识了解顺序存储二叉树的概念用java代码实现二叉树的顺序存储一、顺序存储二叉树的概念1、基本说明从数据的存储来看,数组存储方式和树存储方式可以相互转换,即数组可以转换成树,树可以转换为数组。即在所有的数组中,也可以前序遍历和后续遍历,中序遍历的形式遍历。2、顺序存储的特点顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为2 * n +1第n个元素的由子节点为2 * n +1第n个元素的父原创 2021-11-07 11:17:38 · 279 阅读 · 0 评论 -
001数据结构之树增删改查介绍
这篇文章讲解关于树的一系列知识,后续可能会根据知识点的数量分开写成多个文章,你可以从中获取如下知识:对之前已有的存储方式回顾对树有个简单的了解问题引入:为什么需要树这种结构呢?一、已知的存储方式回顾1、数组的优点与缺点可以方便查找,排序等当他数据满之后,当要插入数据的,都会降低效率。比如我们的ArrayList这个类,它也是按一定的比例来扩容。2、链表的优点与缺点链表摒弃了数组的浪费内存,但是它仍然存在检索比较浪费时间的。3、需要原因能提高数据存储,读取得效率,比如利原创 2021-11-03 16:39:29 · 684 阅读 · 0 评论 -
003查找算法之斐波那契查找
一、斐波那契(黄金分割法)介绍1、黄金分割点是指一条线段分割为两部分,使其中一部分与全长之比等于另外一部分与这部分之比,取其前三位数字的近似值是0.618.由于按此比例设计的造型十分美丽,因此称为黄金分割,也称中外比,这是一个神奇的数字,会带来意想不到的效果2、斐波那契数列{1,1,2,3,5,8,13,34,55}斐波那契数列的两个相邻的数的比例,无限接近黄金分割值0.618.a[0] = 1,a[1] = 1 ,a[2] = 1 + 1,a[3] = 2 + 1.明天再来。...原创 2021-11-01 21:19:53 · 176 阅读 · 0 评论 -
002查找算法之插值查找
这篇文章是介绍插值查算法的,你可以获得如下知识:插值查找原理的插值查找的java代码实现建议这篇文章和查找算法001和起来看,不然你看不懂本文参考尚硅谷视频。一、插值查找介绍1、原因分析为什么不是二分查找就可以了呢?比如我们要找1-1000里面的1,如果我们要找的话,要二分,然后再二分,二分到最后都要很久,但是我们的插值查找的话,我们就利用自适应来完成时间减少。提高效率。1、分析实现原理插值查找算法类似于二分查找,不同的是插值查找每次从自适应mid处开始查找。将二分查找中的mid原创 2021-11-01 20:54:26 · 138 阅读 · 0 评论 -
001查找算法之二分查找法
你可以从这篇文章学到如下东西:线性查找的一个大致介绍二分查找的大致情况二分查找的java代码实现主页也有很多算法的一些知识,可以参一下一、线性查找算法由于这个过于简单就不分析了package cn.mldn;import java.util.ArrayList;import java.util.Arrays;import java.util.Iterator;import java.util.List;public class searchSort { public原创 2021-10-30 20:36:43 · 248 阅读 · 0 评论 -
数据结构之哈希表
一、基本介绍1、基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到到表中一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数,存放记录的数组叫做散列表。2、表的实现数组 ~~~~ 链表的形式3、哈希表的常用点我们开发的程序会由写的java代码去操作数据库,但是频繁的去操作数据库性能也是很低的,所以我们有比较常见的缓存层(Redis Memcahe)产品,但是缓存层一般就用Hash来编写的,原创 2021-10-29 12:25:02 · 316 阅读 · 2 评论 -
009排序算法之堆排序
这篇文章你可以收获到如下知识:了解各种排序算法的时间复杂度大致了解一下排序算法里面的一些比较重要的概念由于我对二叉树什么的很久没有用了忘记了,暂时不会写堆排序,等后续把二叉树什么都学了,再来补上,你可以到我的主页了解到所有的排序算法知识一、堆排序后续补二、排序算法的比较...原创 2021-10-28 13:14:51 · 222 阅读 · 0 评论 -
008排序算法之基数排序
这篇文章你可以了解如下知识:你可以学习到基数的排序的思想可以学习用java实现基数排序主页也有全部的所有排序算法知识点,可以参考一下原创 2021-10-27 14:30:18 · 128 阅读 · 0 评论 -
007排序算法之归并排序
本文介绍:你可以从如下获得知识可以学习到归并排序的内容用java代码实现归并排序另外我主页也有很多排序的知识,可以参考一下一、归并排序介绍1、归并排序(Merge-Sort)是利用归并的思想的排序算法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案修补在一起,即分而治之)2、示意图对治的最后一步分析一下:二、代码实现1、代码实现public clas原创 2021-10-27 11:35:25 · 174 阅读 · 0 评论 -
006排序算法之快速排序
主页有全部关于排序算法的讲解,具体的可以看看,这里就不一一罗列出来了。从这篇文章中你可以学到如下知识:快速排序的大致介绍快速排序的java实现一、快速排序介绍1、快速排序(QuickSort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将哟啊排序的数据分割成独立的两部分,其中一部分的所有数据比另外一部分的所有数据都要小,然后再此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(就是比如有x,y,z,m,k,t,以这么几个数据:以z或者其他的为基准原创 2021-10-26 11:12:33 · 141 阅读 · 0 评论 -
005排序算法之希尔排序
主页有更多算法的文章,如果有用帮忙点个赞0、之前存在问题分析插入排序算法分析显然明明就是可以随便一下就好的,结果搞的很麻烦。所有有了下面对插入排序的改进版。希尔排序一、希尔排序介绍1、基本介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法,希尔排序也是一种插入排序,它是简单插入排序经过改进后的更高效的版本,也称为缩小增量排序2、基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,原创 2021-10-25 21:28:50 · 164 阅读 · 0 评论 -
004排序算法之插入排序
一、基本介绍插入排序属于内部排序法,是对欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的算法。1、思路实现插入排序(Insertion sorting)的基本思想:把n个代排序的元素看为一个有序和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序中取出第一个元素,把它的排序码依次与有序元素的排序码进行比较,将它插入到有序表中适当的位置,使之成为新的有序表。(感觉有点不好理解)2、看一下图理解当然看图就可以知道,这个当中第一个也是不用比较的,总体的原创 2021-10-23 20:19:02 · 147 阅读 · 0 评论 -
003排序算法之选择排序
从这篇文章中你可以了解如下内容:了解排序算法中的选择排序的基本内容用java实现选择排序一、基本介绍选择排序也属于内部排序法,是从欲排序的数据中,按着指定的规则选出某一元素,再依规定交换位置后达到排序的目的。1、实现思路选择排序(select sorting)也是一种简单的排序方法,它的基本思想是:第一次从arr[0]arr[n-1]中选择最小值,找到最小的与arr[0]中进行交换,然后又以从arr[1]arr[n-1]中选择到第二小的进行交换。依次内推,总共执行n-1次完成排序。2、图解原创 2021-10-23 19:49:34 · 149 阅读 · 0 评论 -
002排序算法之冒泡排序
视频资源都是来自于尚硅谷下面你可以获得以下知识了解冒泡排序是什么!知道冒泡排序的思路知道实例代码并且练习有收获记得帮忙点个赞,有问题请指出。一、冒泡排序基本介绍1、冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前往后(从下标较小的元素开始)依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前往后移动,就像水底的气泡一样向上冒出。2、冒泡排序的优化思路因为排序的过程中,各个元素不断接近自己的位置,如果一趟比较下来没有进行交换,就说名顺序有序 ,因此要在原创 2021-10-22 21:26:22 · 192 阅读 · 0 评论 -
001排序算法介绍
O:本文大致介绍阅读下面这篇文章你可以有如下收获:对所有的排序算法有个大致的了解。了解你需要学习的排序算法的重点。了解接下来的学习内容。本篇文章主要是解决排序算法的介绍和我们需要具体的学习之前要了解的一些内容,因此这篇文章没有具体写算法,不过在接下来也会陆陆续续更新,可以第几我的专栏“算法笔记”观看更算法的知识一、排序算法介绍1、基本介绍1、排序算法介绍排序算法(Sort Algorithm),排序是将一组数据,依据指定的顺序进行排序的过程。2、排序算法分类内部排序:指将需要处原创 2021-10-21 16:25:44 · 220 阅读 · 0 评论 -
栈和背包和队列的源代码和书讲解
以下代码是根据链表来实现的数据结构一、下压栈1、实现思路1、图片一2、图片二3、图片三4、图片四2、代码实现import java.util.Iterator;public class MyStackTest { public static void main(String[] args) { MyStack<String> myStack = new MyStack<>(); myStack.push("hello原创 2021-10-20 13:15:45 · 185 阅读 · 0 评论 -
递归应用场景和练习
一、递归介绍简单的说:递归就是方法自己调用自己,每次调佣时传入不同的变量,递归有助于编程者解决复杂的问题。1、介绍案例1(1)、代码案例public class recursive { public static void main(String[] args) { test(4); } public static void test(int n) { if (n > 2) { test(n-1);原创 2021-10-17 13:45:23 · 1354 阅读 · 0 评论
分享