问题求解III-HW11 题解

Problem A: 字符串匹配

  • 给定一个字符串池,有 $q$ 查询,每次查询提供一个字符串,问该字符串是否在字符串池中。
  • 字符串池中字符串数目和 $q$ 同阶,$q\leq 10^5$,所有字符串长度不超过 16。

解法1: 内置数据结构

对于 C++ 而言,使用红黑树实现的 set<string> 或哈希实现的 unordered_set<string> 都可以轻松完成本题。

解法2: 哈希

参考 讲义 中的讲解。注意本题可能需要使用讲义最后提到的双哈希才能通过。

解法3: 字典树

这是一道字典树的模板题,参考 讲义 中的讲解。

Problem B: 顶点覆盖

  • 给定一张图 $G(V, E)$,求图的一个尽可能小的顶点覆盖 (即所有边都至少有一个端点在选中的点集中),你的答案只要不超过最优解的 2 倍即可。
  • $|V|\leq 2000, |E|\leq 20000$。

近似比为 2 的顶点覆盖近似算法非常简单:只需要在原图中任取一个极大匹配,然后将匹配边的端点全部选中即可。具体细节和证明见教材。

Next