基础算法与基础数据结构
文章平均质量分 94
本专栏涉及的所有代码均只适用于算法竞赛以及算法题,并不适合于工程化的项目。如对工程化项目有需求,可以参考本人的思路,并自己通过理解算法实现工程化代码。
HuaweiMian_
C/C++/Python/机器学习/数学建模 欢迎交流!
展开
-
【贪心】区间问题:选点、分组、覆盖以及最大不相交数量
本文介绍贪心问题中的几种区间问题原创 2023-07-30 15:43:43 · 382 阅读 · 0 评论 -
【记忆化搜索】滑雪
本文讲解记忆化搜索问题:滑雪原创 2023-07-29 11:51:58 · 60 阅读 · 0 评论 -
【树型dp】没有上司的舞会
本文介绍树型dp,以及讲解例题:没有上司的舞会原创 2023-07-29 11:12:01 · 50 阅读 · 0 评论 -
【状态压缩dp】蒙德里安的梦想、最短Hamiltona路径
本文介绍状态压缩dp,并讲解两道例题:蒙德里安的梦想、最短Hamilton路径原创 2023-07-29 10:13:05 · 113 阅读 · 2 评论 -
【数位统计dp】计数问题
本文讲解计数问题原创 2023-07-29 16:59:13 · 174 阅读 · 0 评论 -
【动态规划】线性dp、区间dp
本文介绍dp问题中的线性dp和区间dp原创 2023-07-27 11:32:17 · 167 阅读 · 1 评论 -
【动态规划】背包问题详解
本文介绍动态规划中的背包问题原创 2023-07-26 11:34:01 · 1051 阅读 · 1 评论 -
【博弈论】从Nim游戏到SG函数
本文介绍博弈论中的Nim游戏以及博弈论中重要的解题方法:SG函数原创 2023-08-10 21:03:31 · 156 阅读 · 0 评论 -
【求组合数】各种组合数 卡特兰数
本文介绍组合数的各类求法以及组合数的重要应用——卡特兰数原创 2023-08-10 15:13:59 · 159 阅读 · 0 评论 -
【简单数论】求乘法逆元
本文介绍如何求解乘法逆元原创 2023-08-08 16:49:36 · 107 阅读 · 0 评论 -
【简单数论】欧拉函数、快速幂、扩展欧几里得算法
本文介绍欧拉函数、快速幂以及扩展欧几里得算法原创 2023-07-24 12:30:00 · 168 阅读 · 0 评论 -
【简单数论】质数和约数
本文主要介绍简单数论中质数和约数的相关题目原创 2023-07-22 16:19:31 · 206 阅读 · 0 评论 -
C++:染色法判定二分图及匈牙利算法
本文介绍染色法判断二分图以及匈牙利算法原创 2023-07-21 10:49:19 · 207 阅读 · 1 评论 -
C++:【算法】最小生成树问题
在图论问题中有这样一类问题:就是问题(适用于无向图)。简单来说,就是。针对这类问题的不同情况,有三种解决方法:简要说明以下,n为点数,m为边数。很显然,,而。但是由于堆优化Prim太复杂且其时间复杂度和Kruskal一样,所以来解决。因此这里对于堆优化的Prim就不做讲解了。下面重点说说朴素Prim和Kruskal。原创 2023-07-20 22:26:08 · 383 阅读 · 0 评论 -
C++:【算法】最短路问题
在图论问题中,最短路算法是一个典型且很常用的算法。面对不同的情况,要选择不同的算法。本文。下面给出一个思维导图:算法并不难,问题的关键在于建图,这个需要做题积累经验。下面只给出算法的基本实现,还需各位同学多多做题。原创 2023-07-19 17:14:45 · 503 阅读 · 0 评论 -
C++:用邻接矩阵和邻接表存图
邻接矩阵和邻接表是非常常用的存图的方式,所以有必要浅浅地说一下这两种方式是怎么实现的。此外,还有一些更加高级的方法,比如链式前向星,但是这里只针对基础且最常用的方法,感兴趣的同学可以自行查阅。原创 2023-07-19 22:45:16 · 163 阅读 · 0 评论 -
C++:【搜索】深度优先搜索与广度优先搜索
简单来说,dfs就是从图的某一个点开始,沿着一条路走到黑,不撞南墙不回头。在走到尽头的时候,再返回搜索下一条路。举个简单的例子:这乍一看好像是一个树,但是其实大部分图都是错综复杂的,树只是一种特殊的图,因为举例子比较方便,所以就先用树状图举例子了。dfs从1号点开始,假设从最左边这条边开始搜索,那么要搜索到末端,也就是:然后就要回头了,那么回到哪里呢?回到离他最近的一个有岔路的点,并从那条岔路一直搜索到末端。也就是:以此类推,直到所有点都被搜索过,也就是出发点的所有出边都被搜索过了。原创 2023-07-17 22:29:18 · 1703 阅读 · 3 评论 -
C++:【数据结构】哈希表
哈希表(hash table)又叫散列表,是一种很实用的数据结构。首先来看一下百度给出的定义:散列表,是。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。通俗一点来说,就是我们有一堆值,他们的范围很大,但是又很分散,直接存储本身的话会非常占地方,所以我们就把它,这样不但节省了空间,而且还方便查找。原创 2023-05-30 17:33:39 · 1991 阅读 · 2 评论 -
C++:【数据结构】模拟堆
全部down一遍就好,注意是。原创 2023-05-18 17:42:54 · 614 阅读 · 1 评论 -
C++:【数据结构】trie树
这篇文章来介绍一个比较重要的数据结构:字典树(TrieTree)。其中 trie 一词来自于英语单词 retrieval 【检索】。原创 2023-05-13 00:55:06 · 603 阅读 · 2 评论 -
C++:KMP字符串详解
kmp算法(Knuth-Morris-Pratt算法)是一种算法,可以在O(m+n)的时间复杂度内实现两个字符串的匹配。下面谈谈个人对于kmp算法浅陋的理解。原创 2023-05-06 23:06:57 · 606 阅读 · 14 评论 -
C++:【数据结构】并查集
那么首先想到的暴力做法就是,开一个数组,让在一个集合中的数都等于相同的值。但是这样做的话,假设有一万个点在集合1里,有两万个点在集合2里,要合并的话,首先要遍历一遍全部数组,把所有在集合1里的点挑出来,然后再让他们等于集合2的值,这样显然是十分愚蠢的。因为找到一个点的根节点是需要递归上去的,越摞越高的话,查询的时间复杂度会非常高。,将编号为 a 和 b 的两个数所在的集合合并,如果两个数已经在同一个集合中,则忽略这个操作。,可以执行合并集合,查询两个数是否在一个集合中,以及可能还有一些其他奇怪的操作。原创 2023-07-21 12:24:31 · 107 阅读 · 1 评论 -
C++:单调栈和单调队列及其应用
栈和队列是两个很重要的数据结构。其中单调栈和单调队列是栈和队列的“特别版”。下面就来介绍一下单调栈和单调队列以及它们可能的用处。原创 2023-05-11 18:09:53 · 613 阅读 · 6 评论 -
C++:【数据结构】用数组实现的单链表和双向链表
链表是程序设计中一种十分重要的数据结构。正如它的名字一样,它是一个“链状”的数据结构。如下图所示:其中每个节点都可以保存数据,同时每个节点又有一个指针指向下一个节点,来形成链状结构。那么这时候就会有人要说了,这不就是数组吗。其实不然,它和数组各有优缺点。数组就是一串连续的存储单元,而链表不一定是连续的存储单元。数组的优点就是可以很快的访问到某个元素,因为只需要给数组名取下标,就可以访问到某个元素了;但是链表要访问一个元素,需要从头节点开始往后找,越接近链表尾的元素访问的越慢。但是链表可以。原创 2023-05-25 22:55:39 · 1004 阅读 · 3 评论