摘要:一、暴力匹配算法 Brute Force 定义两个概念,分别是主串和模式串。 比方说,我们在字符串 A 中查找字符串 B,那字符串 A 就是主串,字符串 B 就是模式串。我们把主串的长度记作 n,模式串的长度记作 m。因为我们是在主串中查找模式串,所以 n>m。 最简单、最暴力的字符串匹配算法,BF
阅读全文
摘要:一、图的概念 二、图的存储 2.1、邻接矩阵 2.2、邻接表 2.3、hash分片存储顶点关系 2.4、关系数据库存储顶点关系 三、图的遍历和搜索 3.1、广度优先搜素-邻接表 3.1.1代码 public class BFS { /** * 图的顶点个数 */ private int v; /**
阅读全文
摘要:一、概念 二、双栈 三、栈 4.1、栈-队列的实现方式 public class ArrayStack<T> { /** * topIndex=0,作为1个栈空的判断临界条件 * topIndex=1,表示放入栈中的第一个元素的位置 */ private int topIndex; private
阅读全文
摘要:1、什么是数据结 2、研究的问题 3、算法分析
阅读全文
摘要:你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。
阅读全文
摘要:转载:https://blog.csdn.net/m0_37477061/article/details/95313062 一、令牌桶和漏桶算法区别 漏桶算法与令牌桶算法在表面看起来类似,很容易将两者混淆。但事实上,这两者具有截然不同的特性,且为不同的目的而使用。 漏桶算法与令牌桶算法的区别在于:
阅读全文
摘要:一、paxos的流程图(https://zh.wikipedia.org/zh-cn/Paxos%E7%AE%97%E6%B3%95) 1、算法的提出和证明 首先将议员的角色分为 proposers,acceptors,和 learners(允许身兼数职)。proposers 提出提案,提案信息包括
阅读全文
摘要:https://zhuanlan.zhihu.com/p/264367144
阅读全文
摘要:一、平均分片算法 应用场景:分布式调度系统,对任务和资源进行匹配和分配的算法。 例如:服务有10台机器资源,任务量是20,将任务量分配给这10台机器,进行任务量处理。 public class SplitTask { /** * 打印结果: * * 分片总数:20 * 资源=[ip2] 的分片数=[
阅读全文
摘要:一、线性排序概念 三种时间复杂度是 O(n) 的排序算法:桶排序、计数排序、基数排序。 排序算法的时间复杂度是线性的,所以我们把这类排序算法叫作线性排序(Linear sort)。 能做到线性的时间复杂度,主要原因是,这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作。 桶排序,计数排序,
阅读全文
摘要:分治思想跟我们前面讲的递归思想很像。是的,分治算法一般都是用递归来实现的。分治是一种解决问题的处理思想,递归是一种编程技巧 一、归并排序 1、归并排序的原理 2、归并排序的分析 是否是稳定排序:在合并数组的环节,当左右数组的元素相同时,优先放左侧元素到合并数组中,则为稳定排序算法。 空间复杂度:O(
阅读全文
摘要:算法过程动态图:https://visualgo.net/ 一、排序算法对比 二、如何衡量排序算法 1、排序算法的执行效率 最好情况、最坏情况、平均情况时间复杂度。(依赖-数据的有序性) 时间复杂度的系数、常数 、低阶。(在同一级别数据量时,衡量,就需要把系统,常数,低阶数据考虑在内) 比较次数和交
阅读全文
摘要:一、权重算法 /** * * @param groupConfigMap * key是要选择的对象 * value是这个对象的权重 * @return */ public static Long calculateGroupConfigId(Map<Long, Long> groupConfigMa
阅读全文
摘要:一、递归的含义 1、递归案例 周末你带着女朋友去电影院看电影,女朋友问你,咱们现在坐在第几排啊?电影院里面太黑了,看不清,没法数,现在你怎么办?别忘了你是程序员,这个可难不倒你,递归就开始排上用场了。于是你就问前面一排的人他是第几排,你想只要在他的数字上加一,就知道自己在哪一排了。但是,前面的人也看
阅读全文
摘要:一、概念 先进者先出,这就是典型的“队列”。 二、队列和栈 队列跟栈一样,也是一种操作受限的线性表数据结构。 三、队列的种类和队列的实现 顺序队列:用数组实现的队列 (代码实现的关键点:确定好队空和队满的判定条件) 当前队列中的数据为: 队头>h->i->j->队尾 向队列中依次添加a,b元素后,队
阅读全文
摘要:一、概念 栈是一种“操作受限”的线性表 当某个数据集合只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,我们就应该首选“栈”这种数据结构。 二、栈的类型 栈既可以用数组来实现,也可以用链表来实现。 顺序栈:用数组实现的栈 链式栈:用链表实现的栈 三、时间和空间复杂度 时间复杂度 入栈:O
阅读全文
摘要:一、为什么学习链表数据结构 经典的链表应用场景,那就是 LRU 缓存淘汰算法 二、链表的数据结构 1、单向链表 2、单向循环链表 3、双向链表 4、双向循环链表 三、链表的数据特点及和数组对比 1、链表的数据结构的特点 不支持像数组一样随机访问,查找数据的时间复杂度为O(n) 插入和删除操作,不像数
阅读全文
摘要:一、数组的概念 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。 1、线性表:线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向 2、连续的内存空间和相同类型的数据:正是因为这两个限制,它才有了一个堪称“杀手锏”的特性:“随机
阅读全文
摘要:一、为什么要进行时间空间复杂度分析 1、数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。只要讲到数据结构与算法,就一定离不开时间、空间复杂度分析。 2、事后统计法的局限性 测试结果非常依赖测试环境(软硬件的计
阅读全文