设计笃㲼
Stable Matching
Formulation:双方各自拥有喜爱顺序 list。
结论:必然存在稳定匹配。
算法:
- 左方一个点的增广流程为:按照喜好不断寻找下一个人,尝试提交申请,如果申请通过则终止增广。
- 右方一个点的审核流程为:检查申请人是否优于当前选择,如果否则驳回,是则通过,并通知原选定者开始增广。
因为如果左侧有人未匹配,则右侧必然有人未匹配,所以算法必然会结束于完美匹配。右方点的匹配结果只会越来越好,所以左侧点一旦被某个右侧点拒绝,则之后也不会再被选择。因此,左侧点匹配者之前的所有人都拒绝过它;右侧点匹配者之前的所有人都没有向它提出过申请(它们已经与在自身偏好中更前者匹配)
特别地,如果左侧所有点的偏好都随机,则期望 次即可查询到空点,因此复杂度平方。
Dijkstra & Prim
最优性证明方法:时刻保证当前解可以扩充为某一最优解。
Kosaraju & Tarjan
Kosaraju:对原图 dfs,求出 完成 时间戳;按照时间戳逆序,对逆图(所有边反向的图)中所有点搜索,可到达的点构成强连通分量。
证明:原图和逆图具有相同 SCC 划分。缩点后,原图中的完成时间是倒置的拓扑序,因此逆图中每次搜索就相当于正着从拓扑序中剥除点。
Tarjan:如果新点未访问,则访问并用 low 更新;若已访问但未染色,则用 dfn 更新;如果访问结束后 dfn=low,则发现 SCC。
Tree Width
参见 宽体树图。Takeaways:
定义:一张图 的树分解是满足如下条件一棵树 , 上每个节点 都放置了一个集合 ,且:
- 中每个节点被至少一个 包含。
- 中每条边的两端点至少被一个 同时包含。
- 中每个节点被 包含的全体 构成连通块(换言之,如果 都包含 ,那么二者路径中的每个 均包含 )
对于 上一个节点集合 ,定义 为 中全体节点 的并集的导出子图。
树分解满足如下性质:
- 对于树上每个节点 ,删去 后树分成若干块 ,则全体 两两无交、且不相邻。
- 对于每条边 ,删去后树分成两块 ,则 无交、不相邻。
第一条性质:假设有交,不妨令 中的点 的 和 中 的 同时含 ,则 在 至 的路径上,因此必须包含 ,则 ,不合法;假设有边 ,则 在 中的分布连通块显然不能过 , 同理,于是它们不可能在同一个 内共存, 边未被任何 同时包含。
第二条性质同理。
一个树分解对应的树宽即为 。一个图的树宽为全体树分解中最小树宽。子图的树宽必然不超过母图。
一个非冗余 (nonredundant) 的树分解是任意相邻两点 不存在一个的 包含另一个的场合。通过重复将被包含的那个点缩到更大的点上,一个冗余树分解必然可以在不改变树宽的前提下变成非冗余树分解。通过不断剥叶子,可以证明非冗余树分解的点数必然不超过原图的点数。
可以构建树宽的 -近似 -FPT 算法。首先,如何判定树宽?
定义:两个包含相等数目节点的集合 是可分 (separable) 的,若它们间的最小割点集的大小严格小于二者共同的节点数目。即,存在集合 满足 ,且 与 在 上不连通。【注意,这并不要求 无交】
定义:一个集合 被称作 -连接 (-linked) 的,如果 且其中所有子集 都是不可分的。
可以在 的复杂度内判定一个集合 是否是 -连接的;如果不是,该算法同时可以找到可分集合对 和它对应的割点集 。
方法很简单:全体 对共有不超过 对;每一对相当于求最小割,因此在 的复杂度内即可判定是否可分。
定理:存在大小至少为 的 -连接集合意味着树宽至少为 。
假设存在非冗余的树分解 满足全体 ,同时存在 -连接、大小至少为 的集合 。
令树是有根树。令 为树上节点 子树中全体点对应的 。考虑从根往下能走就走,直到某点 ,满足 包含超过 个 中元素,但其全体儿子均不然。
显然 不是叶子(否则 ,而 )。令其有儿子们 。
假如存在一个包含至少 个 中元素的儿子 ,则从中挑出 个作为 ,从 中挑出 个作为 。因为非冗余,所以 ,而删去 后, 与 就此分别,于是 可分,违背了 是 连接的前提。
假如不存在这样的儿子,那么考虑用多个儿子组合起来,直到 中包含严格超过 个 中元素,则其必然严格小于 个。于是从其内部挑 个,再从外部挑 个,删光 即可将它们分割。
算法:给定一个阈值 ,构造一个树宽小于 的树分解或判定存在大小至少 的 -连接集合。
维护一个部分树分解:我们如今已构造了若干 ;它们应恰好成为 的某个子集(即全体 并集 )诱导子图的树分解。我们需要保证部分树分解中全体 。
由若干连通块组成,它们是相对独立的。一个连通块 拥有邻居 ,如果 与 中某一元素 相邻。
在维护部分树分解的过程中,同时维持一条额外性质,即任意时刻,每个 至多有 个邻居,这些邻居由同一个 储存(即 中诞生的新状态的父亲)。这样,每次递归就是从 中挑出不超过 个元素,把它与这不超过 个邻居放一块搞出来,作为 的儿子连出来。
如果邻居确实不够 个,那再多一个也没事。于是从 中随便挑一个,把它和这不足 个邻居放一块诞生子状态,则 分裂(不一定发生)出的所有子状态的邻居集合至多多一个新增元素,因此这样做合法。
现在邻居恰有 个,记为集合 。首先可以跑一边 -连接集合验证算法,判定邻居集合是否是 -连接的,如果是那么 的树宽显然大于 。否则其并非 连接的,存在两个集合 ,通过删去某个 而不连通。
因为 各自都与 中有边,所以 不可能不含 中元素。取 ,则 且 。令 为 作为 的儿子,则其合法,因为:
令 为 中剔除 中元素的部分。则 中的每个元素关于与 是否联通,分成两个集合,每个集合的邻居集合都是 中用 二者其一换成了 ,因此邻居数量仍然保持在 内。
Graph Minor
Graph Minor(图子式)是通过删点、删边、缩边得到的结构。
Kuratowski-Wagner 定理:平面图是不存在 子式的图。
Robertson-Seymour 图子式定理:在任意无限图集合中,至少一张图是另一张图的真子式。
Minor-Closed Family(这玩意的译名真不知道是啥,浅编了一个 子式闭族 出来)是子式属于集族的集族。一个集族是子式闭族,当且仅当它有有限个极小禁止图子式(即,一个图属于该集族,当且仅当它不含任何禁止图子式)。因此,一切子式闭族都存在类似 K-W 定理的等价式。
一些子结论:固定一张图,可以 判定该图是否是另一张图的子式;存在 满足一切有着至少 树宽的图都有着 的子式。
NPC Problems
注意:在验证一个问题是 NPC 之前,先要确认它确实是 NP!!!
所有能被使用的 NPC 问题:
独立集;Set Packing(从 个集合中选取最多数目的不交集合);点覆盖;集合覆盖;3D matching(三元组覆盖三分图);三及以上染色;Hamilton 环和路径;TSP;subset sum(判定是否有和为某元素的子集);3-SAT。
独立集的补集是点覆盖。点覆盖容易归约到集合覆盖(点覆盖了邻域中所有边),同理独立集容易规约到 set packing。
3SAT 规约到独立集:每个 clause 的三个变量建三个点互相连边,同一个变量的正负取值之间互相连边,这样合法当且仅当最大独立集包含每个 clause 中的恰一个元素。
3SAT 到 Hamilton 环:对每个变量建一条足够长的路径,左向为真右向为假。自源点向第一条路径的起讫点各连边,第一条路径起讫点向第二条……最后一条起讫点连向汇点,汇点再连回源点。现在如果我们想要强制一条路径的方向,就新建一个点,其自三条路径三个点连来,再连到它们各自下一个点即可。【Hamilton 环是针对有向图定义】。Hamilton 环到 TSP 是容易的。有向 Hamilton 怎么到无向 Hamilton?答曰:拆点,一个点拆成三个点,这样让路径必须从入点走向出点。
无向/有向 Hamilton 环到无向/有向 Hamilton 路径:枚举每条边,把它干掉然后检查有没有 Hamilton 路径即可。
3SAT 到 3DM:对每个变量造一堆 chip,强制选中所有奇数位或偶数位之一的所有 chip。clause 可以造两个新点然后强制需要 chip 中的某个点。剩下还有一批点没有被 cover,造一堆两个点的 cleanup 元素连到所有点即可。
3SAT 到 3color:造出 base,true,false 三个基元点连成三元环,对于所有变量造出其自身和其否定,与 base 连成三元环。如果自身与 true 同色则认为其是 true,与 false 同色则相反。clause 要求三个位置至少有一个与 true 同色,于是用 3color 造一个三个 false 的输入无法染色的图电路即可。方法:
(x_1,1),(T,1),(T,2),(1,2),(T,3),(3,x_2),(T,4),(x_3,4),(4,5),(F,5),(1,6),(3,6),(5,6)
3DM 到 Subset Sum:每个 3 pair 对应三个 bit,要求不能出现进位。
FPT
Fixed Parameter Tractable,复杂度是 。注意, 并非 FPT。
VC 关于 VC 大小的 FPT:注意到对于任意一条边 , 存在 的 VC,当且仅当 存在 的 VC,或是 存在 的 VC。于是,递归地尝试处理 :
- 倘若 没有边,直接结束。
- 因为每个 VC 中的点至多处理掉 条边,因此如果 ,则必然找不到 -VC。
- 找一条边,检查 或 。
共检查 个实例,每个实例的级别是 的,于是复杂度为 。
Co-NP
NP 问题需要存在某个证据并判定存在解,在不存在解时对一切证据均输出不存在解;Co-NP 则相反,存在证据判定不存在解,存在解时何种证据都无法判定不存在解。
Approximation Algorithm
一个算法是 -approximation 的,如果对于一切输入,算法结果 与真实结果 满足 的上界是 (如果 )或者 的上界是 (如果 )。
Load Balacing Problem: 个任务分配到 台机器。
- 把任务分配给当前任务量最少的机器。因为 且 ,而在最后一个任务被分配前,任务量最少的机器必然不超过 ,且最后一个任务必然不超过 ,所以知此方案必然不超过 。
- 按照时间递减顺序分配。若 ,则 ,于是 ,于是知此方案是 -近似。
-Center: 最小化到大小为 集合的最远点距离。
- 枚举 ,然后每次随意选一个点、删掉该点的 -邻域。若最优策略是 ,则当枚举至 时,每个最优集合点的 -邻域中至少会有一个点被选中,而这个点的 -邻域能覆盖 -邻域中所有点,因此此乃 -近似。这个近似已经达到上界,因为小于 的近似不弱于判定支配集。
Weighted Set Cover:集合带权版本的集合覆盖。最小化选择集合的权值和。
- 选择 最小的集合加入。定义 为一个点初次被 cover 时,其对应的 ,则有 。而对于每个 ,有 :因为 中的每个元素被删去时,此时的 必然不超过 ,因此结果是调和级数。
然后知这是 -近似。这个近似已经达到上界。
背包:对于 ,取 ,令离散权值 ,则本质只有 种不同权值。然后可以 DP 达到某个权值所需的最少空间,复杂度 ,然后是 的近似。此乃 FPTAS (Fully Poly-Time Approximation Scheme)。
Linear Programming
问题:限制 且 ,最大化 。变种如 可以取负号, 可以变成一个 一个 ,最小化可以取反 。
本质上是计算凸超多面体在超平面上投影的最远位置。因为凸性,所以只需要考虑多面体的顶点信息即可。
VC 容易转成整数线性规划(ILP)。LP 的最优解显然至少与 ILP 等优。而可以通过令 来把 LP 解变成 ILP 解,在 VC 问题上这是一个 -近似。
集合覆盖 SC 也容易转成 ILP。以 的概率设置 的解,则转化得到的 ILP 解的期望等于 LP 解;但是它不一定是合法解。对于一个元素,其未被 cover 的概率是 ,且满足 。这个概率的上界是 。因此,重复 次 LP 并对采样结果求并,则一个元素未被任何一次 cover 的概率不超过 ,所有元素中有一个未被 cover 的概率由 Union Bound 不超过 ,因此合法概率是 ,而这个解是一个 近似解。
Divide & Conquer
主定理:如果
此时 threshold 。如果 其中 ,则 ;如果 ,则 ;如果 其中 ,则 。
最近点对:在一半处切割,左右分别递归,然后关于左右最近距离 ,以 的方式划分格子,则每个格子中至多有一个点,于是对于所有距中轴距离不超过 的点,枚举与其 坐标最邻近的常数个点即可。
-th element:思想还是分治,每次找到一个接近中位数的东西然后依照它将序列分成两部分然后进入对应部分。首先将序列分成 段长为 的段落,然后每段内部手动 排序找出中位数,然后对所有中位数构成数列调用 -th element 求出中位数,再用这个中位数作为基准处理。则求出的中位数比 段中前三个元素大,比 段中后三个元素小,则调用后数列长度至多为原本的 。有 ,而注意到 。
Network Flow
FF:每次随意挑一条路径,增广。整数域 FF 能正确停止,非整数域 FF 可能无法终结。EK 挑选最短路增广,是 的。预流推进是 的。
Randomized Algorithm
随机抄一些 inequalities 罢。
Markov:对于 非负 的 ,。其也可以被应用于变式:对于 ,。
Chebyshev:。证明对 用 Mar。
Cheroff: 。。同时有推论:,。 是若干次掷硬币(Bernoulli)组成。
Hoeffding 对于 ,有 。在其不同分布时,也有 。事实上,如果把内层的绝对值撤掉,那么右侧外部的 亦可撤掉。
大数定律:如果 均是 的取样,则 ,本质也是 Cheby。
Median Trick:使用采样估测期望时,选取所有采样的中位数作为期望的估值。
Hashing
为处理碰撞后的结果,可以使用拉链法或 open address method,即使用一系列 并依次检查。好的 包括:,。
Universal Hashing Function:如果要构建 的 Hash,我们希望有 。构建 的方法是:将 写成 进制的结果 ,取一组 ,然后令 。则对 的某一位 分析 的取值即可。
Perfect Hashing: 预处理, 检查键值是否存在。缺点是无法动态更新 hashtable。方法是首先搭一个 的 hashtable,然后对于表中每个位置,令其中躺了 个元素,则造一个大小 的 hashtable 造二级 hash 结构,重复重构二级结构直到它不再碰撞。其空间大小为 。而如果 个元素映到 的表中,期望出现 次碰撞,于是由 Markov 有 ,则当 时,失败的概率不超过 。
Cuckoo Hashing:维护两个 hash table 分别有 function 。如果 为空,则插入;否则如果其中已经有 ,则用 把 挤掉,然后尝试在 插入 。假如某一轮插入次数超过阈值,则重构整个 hashtable。
使用 Hashing 做到期望线性的最近点对:随机重排,关于当前的 建构网格,则一个网格中至多出现一个点。一个点只需检查周边一圈的网格即可。
Random Analysis
Balls-Bins: 个球扔进 个洞,最大值期望是 ;期望空洞数是 。若球数 ,则所有 load 都期望为 范围。期望 次出现 collision。
Streaming Algorithm
输入以 stream 的形式给出,对空间有很强的限制。
统计不同元素数目?hash 后数末尾零的最多数目,期望有二的该数目次幂个不同元素。
BJKST:优化的不同元素数目计数。维护阈值 和零数目超过该阈值的全体元素集合 (记得去重)。当新来元素时,如果它超过阈值,则加入 ;但是如果 超过了设置的桶大小(),则不断抬高阈值并自 中删除不再逾越阈值的元素。最后用 来估计。
- 不过课上讲的好像是,模大质数 后,记录前 小值,然后用 估算。
Markov Chain
两个 distribution 的 Total Variation Distance
易知 。
另一种结果为,考虑 为一切 的 joint distribution(在 有限的时候, 可以记作一个矩阵,矩阵的行和与列和由 确定),则
这种分析被用在 Coupling 的场合。
令 为自初态 走 步的 distribution,即 。令 为自 单点出发的 distribution。定义 ,-mixing time 为 满足 的最小 。而,另一种定义的 则是对于一切初态 (注意,这里的初态不一定是单点分布),要求 。 与 在 aperiodic 的场合类似:此时必有 。
有一个性质是,不同的 之间,满足给定一个 则可以用于 bound 所有的 。这是因为,定义 ,则易知 ,且 满足 的好性质,因为
这是 mixing time 最朴素的定义。
有 ,其中 是 sta-dis 中的最小值, 是 eigengap。
定义 normalized conductance ,。有 。conductance 分析仅适用于无向图的场合:而前述的谱分解分析适用于一切场合。
Cheeger 不等式连结了 和 :它指出 。但是,注意此处的 ,与谱分解中的 不完全相同。当 正定时,两个 相等;而强制令游走时以一半概率留在原地后,得到的新 MC 与原 MC 有着相同的 sta-dis,且由 Gerschgorin’s Theorem,新 MC 必然正定。
Gaming Theory
Nash Equilibrium:没人能单方面改变策略使得自身变好。
Social Optimal:所有人的和达到最大。
Shapley Network Design Game: 对点 互相连接,若边被多次覆盖则只计算一次代价(所有参与者均分代价)。此时 Social Optimal 是 Steiner 树。
如何计算 Nash Equilibrium?定义一个局面的熵 ,其中 是边权、 是边被覆盖的次数。如果某个参与者更新了它的决策,这必然会降低熵,而因为总方案数有限,其最终会停在一个熵最低的态,这是一种 NE 的解。因此从 social optimal 出发不断迭代即可。
Price of Anarchy (PoA):。
Price of Stability (PoS):。
PoS 是 级别。这是因为自 SM 出发 。
有向图时有 Worst Case Example:令 ,点对 ,连边 、、。无向图时该 example 不成立。
Unrelated Machine Scheduling
Machine Scheduling 中,任务完成的时间可能与 machine 特异性相关。如果有 个机器 个任务,则每个任务分配给每台机器都需要建立一个变量。因此,限制总共只有 个,但是变量数目是 的。直接 rounding 是 -近似。但是注意到共 个限制导致每个顶点处都是只有 个方程,这意味着会有至多 个非零变量。因此外层套上二分,使用线性规划先解得解后,再对于所有非零变量构成的基环树森林使用 DP 手法处理,即可达到 -近似。
- 具体而言,一棵树的场合,叶子只能是任务。因此叶子必然分配给父亲,非叶子的任务丢给儿子,这样一台机器就收到了它原本的任务(儿子们)和至多一个额外任务(父亲),因此是 -近似。
TUM
ILP 在对于一切整向量 ,都有 所限定的高维体积的所有顶点均为整点时,其解即等于 LP。
Totally unimodular matrix 定义为所有方形子矩阵(删除一些行列得到的矩阵)都有行列式为 的矩阵。这样,可逆的子方阵就会是整方阵。
H-K 定理:矩阵是 TUM,当且仅当所有 的高维体积的所有顶点均为整点。于是,只要我们能判定一个矩阵是 TUM,则其对应的整数线性规划必然是可以被当成常规线性规划。
G-H 定理:一个 矩阵是 TUM,当且仅当对于一切子集 ,都存在将 划分为不交子集 的一种方式,使得对于一切 ,都有 。
- 二分图匹配矩阵满足 G-H 定理。所有行都是连续 的矩阵同理。无重边网络流也是。
Ex
- 假设我们有一个可以在所有解中均匀独立随机 sample 一个的算法,如何得到对解数目的 FPRAS?假如我们可以证明,首个
bit
是 (或是 )的解数目不会比全体解数目低太多(例如,二者的比值被常数 bound),就可以通过随机采样推测出首位是 的占比,然后递归地进行下去,直到算法的规模充分小。 - 假设我们有 FPRAS,如何 sample?计算 后以该概率 sample 第一位,然后递归。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?