
算法
文章平均质量分 94
TechFlow
公众号:TechFlow
展开
-
codefroces中的病毒,这题有很深的trick,你能解开吗?
大家好,欢迎阅读周末codeforces专题。我们今天选择的问题是contest 1419的C题,目前有接近8000的人通过了本题。今天这题的难度不大,但是真的很考验思维,一不小心就会踩中陷阱,我个人觉得非常有意思,适合周末动动脑。题目链接:https://codeforces.com/contest/1419/problem/C题意有一个叫做Killjoy的特工发明了一种新型的冠状病毒叫做Convid-2069,专门在codeforces平台上传播。这种病毒通过rating传播,只要两个人的rat原创 2020-10-28 10:11:46 · 632 阅读 · 0 评论 -
面试不再慌,看完这篇保证让你写HashMap跟玩一样
今天这篇文章给大家讲讲hashmap,这个号称是所有Java工程师都会的数据结构。为什么说是所有Java工程师都会呢,因为很简单,他们不会这个找不到工作。几乎所有面试都会问,基本上已经成了标配了。在今天的这篇文章当中我们会揭开很多谜团。比如,为什么hashmap的get和put操作的复杂度是O(1)O(1)O(1),甚至比红黑树还要快?hashmap和hash算法究竟是什么关系?hashmap有哪些参数,这些参数分别是做什么用的?hashmap是线程安全的吗?我们怎么来维护hashmap的平衡呢?让我们原创 2020-10-24 09:34:44 · 235 阅读 · 0 评论 -
算法题 | 你能想出解法,让你的基友少氪金吗?
大家好,今天codeforces专题选择的是一场education比赛的C题。Education是codeforces的一种特殊赛事,它的主要作用是教育,也就是让更多的人了解codeforces的比赛机制。所以education赛事的题会相对来说容易一些,更加适合新手。我选的这道题虽然是C题,但是难度并不高非常基础。链接:https://codeforces.com/contest/1418/problem/C这题通过的人数有3600多,相比之前介绍的题算是比较少,但是题目难度其实更低一些。我们废话不原创 2020-10-21 10:18:31 · 304 阅读 · 0 评论 -
非典型算法题,用程序和电脑玩一个游戏
大家好,欢迎阅读周末算法题专题。今天选择的算法题是来自contest 1407比赛的C题,这题全场通过6700余人。通过的人数虽然多,但是这题真的不简单,想出算法来不太容易。抛开难度不提,这道题非常非常有意思,老实说这种形式的题目我也是第一次见。题目链接:https://codeforces.com/contest/1407/problem/C废话不多说,我们来看题目。题意这题是一道非典型的算法题,与其说是一道算法题不如说更像是一个游戏。游戏的目的是猜一个1至n这n个数构成的排列,我们需要通过输入原创 2020-10-19 10:03:14 · 223 阅读 · 0 评论 -
详解工程师不可不会的LRU缓存淘汰算法
大家好,欢迎大家来到算法数据结构专题,今天我们和大家聊一个非常常用的算法,叫做LRU。LRU的英文全称是Least Recently Used,也即最不经常使用。我们看着好像挺迷糊的,其实这个含义要结合缓存一起使用。对于工程而言,缓存是非常非常重要的机制,尤其是在当下的互联网应用环境当中,起到的作用非常重要。为了便于大家更好地理解,我们从缓存的机制开始说起。缓存缓存的英文是cache,最早其实指的是用于CPU和主存数据交互的。早年这块存储被称为高速缓存,最近已经听不到这个词了,不知道是不是淘汰了。因为原创 2020-10-14 10:07:17 · 438 阅读 · 0 评论 -
算法题 | 你追我,如果你追到我……那就算你赢了
大家好,欢迎阅读周末算法题专题。今天选择的算法题来源于昨天同一套题中的D题,这题全场通过的人数在2600人左右。虽然通过的人数更少了一些,但是题目的难度却并没有增加很多,但是趣味度增加了。我也是第一次遇见这样的问题。题目链接:https://codeforces.com/contest/1405/problem/D废话不多说,我们一起来看这题的题意。题意我们都知道数据结构当中的树有这样一个性质,如果树当中有n个点,那么它应该由n-1条无向边组成。并且树当中是一定没有环的,如果有环的话n-1条边就不原创 2020-10-09 10:15:24 · 398 阅读 · 0 评论 -
险些翻车,差一点没做出来的基础算法题
大家好,欢迎大家阅读周末算法题专题。今天我们选择的题目是codeforces 1405比赛的C题。题目链接:https://codeforces.com/contest/1405/problem/C这道题有6800多人通过,怎么看也不算是难题,但是我做了一上午都没能AC。最后又苦思冥想了很久,才最终做出来。做出来之后的第一感觉就是这道题太牛了,值得一说,算是那种谁都能看懂题意,都能想想办法,但是能做出来很不容易的问题。还是一如既往的codeforces赛题的风格,不严格考察算法,你做不出来大概率不原创 2020-10-08 10:08:07 · 293 阅读 · 0 评论 -
ACMer不得不会的线段树,究竟是种怎样的数据结构?
大家好,欢迎阅读算法数据结构专题,今天我们来聊聊一个新的数据结构,叫做线段树。线段树这个数据结构很多人可能会有点蒙,觉得没有听说过,但是它非常非常有名,尤其是在竞赛圈,可以说是竞赛圈的必备技能。所以如果以后遇到有人看了一点算法导论就在你面前装逼,你就可以问他:请问线段树更新的复杂度是多少?不过如果你会线段树,你也要小心一点,最好不要在面试的时候随便透露你会这个算法。否则面试官一下子就会知道你是圈里人,然后你会发现你后面的面试问题比之前好像难不少。当然也有可能遇到面试官自己不会,为了防止尴尬强行让你用非线原创 2020-10-05 10:15:37 · 501 阅读 · 0 评论 -
这道题codeforces的简单题差点做了我一下午,你能解出来吗?
大家好,今天周末算法专题选的问题是codeforces contest1400中的B题,RPG Protagonist,翻译过来就是RPG游戏当中主人公。看起来这个标题就很唬人,其实这也是codeforces的题目风格。这道题的链接是:https://codeforces.com/contest/1400/problem/B按照道理来说div2比赛当中的B题都不难,大概和LeetCode当中的Easy差不多,有时候要简单一些,有时候要难一些。一般来说属于大部分人都能做出来的题。但今天选的这道题有一点意外原创 2020-09-30 10:22:10 · 895 阅读 · 0 评论 -
全世界最强的算法平台codeforces究竟有什么魅力?
大家好,之前说过由于和LeetCode结了梁子,所以周末的LeetCode专题取消了,给大家写点其他专题的算法问题。目前选择的是国外著名的编程竞赛平台——codeforces。它在竞赛圈名气比较大,对于普通大学生而言可能了解不多。所以今天这篇文章简单和大家介绍一下codeforces这个网站,以及它的使用方法。链接:codeforces.comcodeforces简介简单介绍一下codeforces这个网站,codeforces位于宇宙编程最强的毛国。据说最早是由俄罗斯的一群大学生维护的,它最大的特点原创 2020-09-28 08:39:59 · 28176 阅读 · 1 评论 -
20行代码实现,使用Tarjan算法求解强连通分量
今天是算法数据结构专题的第36篇文章,我们一起来继续聊聊强连通分量分解的算法。在上一篇文章当中我们分享了强连通分量分解的一个经典算法Kosaraju算法,它的核心原理是通过将图翻转,以及两次递归来实现。今天介绍的算法名叫Tarjan,同样是一个很奇怪的名字,奇怪就对了,这也是以人名命名的。和Kosaraju算法比起来,它除了名字更好记之外,另外一个优点是它只需要一次递归,虽然算法的复杂度是一样的,但是常数要小一些。它的知名度也更高,在竞赛当中经常出现。先给大家提个醒,相比于Kosaraju算法,Tarj原创 2020-09-23 10:07:57 · 371 阅读 · 0 评论 -
算法数据结构 | 三个步骤完成强连通分量分解的Kosaraju算法
今天是算法数据结构专题的第35篇文章,我们来聊聊图论当中的强连通分量分解的Tarjan算法。Kosaraju算法一看这个名字很奇怪就可以猜到它也是一个根据人名起的算法,它的发明人是S. Rao Kosaraju,这是一个在图论当中非常著名的算法,可以用来拆分有向图当中的强连通分量。背景知识这里有两个关键词,一个是有向图,另外一个是强连通分量。有向图是它的使用范围,我们只能使用在有向图当中。对于无向图其实也存在强连通分量这个概念,但由于无向图的连通性非常强,只需要用一个集合维护就可以知道连通的情况,所以原创 2020-09-16 10:15:47 · 583 阅读 · 0 评论 -
10行实现最短路算法——Dijkstra
今天是算法数据结构专题的第34篇文章,我们来继续聊聊最短路算法。在上一篇文章当中我们讲解了bellman-ford算法和spfa算法,其中spfa算法是我个人比较常用的算法,比赛当中几乎没有用过其他的最短路算法。但是spfa也是有缺点的,我们之前说过它的复杂度是O(kE)O(kE)O(kE),这里的E是边的数量。但有的时候边的数量很多,E最多能够达到V2V^2V2,这会导致超时,所以我们会更换其他的算法。这里说的其他的算法就是Dijkstra。算法思想在上一篇文章当中我们曾经说过Bellman-for原创 2020-09-10 10:24:05 · 227 阅读 · 0 评论 -
算法专题 | 10行代码实现的最短路算法——Bellman-ford与SPFA
今天是算法数据结构专题的第33篇文章,我们一起来聊聊最短路问题。最短路问题也属于图论算法之一,解决的是在一张有向图当中点与点之间的最短距离问题。最短路算法有很多,比较常用的有bellman-ford、dijkstra、floyd、spfa等等。这些算法当中主要可以分成两个分支,其中一个是bellman-ford及其衍生出来的spfa,另外一个分支是dijkstra以及其优化版本。floyd复杂度比较高,一般不太常用。我们今天的文章介绍的是bellman-ford以及它的衍生版本spfa算法。图的存储原创 2020-09-04 10:57:27 · 339 阅读 · 0 评论 -
算法数据结构 | 图论基础算法——拓扑排序
今天是算法和数据结构专题的第32篇文章,我们来聊聊拓扑排序的问题。拓扑排序是图论当中一个非常简单也非常常用的算法,它有很多的功能。它可以用来检测有向图当中是否存在环,也可以用来解决存在依赖的调度问题。下面我们就来看看这个算法的庐山真面目吧。算法场景拓扑排序是英文音译,它的英文原文是Topological Sorting,是一个比较抽象的概念,没有很信达雅的翻译。它指的是一个DAG(Directed Acyclic Graph)即有向图所有顶点满足一定条件的线性序列。也就是说图中的这些顶点的排序之间原创 2020-08-27 12:10:31 · 391 阅读 · 0 评论 -
详解匈牙利算法与二分图匹配
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构专题的第31篇文章,我们一起来聊聊二分图匹配与匈牙利算法。在上一篇文章当中我们介绍了一个有趣的稳定婚姻问题,模拟了男男女女配对的婚恋场景,并且研究了一下让匹配更加稳定的Gale-Shapley算法。如果错过了这篇文章的同学可以从下方的传送门回顾一下婚姻稳定问题的具体内容。学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法在上一篇文章的末尾我们曾经提到过,婚姻匹配问题本质上来说其实是二分图匹配的问题。那么什么又是二分原创 2020-08-18 11:52:44 · 687 阅读 · 0 评论 -
学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法数据结构专题的第30篇文章,我们一起来聊聊一个有趣的婚姻匹配问题。这个问题是我学到的比较有趣的算法问题前几名了,也是当年我们ACM校队面向新生宣讲的时候选择的例题。我们觉得用找对象这种新生会比较感兴趣的问题来忽悠他们,他们上钩的可能性比较大XD。问题描述婚姻匹配也可以叫做CP匹配,问题的场景非常简单。我们模拟真实的婚恋匹配的场景,比如线下的N男 vs N女的相亲活动。很自然的,男生和女生都会对异性在心里有一个评价,觉得自己中意原创 2020-08-07 11:01:42 · 545 阅读 · 0 评论 -
LeetCode 87,远看是字符串其实是搜索,你能做出来吗?
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是LeetCode专题第54篇文章,我们一起来看LeetCode 87题,Scramble String(爬行字符串)。这题的官方难度是Hard,通过率33%,点赞506,反对702。看起来这题难度还可以,但是反对比点赞多,其实这题质量还不错,反对比较多我猜可能是因为题意稍稍有些复杂,理解起来不太容易,编码也偏难。但是这题如果是放在正式比赛中出现的话,都不叫事。下面我们来看下题意。题意这题的题目叫做爬取字符串,看起来有些费解,其实原创 2020-08-01 20:43:14 · 247 阅读 · 0 评论 -
算法数据结构 | 只要30行代码,实现快速匹配字符串的KMP算法
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法数据结构专题的第29篇文章,我们来聊一个新的字符串匹配算法——KMP。KMP这个名字不是视频播放器,更不是看毛片,它其实是由Knuth、Morris、Pratt这三个大牛名字的合称。老外很喜欢用人名来命名算法或者是定理,数学里就有一堆,什么高斯定理、欧拉函数什么的。但是中国人更倾向于从表意上来给一个概念命名,比如勾股定理、同余定理等等。之前觉得用人名命名很洋气,作者可以青史留名,后来想想这也是英文表意能力不足,很难用表意的方式起名的体原创 2020-07-29 11:07:00 · 267 阅读 · 0 评论 -
LeetCode 86 | 链表基础,一次遍历处理链表中所有符合条件的元素
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是LeetCode专题第53篇文章,我们一起来看LeetCode第86题,Partition List(链表归并)。本题的官方难度是Medium,点赞1276,反对296,通过率大约41%。总体来说,这题质量一般,通过率有点高,整体难度偏简单,算是一道链表的基础题。对链表熟悉一些的同学来说,问题不大。题意我们首先来看下题意,题意是说给定一个链表以及一个整数x,要求根据x来对链表中的元素进行归并,使得链表的前半部分的结果小于x,后半部原创 2020-07-23 11:58:00 · 271 阅读 · 0 评论 -
博弈论 | 详解搞定组合博弈问题的SG函数
本文始发于个人公众号:TechFlow,原创不易,求个关注今天这篇是算法与数据结构专题的第27篇文章,我们继续深入博弈论问题。今天我们要介绍博弈论当中非常重要的一个定理和函数,通过它我们可以解决许多看起来杂乱无章的博弈问题,使得我们可以轻松地解决一大类博弈问题。有了SG函数和SG定理,我们不再是单纯地通过构思、分析和找规律去解决问题了。并且我们之前学过的巴什博奕、威佐夫博弈以及Nim博弈都可以使用SG函数来解决,相当于我们找到了这一大类问题的通解。下面,我们来看几个基本定理和基本概念。基本定理原创 2020-07-08 11:24:43 · 660 阅读 · 0 评论 -
Pytorch | 详解Pytorch科学计算包——Tensor
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是Pytorch专题的第二篇,我们继续来了解一下Pytorch中Tensor的用法。上一篇文章当中我们简单介绍了一下如何创建一个Tensor,今天我们继续深入Tensor的其他用法。tensor操作size()和shape我们可以用size()函数或者直接调用tensor当中的shape属性获取一个tensor的大小,这两者是等价的,一般情况下我们用前者多一些。view我们可以通过view改变一个tensor的shap原创 2020-07-05 19:38:12 · 621 阅读 · 0 评论 -
LeetCode 81,在不满足二分的数组内使用二分法 II
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是LeetCode专题第50篇文章,我们来聊聊LeetCode中的81题Search in Rotated Sorted ArrayII。它的官方难度是Medium,点赞1251,反对470,通过率32.8%。从通过率上来看,这题属于Medium难度当中偏难一些的题目,也的确如此,稍稍有些考验思维。题意假设我们有一个含有重复元素的有序数组,我们随意选择一个位置将它分成两半,然后将这两个部分调换顺序拼接成一个新的数组。现在给定一个ta原创 2020-07-04 17:42:27 · 172 阅读 · 0 评论 -
博弈论Nim取子问题,困扰千年的问题一行代码解决
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构专题26篇文章,我们来看看一个新的博弈论模型——Nim取子问题。这个博弈问题非常古老,延续长度千年之久,一直到20世纪初才被哈佛大学的一个数学家找到解法,可见其思维的难度。但是这个问题本身却很有意思,推导的过程更是有趣,哪怕你没有多少数据基础也一定可以看明白。Nim取子问题这个问题的题面是这样的,我们有3堆石子,有A和B两个人轮流从其中的一堆取石子。规定每个人每次最少取1颗,最多可以取完当前堆,无法继续拿取石子的人落原创 2020-06-30 12:47:29 · 666 阅读 · 0 评论 -
博弈论——两人取子游戏与威佐夫博弈,隐藏在背后的黄金分割
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法和数据结构专题第25篇文章,我们继续博弈论专题。在上一篇文章当中我们了解了最简单的巴什博奕,今天我们来看看另一个经典的博弈模型——威佐夫博弈。博弈论和机器学习有些类似,数学家们针对场景进行建模,设计出了几个经典模型。然后我们在面临具体问题的时候,对问题进行深入分析,寻找最合适的模型应用来解决它。石子问题我们来看一道经典的例题,有两堆石子,有两个绝顶聪明的人在玩一个游戏。每次每个人可以从其中一堆石子当中取走任意数量的石子,或者是原创 2020-06-20 12:31:32 · 575 阅读 · 0 评论 -
只用一行代码就能搞定,博弈论究竟是什么神仙算法?
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构专题的第24篇文章,我们一起来聊聊有趣的博弈论问题。博弈论是一门很庞大的学科,它算是数学的一个分支,也和运筹学甚至是经济学有关。虽然它严格说起来并不是算法领域的内容,但是有不少关于博弈论有趣的算法和问题。关于博弈的相关理论从很早就已经有了雏形,但是正式构建理论成为一门学科是从计算机之父冯诺依曼开始的。从这点上来说也和计算机有点关系。今天我们来聊聊博弈论当中最简单的巴什博奕(Bash Game)。报数问题说到巴什博奕原创 2020-06-13 12:42:20 · 351 阅读 · 0 评论 -
一次找出范围内的所有素数,埃式筛法是什么神仙算法?
本文始发于个人公众号:TechFlow,原创不易,求个关注今天这篇是算法与数据结构专题的第23篇文章,我们继续数论相关的算法,来看看大名鼎鼎的埃式筛法。我们都知道在数学领域,素数非常重要,有海量的公式和研究关于素数,比如那个非常著名至今没有人解出来的哥德巴赫猜想。和数学领域一样,素数在信息领域也非常重要,有着大量的应用。举个简单的例子,很多安全加密算法也是利用的质数。我们想要利用素数去进行各种计算之前,总是要先找到素数。所以这就有了一个最简单也最不简单的问题,我们怎么样来寻找素数呢?判断素数寻原创 2020-06-07 09:44:09 · 584 阅读 · 0 评论 -
LeetCode 74,直击BAT经典面试题
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是LeetCode专题43篇文章,我们今天来看一下LeetCode当中的74题,搜索二维矩阵,search 2D Matrix。这题的官方难度是Medium,通过率是36%,和之前的题目不同,这题的点赞比非常高,1604个赞,154个反对。可见这题的质量还是很高的,事实上也的确如此,这题非常有意思。题意这题的题意也很简单,给定一个二维的数组matrix和一个整数target,这个数组当中的每一行和每一列都是递增的,并且还满足每一行的原创 2020-06-04 11:31:10 · 318 阅读 · 0 评论 -
从辗转相除法到求逆元,数论算法初体验
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法和数据结构专题的第22篇文章,我们一起来聊聊辗转相除法。辗转相除法又名欧几里得算法,是求最大公约数的一种算法,英文缩写是gcd。所以如果你在大牛的代码或者是书上看到gcd,要注意,这不是某某党,而是指的辗转相除法。在介绍这个算法之前,我们先来看下最大公约数问题。暴力解法这个问题应该很明确了,我们之前数学课上都有讲过。给我们纸笔让我们求都没有问题,分解因数找下共同的部分,很快就算出来了。但是用代码实现怎么做呢?用代码实现的话原创 2020-05-31 09:34:33 · 919 阅读 · 0 评论 -
动态规划经典教学题,上过《算导》的应该都会
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是LeetCode专题第41篇文章,我们一起来看一道经典的动态规划问题Edit Distance,编辑距离。今天这道题我本来是想跳过的,因为它实在是太经典了,属于典型的老掉牙问题了。但是想了想,一方面因为之前立了flag要把所有Medium和Hard写一遍,另一方面也是为了照顾萌新,所以还是把这题放上来了。相信上过算法导论这门课的同学一定都见过它,如果你没有上过属于萌新,那也没有关系,学习起来也不会很费劲的。编辑距离编辑距离非常经典原创 2020-05-28 11:19:09 · 420 阅读 · 0 评论 -
最小生成树的本质是什么?Prim算法道破天机
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法和数据结构专题20篇文章,我们继续最小生成树算法,来把它说完。在上一篇文章当中,我们主要学习了最小生成树的Kruskal算法。今天我们来学习一下Prim算法,来从另一个角度来理解一下这个问题。从边到点我们简单回顾一下Kruskal算法的原理,虽然上篇文章当中用了很多篇幅,但是原理非常简单。本质上就是我们对图中所有的边按照长度进行排序,之后我们按照顺序依次把它作为树的骨干,加入到树上来。在此过程当中,我们为了避免导致产生环,而原创 2020-05-15 09:37:29 · 445 阅读 · 0 评论 -
这是每个人都能看懂的最小生成树文章(Kruskal)
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法和数据结构专题的第19篇文章,我们一起来看看最小生成树。我们先不讲算法的原理,也不讲一些七七八八的概念,因为对于初学者来说,看到这些术语和概念往往会很头疼。头疼也是正常的,因为无端突然出现这么多信息,都不知道它们是怎么来的,也不知道这些信息有什么用,自然就会觉得头疼。这也是很多人学习算法热情很高,但是最后又被劝退的原因。我...原创 2020-05-07 20:30:15 · 344 阅读 · 0 评论 -
用二分法优化动态规划——实现快速决策
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构专题的17篇文章,也是动态规划专题的第6篇。今天我们一起来看一道非常经典的动态规划的问题,有多经典呢?我想了一下,大概是我这辈子做的最早的一道动态规划问题,以至于我现在都记得它的题面。题面这道题就是导弹拦截系统,说是某一个国家开发了一套导弹拦截系统,这个拦截系统可以拦截敌国打来的导弹。不同射程的导弹在弹射出去的...原创 2020-04-23 21:08:24 · 524 阅读 · 0 评论 -
详解状态压缩动态规划算法
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构专题的第16篇,也是动态规划系列的第5篇。今天文章的内容是动态规划当中非常常见的一个分支——状态压缩动态规划,很多人对于状态压缩畏惧如虎,但其实并没有那么难,希望我今天的文章能带你们学到这个经典的应用。二进制表示状态在讲解多重背包问题的时候,我们曾经讲过二进制表示法来解决多重背包。利用二进制的性质,将多个物品拆...原创 2020-04-16 20:06:49 · 2243 阅读 · 0 评论 -
动态规划与数据结构的结合——树形DP
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构的第15篇,也是动态规划系列的第4篇。之前的几篇文章当中一直在聊背包问题,不知道大家有没有觉得有些腻味了。虽然经典的文章当中背包一共有九讲,但除了竞赛选手,我们能理解到单调优化就已经非常出色了。像是带有依赖的背包问题,和混合背包问题,有些剑走偏锋,所以这里不多做分享。如果大家感兴趣可以自行百度背包九讲查看,今天我们...原创 2020-04-09 11:44:54 · 465 阅读 · 1 评论 -
动态规划入门——多重背包与单调优化
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是算法与数据结构的第14篇文章,也是动态规划专题的第三篇。在之前的文章当中,我们介绍了多重背包的二进制拆分的解法。在大多数情况下,这种解法已经足够了,但是如果碰到极端的出题人可能还是会被卡时间。这个时候只能用更加快速的方法,也就是今天我们要一起来看的单调优化。单调优化是单调队列优化的简称,单调栈我们在之前的LeetCode专题已...原创 2020-04-02 09:14:03 · 338 阅读 · 0 评论 -
动态规划——详解经典的完全背包与多重背包问题
今天是算法数据结构专题的第13篇文章,也是动态规划专题的第二篇。上一讲当中我们一起学习了动态规划算法中的零一背包问题,我们知道了所谓的零一背包是指每一种物品只有一个,所以它的状态只有0和1两种,即拿或者不拿。而今天我们要来讨论物品不止有一个的情况,物品不止有一个也分两种,一种是不作任何限制,要多少有多少,这种称为完全背包问题,另一种是依然有个数限制,这种称为多重背包问题。我们一个一个来看,我...原创 2020-03-26 08:37:02 · 1617 阅读 · 0 评论 -
动态规划入门——详解经典问题零一背包
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是周三算法与数据结构专题的第12篇文章,动态规划之零一背包问题。在之前的文章当中,我们一起探讨了二分、贪心、排序和搜索算法,今天我们来看另一个非常经典的算法——动态规划。在acm-icpc竞赛领域,动态规划是一个非常大的范畴,当中包含了许多变种,而且很多变种难度极大。比如在各种树上和图上以及其他数据结构上做动态规划,这会使得问题...原创 2020-03-19 08:47:46 · 716 阅读 · 0 评论 -
LeetCode专题——详解搜索算法中的搜索策略和剪枝
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是LeetCode专题第20篇文章,今天讨论的是数字组合问题。描述给定一个int类型的候选集,和一个int类型的target,要求返回所有的数字组合,使得组合内所有数字的和刚好等于target。注意:所有的元素都是正数所有元素没有重复答案不能有重复每一个元素可以使用若干次样例 1:Input: candida...原创 2020-03-15 11:09:55 · 569 阅读 · 0 评论 -
硬核数据结构,让你从B树详解B+树
本文始发于个人公众号:TechFlow,原创不易,求个关注今天是分布式系统的第八篇文章,核心内容是B+树的原理。今天的文章是上周B树的延伸,所以新关注的或者是有所遗忘的同学建议先从下方链接回顾之前的内容。硬核挑战——从零开始动手图解B树B+树的特性B+树和B树一样都是多路平衡树,也叫多叉树。两者的性质也基本一致,在具体来看详细内容之前,我们先来总体看下B+树的特性,先有个大概的印象。...原创 2020-03-14 08:59:20 · 425 阅读 · 0 评论