![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 89
seh_sjlj
一个热爱数学证明的大学牲
展开
-
【图论】中国邮递员问题、平面图上最大割问题的多项式时间算法
本文介绍了中国邮递员问题的Edmonds-Johnson算法、平面图上最大割问题的多项式时间算法和顶点图(apex graph)上最大割问题的NP完全性。原创 2023-04-05 17:14:42 · 4278 阅读 · 0 评论 -
【概率论】一种非常巧妙的随机抽样算法
又因为数学归纳法,我们只需证明第一个元素被抽中的概率等于后面的元素被抽中的概率。要理解这种算法的正确性,我们只需证明每个元素被抽中的几率都是。如果第一个元素被抽中了,那么后面的每个元素被抽中的概率是。如果第一个元素没有被抽中,后面的每个元素被抽中的概率是。根据全概率公式,后面的每个元素被抽中的概率是。这样就证明了抽中每个元素的概率均为。显然每个元素被抽中的概率均为。假设我们现在要在集合。显然,抽中第一个元素。第一个元素没有被抽中。第一个元素没有被抽中。原创 2023-01-16 18:19:52 · 753 阅读 · 0 评论 -
一种时间复杂度为O(2ⁿ)、空间复杂度为O(n)的子集和问题的算法
里我介绍了如何用单位根巧妙地解决一个数学问题(关于单位根的性质及证明请参见那篇文章),那么在本文中我们将用这个思想给出一个子集和问题的算法。不过经过我的测试,这种情况出现的概率微乎其微(我的测试数据还没有出现过这种情况),所以不必担心。,但是因为计算过程中有舍入误差的存在,所以我们把子集不存在的条件放宽为。这样,相比于背包问题的动态规划解法,我们节约了大量的空间。的大小,但是最坏情况下的时间复杂度是指数级的;较小的情况时,我们就有了一种高效的且占用空间较少的方法。较小时,我们采用这种新的策略。原创 2022-12-29 21:09:45 · 553 阅读 · 1 评论 -
【人工智能/算法】搜索求解(Solving Problems by Searching)
启发式搜索(Heuristic Search):利用启发方式获得的领域知识,通过限定搜索深度或者限定搜索宽度来缩小问题空间,避开没有结果的搜索路径,也称有信息搜索原创 2022-12-02 22:30:28 · 2477 阅读 · 2 评论 -
【算法/图论】2-SAT问题详解
要求出强连通分量,就需要对原图进行缩点,顺便可以求出得到的有向无环图的拓扑序。数组存储每个节点的染色,实际上就是有向无环图的逆拓扑序(因为在DFS树中越深的节点越先被染色)。没有出现某个变量及其否定在同一个强连通分量的情况,所以是可满足的。...原创 2022-08-02 16:18:19 · 6070 阅读 · 4 评论 -
合取范式可满足性问题:CDCL(Conflict-Driven Clause Learning)算法详解
本文以DPLL算法为引入,系统地阐述了CDCL算法的详细步骤,对迹、决策层、蕴含图、子句学习、回溯等概念进行了充分的解释,并提供伪代码、Python代码和大量例子,借鉴了维基百科、华盛顿大学、阿尔托大学的相关资料,十分适合作为SAT方面的研究人员的参考文章。......原创 2022-07-27 18:32:52 · 8794 阅读 · 7 评论 -
【数据结构与算法/图论】Dijkstra和Floyd最短路径算法的正确性证明
文章目录一、最短路问题二、Dijkstra算法基本思想一、最短路问题设给定一个带权有向图G=(V,E)G=(V,E)G=(V,E),源点为sss,求sss到GGG中其他各点之间的最短路径,这类问题称为单源最短路径问题。记顶点sss到点uuu的最短路径为δ(u)\delta(u)δ(u),正在计算的点sss到点uuu可能的最短路径为d(u)d(u)d(u)。定理(最短路问题的最优子结构性质) 设路径Γ\GammaΓ是点uuu到vvv的最短路径,p,qp,qp,q在Γ\GammaΓ上,即Γ:u→p→q→原创 2022-05-16 19:52:27 · 724 阅读 · 6 评论 -
【数据结构与算法/图论】Prim和Kruskal最小生成树算法正确性的证明
文章目录一、最小生成树简介二、最小生成树的性质一、最小生成树简介一个有nnn个顶点的连通图GGG的生成树是包含GGG中全部顶点的一个极小连通子图,它有且仅有n−1n-1n−1条边。也就是说,如果添加一条边,则构成回路;如果删去任何一条边,则生成树不再连通。一个生成树的代价为该生成树中所有边权的总和。称代价最小的生成树为最小生成树(Minimum Spanning Tree, MST)。最小生成树是图的一种重要应用,在城市道路交通规划、网络路由选择、城市通信网架设等实际问题中应用广泛。例如,在nnn个城原创 2022-05-09 20:27:17 · 1669 阅读 · 2 评论 -
KMP算法详解
KMP算法虽然代码简单,但是理解起来还是颇为费力的,细节很多。包括next数组和k = next[k]等都是理解上的难点。所以我花了一个星期时间整理了这样一篇文章,从暴力算法开始到next数组和匹配过程,以及时间复杂度的证明和例题,希望能够完整地展示KMP算法的全貌,深入浅出地阐述KMP算法的思想。原创 2022-04-13 11:03:22 · 1873 阅读 · 0 评论 -
【数据结构与算法】关于合理的出栈顺序问题
可以参见上一篇文章(【数据结构与算法/组合数学】出栈序列的个数问题详解)[https://blog.csdn.net/qaqwqaqwq/article/details/123522307]。经典问题:已知入栈序列是12345,问下面那个出栈顺序是不合理的?A. 54321B. 45321C. 43512D. 12345这种问题往往让人十分头疼,好像得挨个模拟一遍入栈过程。有没有更简便的方法呢?事实上,我们有定理 对于入栈序列123...n,若出栈序列中每个元素后面比它小的元素都是逆序排列的原创 2022-03-23 20:59:28 · 1014 阅读 · 2 评论 -
【算法/数论】欧拉筛法详解:过程详述、正确性证明、复杂度证明
文章目录一、什么是筛法二、欧拉筛法详解三、欧拉筛法正确性的证明四、时间复杂度的证明一、什么是筛法筛法就是求出小于等于nnn的素数的方法,在数论中发挥着很大的作用。二、欧拉筛法详解筛法做到复杂度优化,所采用的一个惯用思路是:找到一个素数后,就将它的倍数标记为合数,也就是把它们“筛掉”;如果一个数没有被比它小的素数“筛掉”,那它就是素数。欧拉筛法的大致思路也是如此,就是其中有些细节有差异。欧拉筛法拥有线性的复杂度,而且编码较简单,应用十分广泛。我们先给出代码:bool isprime[MAXN];原创 2022-03-19 00:39:08 · 41808 阅读 · 22 评论 -
【数据结构与算法/组合数学】出栈序列的个数问题详解
假设有一个入栈序列a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1,a2,⋯,an,现在求它有多少种出栈序列。例如,对于入栈序列1,2,31,2,31,2,3,我们有555种出栈序列:①3,2,1①3,2,1①3,2,1:push 1,push 2,push 3,pop 3,pop 2,pop 1②2,3,1②2,3,1②2,3,1:push 1,push 2,pop 2,push 3,pop 3,pop 1③1,3,2③1,3,2③1,3,2:push 1,pop 1,push原创 2022-03-16 12:32:53 · 6183 阅读 · 2 评论