![](https://img-blog.csdnimg.cn/direct/69adfed281d647ab86f51034d554128d.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构/算法 C/C++
文章平均质量分 81
理解思想+背诵
禊月初三
且视他人之疑目如盏盏鬼火,大胆去走你的夜路。
展开
-
AVL树、红黑树
空二叉树是一个 AVL 树如果 T 是一棵 AVL 树,那么其左右子树也是 AVL 树,并且,h 是其左右子树的高度树高为平衡因子:右子树高度 - 左子树高度。原创 2024-05-14 19:05:18 · 1060 阅读 · 0 评论 -
二叉搜索树
如下:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其根节点的值。二叉搜索树的左右子树均为二叉搜索树。原创 2024-05-14 15:31:29 · 858 阅读 · 1 评论 -
贪心算法
贪心算法(greedy algorithm)一个贪心算法总是做出当前最好的选择,也就是说,它期望通过局部最优选择从而得到全局最优的解决方案。---贪心算法(greedy algorithm)是一种解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期获得全局最优解。原创 2024-04-06 18:08:43 · 3366 阅读 · 1 评论 -
动态规划问题
第i种物品最多有n[i]件可用,每件体积是v[i],价值是w[i]。给定一个数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子 将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。给定两个长度分别为 N 和 M 的字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。原创 2024-04-06 15:07:07 · 821 阅读 · 0 评论 -
容斥原理、简单博弈论
所谓采取最优策略是指,若在某一局面下存在某种行动,使得行动后对面面临必败局面,则优先采取该行动。在有向图游戏中,对于每个节点x,设从x出发共有k条有向边,分别到达节点y1, y2, …定义有向图游戏G,它的行动规则是任选某个有向图游戏Gi,并在Gi上行动一步。NIM博弈属于公平组合游戏,但城建的棋类游戏,比如围棋,就不是公平组合游戏。具体方法是,把每个局面看成图中的一个节点,并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。有向图游戏的某个局面必胜,当且仅当该局面对应节点的SG函数值大于0。原创 2024-03-28 20:09:33 · 902 阅读 · 0 评论 -
高斯消元、组合计数
2. 通过 C(a, b) = a!/ (a - b)!这个公式求出每个质因子的次数。中p的次数是 n / p + n / p^2 + n / p^3 + ...给定n个0和n个1,它们按照某种顺序排成长度为2n的序列,满足任意前缀中0的个数都不少于1的个数的序列的数量为: Cat(n) = C(2n, n) / (n + 1)首先预处理出所有阶乘取模的余数fact[N],以及所有阶乘取模的逆元infact[N]如果取模的数是质数,可以用费马小定理求逆元。1. 筛法求出范围内的所有质数。原创 2024-03-28 15:40:36 · 454 阅读 · 0 评论 -
欧拉函数、快速幂、扩展欧几里得算法、中国剩余定理
欧拉函数(Euler's totient function)是一个与正整数n相关的数论函数,通常用。求 m^k mod p,时间复杂度 O(logk)。原创 2024-03-27 20:55:17 · 263 阅读 · 0 评论 -
质数、约数
约数之和: (p1^0 + p1^1 + ... + p1^c1) * ... * (pk^0 + pk^1 + ... + pk^ck)约数个数: (c1 + 1) * (c2 + 1) * ... * (ck + 1)在大于1的整数中,如果只包含1和本身这两个约数,就被称为质数,或者叫素数。欧几里得算法,也称为辗转相除法,是一种求最大公约数(GCD)的有效算法。如果 N = p1^c1 * p2^c2 * ... *pk^ck。的倍数都被正确地标记为合数,且不会有重复的工作。原创 2024-03-27 18:59:16 · 314 阅读 · 0 评论 -
二分图
不要轻易放弃,最后悔的不是做错,而是错过。原创 2024-03-25 17:00:03 · 891 阅读 · 0 评论 -
最小生成树
生成树是原图的极小连通子图,包含图中所有的顶点,并且有保持图连通的最少的边。在这个定义中,“最小”是指树的所有边的权值之和最小。按照边的权重顺序(从小到大)选择边,确保选择的边不会与已经选择的边形成环,直到形成最小生成树。在一个加权无向连通图中,包含图中全部顶点的、权值之和最小的生成树。从图中的某一顶点开始,逐步增加新的边和顶点,直到形成最小生成树。859. Kruskal算法求最小生成树 - AcWing题库。858. Prim算法求最小生成树 - AcWing题库。: O(n^2+m), 用于稠密图。原创 2024-03-25 16:21:17 · 322 阅读 · 0 评论 -
最短路算法
(通俗的来讲就是:假设 1 号点到 n 号点是可达的,每一个点同时向指向的方向出发,更新相邻的点的最短距离,通过循环 n-1 次操作,若图中不存在负环,则 1 号点一定会到达 n 号点,若图中存在负环,则在 n-1 次松弛后一定还会更新)其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在 n-1 次松弛后还能更新,则说明图中有负环,因此无法得出结果,否则就完成。:如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。原创 2024-03-23 16:57:55 · 977 阅读 · 0 评论 -
拓扑排序
(DAG,Directed Acyclic Graph)的一种排序算法。在这种图中,从一个顶点出发,顺着有向边的关系,可以到达其他的顶点,但是图中不存在环,即不能回到出发点的路径。对于无向图中的边ab,存储两条有向边a->b, b->a。(1) 邻接矩阵:g[a][b] 存储边a->b。树是一种特殊的图,与图的存储方式相同。因此我们可以只考虑有向图的存储。原创 2024-03-23 15:34:30 · 314 阅读 · 0 评论 -
DFS与BFS
843. n-皇后问题 - AcWing题库。844. 走迷宫 - AcWing题库。原创 2024-03-21 19:39:07 · 434 阅读 · 0 评论 -
哈希表
哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。所谓以「key-value」形式存储数据,是指任意的键值 key 都唯一对应到内存中的某个位置。只需要输入查找的键值,就可以快速地找到其对应的 value。可以把哈希表理解为一种高级的数组,这种数组的下标可以是很大的整数,浮点数,字符串甚至结构体。原创 2024-03-20 19:40:00 · 814 阅读 · 0 评论 -
并查集
在大多数操作中,特别是经过路径压缩优化后,查找(Find)和合并(Union)操作的时间复杂度可以达到接近常数时间O(1) 或O(logn)。并查集是一种用于管理元素所属集合的数据结构,实现为一个森林,其中每棵树表示一个集合,树中的节点表示对应集合中的元素。:由于每个节点都需要维护一个指向父节点的指针,所以并查集的空间复杂度较高,为O(n)。原创 2024-03-17 15:25:37 · 364 阅读 · 0 评论 -
字典树 [Tire]
Trie 树是一种多叉树的结构,它的特点是所有的字符都存储在树的分支上,并且从根节点到某个叶节点的路径上的字符组成了一个字符串。1455. 检查单词是否为句中其他单词的前缀 - 力扣(LeetCode)字典树,英文名 trie。顾名思义,就是一个像字典一样的树。原创 2024-03-17 14:55:42 · 359 阅读 · 0 评论 -
KMP-字符串查找算法
问题:假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?即2层循环,太过复杂。原创 2024-03-15 18:29:07 · 1139 阅读 · 4 评论 -
双指针算法,位运算,离散化,区间合并
通过建立新索引,来缩小目标区间,使得可以进行一系列连续数组可以进行的操作比如二分,前缀和等…(2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作。在二进制补码表示下把数字同时向右移动,高位以符号补充,低位越界舍弃。在二进制补码表示下把数字同时向右移动,高位以0补充,低位越界舍弃。在二进制表示下把数字同时向左移动,高位越界舍弃,低位补0。二进制表示下只要有一位为 则为 ,否则为0。二进制表示下两位同时为 则为 ,否则为0。二进制表示下相应位不同则为 ,否则为0。原创 2024-03-12 15:23:42 · 863 阅读 · 3 评论 -
前缀和&差分
前缀和可以用于快速计算一个序列的区间和,也有很多问题里不是直接用前缀和,但是借用了前缀和的思想。给区间[l, r]中的每个数加上c:B[l] += c, B[r + 1] -= c。差分是前缀和的逆运算(a是b的差分,则b是a的前缀和),原创 2024-03-09 21:54:32 · 436 阅读 · 6 评论 -
数据结构/算法 C/C++
链表与邻接表:树与图的存储。栈与队列:单调队列、单调栈。二分图:染色法、匈牙利算法。树与图的遍历:拓扑排序。原创 2023-04-18 17:30:53 · 139 阅读 · 1 评论 -
排序
1.确定分界点 q[ l ] , q[ r ] , q[(l + r) / 2 ] (随机)1.确定分界点 mid = (l + r) / 2。2.递归排序 left , right。归并排序 - AcWing题库。快速排序 - AcWing。3.归并------合二为一。3.递归处理左右两边。原创 2023-04-18 19:51:21 · 108 阅读 · 5 评论 -
二分
本质:找到一个性质将数据步骤:红色部分:mid=(l+r+1)/2 (防止l与r仅相差1)绿色部分:mid=(l+r)/2题目789. 数的范围 - AcWing题库。原创 2023-10-31 19:40:03 · 84 阅读 · 2 评论 -
线性表(顺序表与链表)
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。1.无须为表中元素之间的逻辑关系而增加额外的存储空间。2.当线性表长度变化较大时,难以确定存储空间的容量。线性表(List):零个或多个数据元素的有限序列。826. 单链表 - AcWing题库。827. 双链表 - AcWing题库。2.可以快速地存取表中任意位置的元素。原创 2023-11-07 20:14:53 · 112 阅读 · 5 评论 -
栈与队列
只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。:栈的插入操作叫做进栈/压栈/入栈,:进行插入操作的一端称为队尾。:进行删除操作的一端称为队头。栈中的数据元素遵守后进先出。:栈的删除操作叫做出栈。原创 2023-11-14 17:08:31 · 100 阅读 · 8 评论 -
二叉树&堆
数据结构、算法总述:数据结构/基础算法 C/C++_禊月初三的博客-CSDN博客树(tree) 是n(n≥0)个节点的有限集。当n=0时,称为空树。在任意一个非空树中, 有如下特点:· 有且仅有一个特定的节点称为根节点· 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1原创 2023-11-20 20:27:43 · 117 阅读 · 5 评论