数据结构与算法
文章平均质量分 81
本专栏重在介绍自己在学习数据结构与算法中遇到的难点,并不是笼统的讲述数据结构的概念。由于水平有限,文章可能会有一些瑕疵,欢迎广大博友批评指正。
听到微笑
这个作者很懒,什么都没留下…
展开
-
布隆过滤器在缓存系统中的实践
一. 背景在业务开发中,在并发量很高的情况下,通常会使用缓存对系统查询性能进行优化,在缓存命中率很高的情况下,缓存的使用能够大幅提升系统查询性能。但是在缓存命中率非常低场景下,如果采用传统缓存读取模式,大部分的请求会穿透至数据库,造成数据库的巨大压力。例如:最近上线一个“贵族”功能,由于贵族价格比较贵,拥有比较强的特权,该功能也主要面向平台头部大R用户,所以如果采用传统的缓存模式,查询一个用户的贵族信息就会大概率出现缓存无法命中去读库的情况。有些同学可能会将“空结果”缓存至数据库,这样下次去查询该用户原创 2022-04-03 13:59:02 · 1581 阅读 · 0 评论 -
一文详解编辑距离(Levenshtein Distance)
更多博文请关注:https://blog.bigcoder.cn一. 什么是Levenshtein DistanceLevenshtein Distance,一般称为编辑距离(Edit Distance,Levenshtein Distance只是编辑距离的其中一种)或者莱文斯坦距离,算法概念是俄罗斯科学家弗拉基米尔·莱文斯坦(Levenshtein · Vladimir I)在1965年提出。此算法的概念很简单:Levenshtein Distance指两个字串之间,由一个转换成另一个所需的最少编.原创 2021-04-17 22:25:31 · 20967 阅读 · 2 评论 -
最长回文子串-动态规划
博主最新博文,请关注:听到微笑的博客给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”LeetCode:最长回文子串 - 力扣(LeetCode) (leetcode-cn.com)一. 思路分析对于一个子串而言,如果它是回文串,并且长度大于 2原创 2021-03-20 18:05:13 · 2236 阅读 · 7 评论 -
什么是Base64算法
HTTP是超文本传输协议,所以HTTP协议中请求、相应都是以ASCII字符方式传输,如果要传输二进制需要经过BASE64或MIME等编码(因为HTTP协议pop3、smtp邮件协议都是针对文本的,而FTP支持传输二进制数据,即不需要经过编码转换成字符型数据)HTTP传输字节流时为什么会用Base64编码可能很多人不明白,为什么在进行HTTP传输时二进制数据时,需要将字节流进行Base64编码呢...原创 2019-12-22 12:04:42 · 399 阅读 · 0 评论 -
优先队列(PriorityQueue)
概念普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。通常采用堆数据结构来实现。优先队列的实现:优先队列通常用堆来实现。因为通常所说的二叉堆(堆分为很多种:二叉堆,斐波拉契堆,严格斐波拉契堆等)每次插入或删除元素都...原创 2019-04-26 10:38:27 · 1051 阅读 · 0 评论 -
求一个集合的所有子集
题目描述求一个集合的所有结合,例如集合{A,B,C}的所有子集为:{},{A,B,C},{A,B},{A,C},{B,C},{A},{B},{C}。思路实际上求子集问题是一个经典的DFS,每一次选择某个元素时,都会面临两个选择,一个是不选一个是选:第一步:选择A元素,有两种选择,一个是选A,另一个是不选A第二步,选择B,还是有两种选择第三步:选择C,同样有两种选择...原创 2019-03-20 18:33:15 · 3402 阅读 · 0 评论 -
第七届蓝桥杯:剪邮票
题目题目:剪邮票如【图1.jpg】, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。请填写表示方案数目的整数。注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。解题思路我们可以...原创 2019-03-20 18:15:03 · 213 阅读 · 0 评论 -
一篇文章弄懂——桶排序
概述上一篇我们学习了堆排序,今天我们来研究一下桶排序,桶排序的思想中也是将排序问题小型化,然后达到排序的目的。在我看来桶排序就是对插入排序的一种优化。桶排序的思路相比与生涩难懂的代码,图解的方式来描述问题是一个非常好的方法,直观的图片永远会比抽象的代码更容易理解。话不多说直接上图:我们给出一个长度为10的待排序数组,以及4个桶:我们分别给4个桶编号:我们规定:0...原创 2019-03-05 17:10:37 · 2158 阅读 · 1 评论 -
一篇文章弄懂——基数排序
基数排序(radix sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。基数排序思路我们先给出一个待排序数组,和10个桶(桶从0开始编号):我们需要依次将数组中取出来,分别放入10个桶中,入桶的规则:在第一回合中将数组元素按照个位上的值与“桶”号对应,进行入桶操作,例如:12,22,32,42,52这些...原创 2019-03-07 20:08:56 · 378 阅读 · 0 评论 -
一篇文章弄懂——堆排序
概述堆排序是我们常说的十大排序算法中的一种,堆排序也是数据结构中比较重要的一个知识点,我们今天就来好好探究一下堆排序。在说堆排序之前,我们就必须先明白什么是二叉堆,因为堆排序就是在二叉堆的基础上完成的。什么是二叉堆话不多说直接上图:仔细观察上图的特点:1. 二叉堆是一颗完全二叉树。2. 二叉堆中父节点的值总是大于获等于(大顶堆)任何一个孩子节点的值。3. 每一个...原创 2019-03-04 20:30:16 · 312 阅读 · 0 评论 -
全排列的递归实现
概述全排列在很多竞赛题中会经常用到,因为只有枚举出数组中元素的所有可能的组合情况,才能进行题目的下一步操作,那么这篇文章就用递归的思想来实现全排列。首先我们先举一个最简单的全排列的例子,给出数组{1,2,3},那么这个数组的全排列就有6种情况:{1,2,3} {1,3,2} {2,1,3} {2,3,1} {3,1,2} {3,2,1}通过递归可以轻松的实现全排列。全排列...原创 2019-03-04 14:58:35 · 415 阅读 · 0 评论 -
四连通图的检测
题目给定一个方阵,定义连通性:上下左右相邻,并且值相同。可以想象一张地图,不同的区域被染成了不同的颜色。现在我们需要判断图中任意两点是否在同一个连通区间中。输入:整数N(N<50),代表矩阵的行列数输入N行,每行N个字符,代表矩阵中的元素输入一个整数M(M<1000)表示询问次数输入M行每行代表一个询问,格式为4个整数x1 y1 x2 y2,代表需要检测的点...原创 2019-02-16 12:25:05 · 3104 阅读 · 2 评论 -
树的层次遍历
二叉树的前序、中序、后序遍历我想大家应该都很熟悉了,那我们今天就来讲一下二叉树的层次遍历。二叉树的前序、中序、后序遍历需要用到栈(递归的过程也就是一个栈),层次遍历需要借助队列这个数据结构。层次遍历的思路我们给出一个二叉树:这棵二叉树的层次遍历次序为:A、B、C、D、F、G以人的思维来看层次遍历貌似比前、中、后序遍历更加简单易懂,但是程序到底如何实现这样的效果呢...原创 2019-02-15 14:44:47 · 44288 阅读 · 7 评论 -
最小生成树Kruskal算法的实现原理
到底什么是最小生成树最小生成树算法应用范围比较广,例如在网络的铺设当中难免会出现环路,需要要生成树算法来取出网络中的环,防止网络风暴的发生。那到底什么是最小生成树呢?我这里就不给严谨的定义了,这种定义网上一搜一大堆,但是往往严谨的定义都不太容易理解。下面我就给出一个更容易理解的定义。在理解“最小生成树”之前,我们需要理解什么是“生成树”。生成树的概念:在一个连通图中取出这个图的全部顶点...原创 2019-01-21 15:40:24 · 1965 阅读 · 1 评论 -
拓扑排序实现思路分析
了解拓扑排序看到这篇文章的博友可能已经对拓扑排序有了一定的了解,但是在这里我们还是需要明确一下什么是拓扑排序。拓扑排序的严谨定义网上一搜一大堆,我就不copy了,我总结几点拓扑排序的特点:1. 拓扑排序是建立在有向无环图(DAG)的基础上的。2.拓扑排序就是将DAG以线性方式进行排序。即对任何顶点U到顶点V的有向边U->V,在最后的排序结果中,顶点U总是在顶点V的前面。这样...原创 2019-01-19 16:47:26 · 1103 阅读 · 1 评论 -
平衡二叉树(AVL)插入结点后的再平衡思路
理解平衡二叉树在解决平衡二叉树动平衡问题,我们先来明确什么是平衡二叉树:平衡二叉树是二叉搜索树的一种特殊情况,所以在二叉搜索树的基础上加上了如下定义:平衡因子:我们将二叉树中各个结点的左右子树的高度差称为该节点的平衡因子。平衡二叉树:就是在二叉搜索树的基础上,所有结点的平衡因子都小于等于一。则称该树为一颗平衡二叉树。当然平衡二叉树有很多实现方案,例如:AVL、红黑树等。这篇文章...原创 2019-01-11 16:25:15 · 7327 阅读 · 2 评论