- 博客(23)
- 收藏
- 关注
原创 集合|并查集|哈希
孔子说:“不发奋图强时,就不启发他,不到他想说却说不出来时候,不去启发他。我们可以使用一种贪心的思维,首先使得权值最大的边不成立,然后使得权值第二大的边不成立。有的时候,我们并不关心一些数据他们的关系具体怎样,我们只是关心他们是不是一伙的。但是取了模之后,就会产生新的问题,就是虽然字符串不同,但是最后的数值确实相同的。我们使用字符串hash,是通过表示数的角度,也就是进制的角度。实际上我们的算法就是通过进制的思想,利用运算的技巧完善的。但是,我们的数字可能特别大,所以我们考虑取模的问题。
2024-08-25 21:59:35 834
原创 概率|期望|程序设计
期望在有些时候比较难以用逻辑直接推导,我们用更语言化的形式表述,但依然保持严谨。我们可以使用代数变形,使用前缀和,或者数据结构维护转移。
2024-05-14 23:07:00 185
原创 概率|记忆化搜索
记忆化搜索用在转移关系难以确定的转移上。本道题的状态定义是比较难以想到的,但是也是有预兆的。因为编号特别小。也是决策/随机模型的一种,怎样在随机中最优化决策,随机是怎样和决策分割开的。
2024-05-08 23:38:49 165 1
原创 概率论|期望|背包问题|动态规划
概率论广泛应用于程序设计本文讲解如下的知识:为了使得概率事件和状态相适应,优化状态转移方程。使用前缀和记录,加快转移。进行某项转移时候,特殊记录。类似指示器随机变量一样,需要增量的期望。求解高次方的期望等等。
2024-05-05 22:18:54 354 2
原创 区间dp|动态规划
区间这个词是中国人取的名字,意味着动态转移之间是在区间内的。但是为什么在这些区间,状态的定义,转移的合并都是我们要考虑的问题。
2024-04-30 23:04:36 141
原创 指示器随机变量|概率论|程序设计
本文讲述了指示器随机变量,和它在程序上的应用。我们需要做出这样的步骤。1构造指示器随机变量,表现出和式的形式。2利用期望的线性性质,将期望变成概率。3求解出某事发生的概率。
2024-04-26 23:38:25 121 1
原创 期望|概率|程序设计
本文讲述了概率论的知识,需要用到条件概率,全期望公式,基本的代数变形,和式的变换,期望的线性性质,贡献思想,前缀和思想,递推。
2024-04-25 23:37:53 167 1
原创 矛盾|程序设计
矛盾,它反映了事物之间的相互作用、相互影响的一种特殊状态。本文讲述了两个信息之间怎样引发矛盾,利用并查集或者前缀等方法,快速找出矛盾。1从认识上看,具有怎样特征是矛盾的?2从实践上看,在程序上怎样会表现出矛盾。3如果不是矛盾的,如何处理?
2024-04-24 23:20:22 776
原创 递归问题|汉诺塔|数学归纳法
本文讲述了递归文章中的汉诺塔问题。我们需要注意如何拆解成为一个更小的问题。构造汉诺塔的最优策略以及最小步骤。通过一种错误的归纳证明强化数学归纳法的理解。使用一种格雷码的状态存储汉诺塔的状态,并且分析移动过程中的性质。什么是递归,每个问题的解都依赖于同一问题的更小实例的解。
2024-04-21 22:31:34 428 1
原创 有环动态规划
一个无向图,节点1有一个炸弹,在每个单位时间内,有p/q的概率在这个节点炸掉,有1-p/q的概率随机选择一条出去的路到其他的节点上。不是不可以,而是因为是有限的动态规划,我们需要的是无限动态规划。可能是直接特判环,或者代数结构,转换为线性代数问题。我们通过查找一个算法,看这个算法是否再次被访问过。概率通常是无限次独立重复试验的事件发生的对应概率。也就是在我们的方程式中,p,q,d都是整数,而这样的线性方程组,只需要通过高斯消元完成。在动态规划中,可能会有产生环的情况。这个时候,需要特殊技术的处理。
2024-04-18 22:29:06 108 1
原创 树上DP|动态规划
孔子说:“君子总是从自己找错误,小人总是从别人找错误”。为什么没有用贪心的思想写出题目?这是算法导论中的动态规划题目,本文讲述了树上动态规划。
2024-04-17 23:16:55 180 1
原创 逛超市|图上动态规划
类似于tarjan算法,我们判断是否有0环的方法,就是查找转移一个状态是否正在被查找。在解决这题的时候,笔者担心想要凑出的值k是一个负数,但是发现这样的想法是多余的。因为我们转移的时候,是从距离终点最近的开始转移,所以需要存储反向边。我们就是想要凑出有多少个是长度是d,d+1,d+2,....小心零环,因为触碰到零环就会导致方案数量是无穷.这道题用一种类似于背包问题中凑数的思想。或者这样的路径有怎样美妙的比喻?怎样去寻找这样的路径?
2024-04-14 21:46:15 167 1
原创 归并排序|基础算法
子数组会触底反弹,当子数组A[l:r]是排序的,仅仅是一个元素。分解:计算[l:r]的终点为mid,将A[l:r]分解成子数组A[l:mid]和A[mid+1,r]。合并:将这两个排序的子数组带回A[l:mid]和A[mid+1,r]进入A[l:r],得到排序的答案。在每一个步骤,它开始一个子数组A[p:r],开始从整个数组A[1:n]和递归下降到更小和更小的子数组。将问题分解成一个或更多的子问题,这个子问题是相同问题更小的例子。解决这个子问题递归的,并且将这个子问题的解合并成原始问题的解。
2024-04-10 23:54:40 316
原创 组合数|动态规划|背包问题
本文从组合数学的角度,引用代数系统的知识,系统阐述了无重复的组合数和01背包转换。组合数是组合数学中最基础的函数,它是关于子集的枚举,我们会扩展子集的合并。
2024-04-06 21:15:29 625
原创 容斥原理|组合数学|程序设计
容斥原理还有一种交的形式,我们可以使用德摩根定律得出来,也可以使用数学归纳法证明。求解在1-n中有多少个不满足整除某些数的个数。并且和背包问题进行结合,体现转换问题的思想。
2024-04-03 21:09:06 187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人