算法
文章平均质量分 85
生命中有太多不确定
热爱技术,热爱生活。积少成多,不急功近利,from 量变 to 质变
展开
-
手把手带你手写一个单调队列
带你手写一个单调队列本文目录带你手写一个单调队列一、概述二、原理三、代码实现一、概述 本文将带你彻底搞懂单调队列的原理,并用代码进行实现。有一到经典的用单调队列解决的LeetCode题——滑动窗口最大值。二、原理 首先先看看这个单调队列用于解决的问题:用于确定当前的最值,当然,也可以确定滑动窗口的最值。我在这里举个例子你们就会明白: 目前有这样一个帮会,实例最强的就可以当老大,实力我们用数值来表示,帮会人数最多为3人。下面是进入帮会的顺序:1,3,-1,-3,5,3,6,7,因为最多只能原创 2021-12-10 19:43:03 · 857 阅读 · 0 评论 -
对动态规划思想的理解
对动态规划思想的理解文章目录对动态规划思想的理解一、概述二、通过问题来发掘共同点三、总结一、概述 动态规划,最核心的就是动态转移方程,这个动态转移方程想要表达的意思说白了就当前状态和前一个状态有关,换句话说,当前的状态与之前的状态有关,或者是当前状态是根据之前已经有的状态“转移”过来的。 这里还有一个难点,就是状态如何定义的问题,一般来说,这个状态与多个其他的状态有关。听起来是不是很抽象,下面我们来看看几个例子二、通过问题来发掘共同点01背包问题——引出问题 这种问题,相信这种问题大原创 2021-10-27 18:12:29 · 297 阅读 · 0 评论 -
轻松学懂图(下)——Dijkstra和Bellman-Ford算法
概述 在上一篇文章中讲述了Kruskal和Prim算法,用于得到最小生成树,今天将会介绍两种得到最短路径的算法——Dijlkstra和Bellman-Ford算法Dijkstra算法算法的特点:属于单源最短路径算法,什么是单源呢,通俗的说也就是一个起点,该算法一次只能得到一个点到其他点的最短路径。限制条件:图中不能有负权边。也就是图中不能有权值为负数的边上面的特点在我讲完这个算法的思想之后你就会明白为什么了。算法思想:这个算法的思想其实特别贴近生活,如果你把每个点都想.原创 2021-04-25 12:10:25 · 3390 阅读 · 4 评论 -
轻松学懂图(中)——拓扑排序、Kruskal算法和Prim算法
轻松学懂图(中)——拓扑排序、Kruskal算法和Prim算法概述 上一篇文章将图相关的常见概念大概讲了一遍,今天主要介绍图相关的算法,可能一下子不太能理解,我会尽量用大白话为大家讲解,请耐心将不是很明白的地方多看几遍。如果有不正确的地方,还请指出,一起进步。 下面,我们将开始正文拓扑排序究竟是啥?AOV网 在了解拓扑排序之前,首先需要知道AOV网(Activity On Vertex Network),它长成下面这样: 在AVO网中,顶点表示活动(Activity)原创 2021-04-02 12:28:53 · 399 阅读 · 0 评论 -
轻松学懂图(上)——相关概念、DFS和BFS
图原来这样简单(上)!一、概述 本篇博客主要是对图相关的知识点进行总结并会附上个人的心得,让内容尽可能的通俗易懂二、图相关知识点常见应用场景:关系网络:每个顶点就像是一个人,顶点与顶点直接有一条无向边就表示有建立联系地图:定点作为城市,边作为路径…相关概念:出度:以这个节点为起点的边的个数,其实就是说方向向外的边入度:以这个节点为终点的边的个数,其实就是说指向自己的边权值:还记得上面的地图场景吗?权值可以表示两个地点之间路径有多长,也可以理解为开销图的分原创 2021-03-27 23:21:20 · 174 阅读 · 0 评论 -
10大排序算法总结
10大排序算法总结文章目录10大排序算法总结一、冒泡排序二、选择排序三、插入排序四、归并排序五、快速排序六、希尔排序七、堆排序八、计数排序九、基数排序十、桶排序十、桶排序在10大排序算法中,有7个是基于比较进行排序的,另外三个是不通过比较进行排序的,他们分别是:基于比较排序的算法:冒泡、选择、插入、归并、快速、希尔、堆排序不基于比较的算法:计数排序,基数排序、桶排序对于这两大类算法那给我最直观的感觉是:基于比较的排序算法,受逆序对数量的影响,而不基于比较的排序算法则不受此影响这里先放一张各种排序原创 2021-02-20 14:29:20 · 468 阅读 · 0 评论 -
关于TreeMap你忽略了的那些
关于TreeMap你忽略了的那些什么是TreeMap呢? TreeMap,是从名字就可以看出来,是用树结构来实现Map映射的,它的底层实现用的是红黑树,从Java官方的TreeMap的部分代码就可以看得出来(有给节点染色):private void fixAfterDeletion(Entry<K,V> x)方法(用于恢复树的平衡):/** From CLR */ private void fixAfterDeletion(Entry<K,V> x) {原创 2021-01-01 19:21:59 · 178 阅读 · 0 评论 -
红黑树这样学才对!
红黑树竟然还能这样学?以前的感觉都白看了 红黑树其实并不神秘,如果你看过我上一篇文章,并且知道4阶B树的性质的话,那么我相信,通过本篇文章,你肯定能知道什么是红黑树。 为了能够将的更通俗易懂,所以分成两篇来讲,在上一篇文章中我大概介绍了一下树这一数据结构的发展历程,都是在为学习红黑树作为铺垫,这里有传送门:https://blog.csdn.net/weixin_44829930/article/details/111658813(强烈建议:在学红黑树之前需要掌握好这些内容)为什么要有红黑树?原创 2020-12-27 00:05:33 · 240 阅读 · 0 评论 -
二叉树、二叉搜索树、AVL树、B树、红黑树
二叉树、二叉搜索树、AVL树、B树、红黑树在开始之前,我想先说一下自己对于树的拙见: 在树出来之前,就有数组、链表、队列和栈了。它们各自都有比较明显的区别,比如说,数组大小不能改变、链表查询的时间复杂度为O(n)等,因为当前的这些数据结构以及不足以满足越来越高的要求,因此,才会出现树这一数据结构,但是树也随着人们对性能的要求不断的”进化“着:二叉树——> 二叉搜索树——> AVL树 ——> 红黑树,后面才出现的每一个树可能各方面都不是最好的,但是它的综合性能确实比较不错的,你可以将不原创 2020-12-25 00:06:13 · 445 阅读 · 2 评论 -
人人都看得懂的银行家算法——Java版
人人都看得懂的银行家算法——Java版概述关于银行家算法的基本概念就不罗列了,有点多,直接上代码。这是我优化过的,对新手比较友好代码看起来可能有点多,因为,为了能够方便大家能够看懂,我加了许多的注释,结构清晰,希望能对你们有所帮助,如果某些地方做的不是特别好,也希望你们能评论留言指出源码package bank;import java.util.Arrays;import java.util.Scanner;public class Bank { /** * 可原创 2020-12-07 23:58:32 · 244 阅读 · 0 评论 -
快速实现FCFS算法和SJF算法
快速实现FCFS算法和SPF算法先来看看代码的总体结构:在如上图的流程中,FCFS算法和SJF算法唯一的区别就是中间步骤的排序方法不同。因此,只需要替换代码中的排序方法即可。本程序中,默认是FCFS算法,如果需要SPF算法,可以将dequeue()方法中被注释的sortJcbsByServeTime()方法打开即可代码中的注释相对详细,有因为是早些时候写的,所以某些地方设计的不是特别好,还请理解代码JCB实体类:package fcfs;import java.text.Deci原创 2020-12-07 23:49:47 · 1091 阅读 · 0 评论