问题求解(三) Open Topic 9 笔记

OT:请调研教材中未介绍过的至少2种判定问题和2种优化问题(不能是相互对应版本,也不能是教材中介绍过的问题的对应版本),讨论适用场景,用教材中的方法形式化描述问题。

Slide

字符集编码和问题的形式化描述

字符集 \(\Sigma\) 的编码能力

引入

  • 字符集 \(\Sigma_{bool}\)\(\Sigma_{latin}\)\(\lbrace 0, 1, \#\rbrace\) 等有什么本质不同?

e.g. 使用 \(\lbrace 0, 1, \#\rbrace\) 表达带权图?使用 \(\lbrace 0, 1\rbrace\) 表达带权图?

  1. 字符集 \(\Sigma\) 的编码能力只和其元素个数 \(|\Sigma|\) 有关,和其种类无关(因为存在双射)。

    (e.g. \(\lbrace 0, 1\rbrace\)\(\lbrace a, b\rbrace\)

  2. 所有基数大于等于 \(2\)(有限)的字符集 \(\Sigma=\lbrace x_0, x_1, \cdots, x_{|\Sigma|}\rbrace\) 的编码能力相同(编码长度仅差距多项式倍),都和 \(\Sigma_{bool}\) 等价。

  • \(w\in \Sigma_{bool}^*\),可以使用 \(\lbrace x_0, x_1\rbrace\)\(\Sigma\) 上表达 \(w\)
  • \(w\in \Sigma^*\),将 \(\Sigma\) 中的字符用 \(\Sigma_{bool}\) 赋予 \(0/1\) 上的唯一编码后即可在 \(\Sigma_{bool}\) 上表达 \(w\)

如何赋予唯一编码?

(\(0/1\) 上的唯一编码) 给定 \(\Sigma=\lbrace x_0, x_1, \cdots, x_{|\Sigma|-1}\rbrace\),需要输出一个转化函数 \(f: \Sigma\to \Sigma_{bool}^*\)。约束为:根据 \(f\) 可以确定性地构造函数 \(g_f:\Sigma^*\to \Sigma_{bool}^*\) 为,若 \(w=c_1c_2\cdots c_{|w|}, c_i\in \Sigma\),则 \(g_f(w)=f(c_1)f(c_2)\cdots f(c_{|w|})\),要求 \(g_f\)单射,且 \(|g_f(w)|\)\(|w|\) 的 poly-bounded 倍。

  • 形象化理解,需要给 \(\Sigma\) 的每个字符用 \(0/1\) 编码,并保证对任意 \(\Sigma\) 上的词语,改为用 \(0/1\) 表达后不会发生误读

e.g. \(\lbrace 0, 1, \#\rbrace\) 上的字符串 \(11\#01\) 代表了一个有向无权图。定义 \(f(0)=00\)\(f(1)=01\)\(f(\#)=10\),原字符串改写为 \(0101100001\),两位一读,不会发生误读。

满足条件的 \(f\)

从上例可知,一种最简单的编码:对于大小为 \(n=|\Sigma|\) 的字符集 \(\Sigma\),对每个 \(x_i\in\Sigma\) 固定使用长度为 \(\lceil \lg n\rceil\)\(\Sigma_{bool}\)\(w_i\) 表示(前补零),且 \(Number(w_i)=i\)

更本质地,什么样的 \(f\) 是合法的?

  • 只需对任意 \(x, y\in \Sigma\)\(x\ne y\),满足 \(f(x)\) 不是 \(f(y)\) 的前缀即可。(在 0/1 trie 树上不同时选择祖先-子孙对)。

思考题:若已知 \(w\in \Sigma^*\),如何输出合适的 \(f\),使得 \(g_f(w)\) 尽量短?

由于字符集 \(\Sigma\) 的选取对问题的本质无影响(但编码内容有影响),故以下问题只给出最易于表达的 \(\Sigma\)

Some Decision Problems

有向无环图的判定问题

有向无环图的判定问题:给定图 \(G\),判断其中是否不存在有向环。

形式化地,有向无环图的判定问题是 Decision Problem \((\text{isDAG}, \lbrace 0, 1, \# \rbrace)\),其中

\[ \text{isDAG} = \lbrace w\in \lbrace 0, 1, \#\rbrace^* | \text{$w$ 表示一个有向图且无环}\rbrace \]

  • 有向(无权)图的表示可以为:对于 \(n\) 阶图,设邻接矩阵为 \(G=(a_{ij})_{n\times n}, a_{ij}\in \lbrace 0, 1\rbrace\),表示为

\[ w_{G}=a_{11}a_{12}\cdots a_{1n}\#a_{21}a_{22}\cdots a_{2n}\#\cdots\# a_{n1}a_{n2}\cdots a_{nn} \]

停机问题

停机问题:给定程序 \(P\) 和输入集合 \(S\),判断 \(P\) 是否可以在以任意 \(s\in S\) 作为输入的前提下在有限时间内结束。

如果把 \(P\) 使用的字符集记为 \(\Sigma_P\),即 \(P\in \Sigma_P^*\),把 \(P\) 的输入使用的字符集记为 \(\Sigma_{in}\),即 \(S\subseteq \Sigma_{in}^*\),且定义 \(\perp\) 是在 \(\Sigma_P\cup \Sigma_{in}\) 中未出现的一种字符。则

形式化地,停机问题是 Decision Problem \((\text{Halt}, \Sigma)\),其中

\[ \Sigma = \Sigma_{P}\cup\Sigma_{in}\cup\lbrace \perp\rbrace \]

\[ \text{Halt}=\lbrace w\in\Sigma^*| \text{$w$ 表示程序 $P$ 和 $S$,且满足对任意 $s\in S$ 作为输入 $P$ 可停机}\rbrace \]

\(w\) 的编码方式可以为

\[ w=P\perp s_1\perp s_2\perp \cdots \perp s_{|S|}\perp\perp \]

其中 \(P\in \Sigma_P^*\) 编码程序 \(P\)\(s_i\in \Sigma_{in}^*\) 编码 \(P\) 的输入 \(s_i\).

Some optimization problems

排序问题

排序问题:输入 \(n\) 和序列 \(\langle a_1, a_2, \cdots, a_n\rangle\),输出序列的一个重排 \(\langle b_1, b_2, \cdots, b_n\rangle\)\(b_1\le b_2\le \cdots \le b_n\)

  • 只需要求解可行解,在可行解之间没有优劣之分。

形式化地,排序问题定义为:

  • Input: 正整数 \(n\ge 1\) 和正整数序列 \(a_1, a_2, \cdots, a_n\).
  • Constraints: 对任意输入实例 \((n, a_1, a_2, \cdots, a_n)\)\(\mathcal M(n, a_1, a_2, \cdots, a_n)=(b_1, b_2,\cdots, b_n)\),满足多重集 \(\lbrace a_1, a_2, \cdots, a_n\rbrace=\lbrace b_1, b_2, \cdots, b_n\rbrace\),且 \(b_1\le b_2\le \cdots\le b_n\).
  • Costs: 对 \((b_1, b_2, \cdots, b_n)\in \mathcal M(n, a_1, a_2, \cdots, a_n)\)\(cost((b_1, b_2, \cdots, b_n), (n, a_1, a_2, \cdots, a_n))=0\).
  • Goal: 最小化。

最小化唯一编码问题

(最小化唯一编码问题) 输入 \(\Sigma=\lbrace x_0, x_1, \cdots, x_{|\Sigma|-1}\rbrace\)\(w\in \Sigma^*\),需要输出一个转化函数 \(f: \Sigma\to \Sigma_{bool}^*\)。约束为:根据 \(f\) 可以确定性地构造函数 \(g_f:\Sigma^*\to \Sigma_{bool}^*\) 为,若 \(w'=c_1c_2\cdots c_{|w|}, c_i\in \Sigma\),则 \(g_f(w')=f(c_1)f(c_2)\cdots f(c_{|w'|})\),要求 \(g_f\)单射,且 \(|g_f(w')|\)\(|w'|\) 的 poly-bounded 倍。最小化 \(g_f(w)\).

形式化地,最小化唯一编码问题定义为:

  • Input: \(\Sigma=\lbrace x_0, x_1, \cdots, x_{|\Sigma|-1}\rbrace\)\(w=c_1c_2\cdots c_{|w|}, c_i\in\Sigma\).
  • Constraints: 对任意输入实例 \((x_0, x_1, \cdots, x_{|\Sigma|-1}, w)\)\(\mathcal M(x_0, x_1, \cdots, x_{|\Sigma|-1}, w)=(f(x_0), f(x_1), \cdots, f(x_{|\Sigma|-1}))\),满足上述约束。
  • Costs: 对 \((f(x_0), f(x_1), \cdots, f(x_{|\Sigma|-1}))\in\mathcal M(x_0, x_1, \cdots, x_{|\Sigma|-1}, w)\)\(cost((f(x_0), f(x_1), \cdots, f(x_{|\Sigma|-1})),(x_0, x_1, \cdots, x_{|\Sigma|-1}, w))=\sum_{i=1}^{|w|}|f(c_i)|\).
  • Goal: 最小化。