Unverified Commit bd8cceeb authored by ir1d's avatar ir1d Committed by GitHub
Browse files

Merge pull request #946 from Ir1d/master

feat: add translation, problem list, and inner link
parents 0b63fc89 fd61f5a8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ std::sort(a, a + n);

### 线性找第 k 大的数

找第 k 大的数,最简单的方法是先排序,然后直接找到第 k 大的位置的元素。这样做的时间复杂度是 $O(N\log N)$ ,对于这个问题来说很不划算。事实上,我们有 $O(n)$ 的解法。
找第 k 大的数(K-th order statistic),最简单的方法是先排序,然后直接找到第 k 大的位置的元素。这样做的时间复杂度是 $O(N\log N)$ ,对于这个问题来说很不划算。事实上,我们有 $O(n)$ 的解法。

考虑快速排序的划分过程,在快速排序的“划分”结束后,数列 $A[p \cdots r]]$ 被分成了 $A[p \cdots q]$ 和 $A[q+1 \cdots r]$ ,此时可以按照左边元素的个数( $q - p + 1$ )和 k 的大小关系来判断是只在左边还是只在右边递归地求解。

+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ DFS 进入某个节点的时候记录一个左括号 `(` ,退出某个节点

在 DFS 过程中,通过记录每个节点从哪个点访问而来,可以建立一个树结构,称为 DFS 树。DFS 树是原图的一个生成树。

DFS 树有很多性质,比如用来求[强连通分量](/graph/scc)
DFS 树有很多[性质](/graph/scc/#dfs),比如用来求[强连通分量](/graph/scc)

## BFS

+5 −0
Original line number Diff line number Diff line
@@ -53,3 +53,8 @@
例题[luogu P2962\[USACO09NOV\]灯 Lights](https://www.luogu.org/problemnew/show/P2962)

我们正常想,如果这道题暴力 dfs 找开关灯的状态,时间复杂度就是 $O(2^{35})$ , 显然超时。不过,如果我们用**meet-in-middle**的话,时间复杂度将会变为 $O(2^{18} \times 2)$ 而已。**meet-in-middle**就是让我们先找一半的状态,也就是 $1$ 到 $mid$ ( $N$ 的一半)的状态,再找剩下的状态就可以了。我们把前半段的状态全部存储在 $hash$ 表或者 $map$ 里面,然后在找后半段的状态的时候,先判断后半段是不是都合法,就可以判断上半段有没有配对的上半段使得整段合法。

## 经典题目

-   [\[kuangbin 带你飞\] 专题一 简单搜索](https://vjudge.net/contest/65959)
-   [\[kuangbin 带你飞\] 专题二 搜索进阶](https://vjudge.net/contest/65997)