2019金华随团旅游Day2

本文深入探讨了算法中的分治策略,包括普通分治、二分及CDQ分治,并详解了图论的基本概念,如最短路径、最小生成树以及树的相关理论。同时,还介绍了字符串处理中的KMP算法和后缀数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们迎来了快乐的第二天,为什么说是快乐,因为我已经疯了。
显然第一天的名胜已经令人目不暇接,而现在更是死在这里啦,我们看看导游说了啥

你看看这说的是人话吗?

吐槽结束,进入正题。
去掉花里胡哨的东西,我们只讲解题策略。

分治

普通分治

给出以下套路:

  1. 划分左右两边。
  2. 对于一个区间有以下两种情况
    a. 该区间在左侧或右侧。b. 该区间跨过中间。
    我们采取以下方式处理。
    a.直接递归调用。b.计算该区间贡献并累加。
  3. 然后你就有了答案。
二分

这是一个基本的套路,即分治是以中点为界来划分。
这里我们要讲的主要套路是0/1分数规划。(我理解的,可能与事实有出入)
该类题一般会要求求一个形如∑ai/∑bi\sum a_i/\sum b_iai/bi的东西

  1. 二分所需的答案。
  2. 利用答案对所求式子作出转化,将一个最优化问题转换为可行性问题,使其更加简单。
  3. 不断检验可行性直至临界点即为答案。(这句好像是屁话)

除此之外,对于二分,这里给出一个不常用的技巧:
利用伪倍增思想划定二分范围以保证复杂的。

整体二分(整体分治)

这是一个玄妙的操作,在这里简单概述一下流程。
看看到大佬的描述
在这里插入图片描述
转换成人话大概就是说将全部操作一同二分答案,再通过操作分类的方式向下递归求解,直到可以回答问题。

  1. 使操作离线。
  2. 二分答案,然后验证比不合法的数有多少个来不断地缩小答案范围直至得到一个准确的答案。
  3. 对每个询问都需要判定一下,以决定它被划分到哪一个答案的区间里,至于判定可能需要依题目而定,对于这一点不是很懂。
CDQ分治

这也是一个优秀的分治,常用来计算二维、三维偏序问题。
其主要思想是通过分治,使得其中一个约束条件被排除,令问题简化。
大致流程如下:

  1. 操作离线。
  2. 在CDQ分治中先处理出左右两个区间。
  3. 然后处理出区间对区间的相互影响。
  4. 对每个区间继续分治,但是需要加入另一边的影响。
点分治

这是对于树的分治。我们在树上进行分治是通常就是使用点分治。
一般有以下流程:

  1. 找到树的重心。
  2. 对其子树进行分治求答案。
  3. 计算其贡献(跨子树操作的)。

图论

这个范畴稍稍有点大,我只讲较为基础的部分。

最短路

这里不再讨论最短路算法,引入最短路的实质与其使用方式。
最短路的本质是对于形如对于 (x,y,w)d[y]<=d[x]+w的不等式的最⼤解。
我们可以将边看做是约束条件,进而求不等式的最大解就是尽可能少的被约束,即最短路。
所以引入差分约束。

  1. 看到一道有约束条件的题,对约束条件作出转化。
  2. 以约束条件构图。
  3. 计算最短路求最大解。
  4. EX:如果希望最小解可以定义新的函数为原函数的相反数,在计算约束条件,连边,计算,即可求得。
    特别的,最短路有许多变种,拓展或者说是新增约束等。在做题时需发现其本质思想和实质意义,或是依靠一些结论转化问题。
    尤其注意,最短路与动态规划的结合也是一个思考方向。
最小生成树

给出一个小小的技巧。
转化问题,使其成为图,且目标为到达所有点,这是问题就成为最小生成树问题了。(我也感觉这是屁话,但写在这里希望我在考试是能想到还有这样的技巧)。

这又是个宏大的课题,但我只讲其中一小部分。
Prufer序列
将⼀棵树变成⼀个序列:
每次选择树上标号最⼩的叶⼦,删掉它,将与它相连的那
个点的标号加到序列⾥,直到只剩下 2 个点。
可以证明:任意⼀个⻓度为 n-2 的 1…n 的序列都是某棵树
的 Prufer 序列。
所以可以推出:n 个点的⽆根树个数为 n^(n-2)。
其运用方式即将树转化成唯一对应的序列,可用于问题转化或是记录。

欧拉回路与圈套圈算法

欧拉回路有以下特征:

  1. 这张图是个强连通分量。
  2. 每个点的出度等于⼊度。

而且这两个条件也是充分的。

关于圈套圈算法我不会,但是给出结论:
任选⼀个起点,从起点开始 dfs,每条边只能被⾛⼀遍,当没有边可以⾛的时候把 x 压⼊答案的队列中。

最后的答案是反着的欧拉回路。

二分图
  1. 判定:dfs染色判奇环。
  2. 最大匹配:匈牙利算法(我不会QAQ)。
  3. 最⼩顶点覆盖:选最少的点覆盖所有边
    |⼆分图最⼩顶点覆盖|=|⼆分图最⼤匹配|。
  4. 最⼤独⽴集:选最多的点使得它们两两没边相连
    |⼆分图最⼤独⽴集|=总点数-|⼆分图最⼩顶点覆盖|。
  5. Hall引理:设 S 是左边点的⼀个⼦集,设 N(S) 为 S 所有点邻居的并
    集,则⼀个⼆分图存在完美匹配的充要条件是:
    对于所有 S,|S|<=|N(S)|(并不是很懂)。

字符串

KMP

这是一个快速匹配字符串的算法。
其核心next数组为s[1…N] 最⻓的相等的前后缀。
通过这个数组跳跃可以减少很多不必要的匹配。
顺带提下,当这样的操作在一棵trie树上实现时,就完成了AC自动机,您也成为了自动AC机。

后缀数组

这个完全不会QAQ,无法写下去了。
所以略过这个与本来还会有的后缀自动机,直接结束。

END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值