QOJ.ac

QOJ

حد الوقت: 5.0 s حد الذاكرة: 256 MB مجموع النقاط: 100 قابلة للهجوم ✓

#11005. 前缀码

الإحصائيات

前缀码是一种具有“前缀性质”的编码系统,其要求系统中不存在任何一个码字是系统中另一个码字的前缀(初始部分)。对于定长编码,这显然成立,因此该性质仅在变长编码中需要考虑。

例如,码字集合 $\{9, 55\}$ 具有前缀性质;而由 $\{9, 5, 59, 55\}$ 组成的编码则不具备,因为 “5” 是 “59” 的前缀,也是 “55” 的前缀。前缀码是一种唯一可译码:给定一个完整且准确的序列,接收方无需在单词之间使用特殊标记即可识别出每个单词。然而,也存在不是前缀码的唯一可译码;例如,前缀码的逆序仍然是唯一可译的(即后缀码),但它不一定是前缀码。

前缀码也被称为无前缀码、前缀条件码和瞬时码。虽然霍夫曼编码只是推导前缀码的众多算法之一,但前缀码也被广泛称为“霍夫曼编码”,即使该编码并非由霍夫曼算法产生。术语“逗号自由码”(comma-free code)有时也被用作无前缀码的同义词,但在大多数数学书籍和文章中,逗号自由码被用来指代自同步码,它是前缀码的一个子类。

使用前缀码时,消息可以作为连接的码字序列进行传输,而无需任何带外标记或(可选的)单词间的特殊标记来界定消息中的单词。接收方可以通过重复查找并移除构成有效码字的序列,无歧义地解码消息。这对于缺乏前缀性质的编码通常是不可行的,例如 $\{0, 1, 10, 11\}$:接收方在读取码字开头的 “1” 时,无法判断这到底是完整的码字 “1”,还是码字 “10” 或 “11” 的前缀;因此字符串 “10” 既可以被解释为单个码字,也可以被解释为单词 “1” 和 “0” 的连接。

变长霍夫曼编码、国家呼叫代码、ISBN 的国家和出版商部分、UMTS W-CDMA 3G 无线标准中使用的二次同步码,以及大多数计算机微架构的指令集(机器语言)都是前缀码。

前缀码不是纠错码。在实践中,消息可能会先用前缀码压缩,然后在传输前再次进行信道编码(包括纠错)。

对于任何唯一可译码,都存在一个具有相同码字长度的前缀码。克拉夫特不等式(Kraft’s inequality)刻画了唯一可译码中可能存在的码字长度集合。

在本题中,给定一个包含 $N$ 个码字的编码。每个单词仅包含数字 $\{0, 1, 2, 3, 4, 5, 6, 7, 8, 9\}$。你需要检查该编码是否满足前缀性质:系统中不存在任何一个码字是另一个码字的前缀。

输入格式

输入的第一行给出测试用例的数量 $T$ ($1 \le T \le 100$)。接下来是 $T$ 个测试用例。 每个测试用例的第一行包含一个整数 $N$ ($1 \le N \le 10,000$),表示码字的数量。 随后有 $N$ 行,每行包含一个码字。每个码字是一个长度不超过十位的数字序列。

输出格式

对于每个测试用例,输出一行 “Case #x: y”,其中 $x$ 是测试用例编号(从 1 开始),如果该编码是前缀码,则 $y$ 为 “Yes”,否则为 “No”。

样例

样例输入 1

3
2
9
55
4
9
5
59
55
4
01
01
123
321

样例输出 1

Case #1: Yes
Case #2: No
Case #3: No

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.