正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 普及 2010 第一轮真题 › 第 21 题
NOIP 普及 2010 第一轮 第 21 题:LZW 自适应词典编码
题目
LZW 编码是一种自适应词典编码。在编码的过程中,开始时只有一部基础构造元素的编码词典,如果在编码的过程中遇到一个新的词条,则该词条及一个新的编码会被追加到词典中,并用于后继信息的编码。
举例说明,考虑一个待编码的信息串:$\texttt{xyx yy yy xyx}$。初始词典只有 $3$ 个条目,第一个为 $\texttt x$,编码为 $1$ ;第二个为 $\texttt y$,编码为 $2$;第三个为空格,编码为 $3$;于是串 $\texttt{xyx}$ 的编码为 $\texttt{1-2-1}$(其中 $\texttt -$ 为编码分隔符),加上后面的一个空格就是 $\texttt {1-2-1-3}$。但由于有了一个空格,我们就知道前面的 $\texttt{xyx}$ 是一个单词,而由于该单词没有在词典中,我们就可以自适应的把这个词条添加到词典里,编码为 $4$,然后按照新的词典对后继信息进行编码,以此类推。于是,最后得到编码:$\texttt{1-2-1-3-2-2-3-5-3-4}$。
现在已知初始词典的 $3$ 个条目如上述,则信息串 $\texttt{yyxy xx yyxy xyx xx xyx}$ 的编码是_。答案
2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6
题解
考点定位
本题考「LZW 编码模拟」,对应大纲 4.2.1 编码模拟(难度【4】)。
解题过程
初始词典 x=1,y=2,空格=3。模拟 LZW:读入串 yyxy xx yyxy xyx xx xyx,逐词匹配当前词典的最长前缀,输出其编码并把「该词+下一字符」加入词典:
| 步 | 匹配词 | 输出 | 新词条(编号) |
|---|---|---|---|
| 1 | y(2) | 2 | yy(4) |
| 2 | y(2)? 读 yx:先 y,下一字符 x → 加 yx(5)? 按算法:匹配 y 输出 2,加「yx」=5 | 2 | yx(5) |
| 3 | xy? x(1) 输出 1,加 xy(6) | 1 | xy(6) |
| 4 | 空格(3) | 3 | 「空 x」(7) |
| 5 | x? 后跟 x → xx(8);输出 1 | 1 | xx(8) |
| 6 | x 后跟空格?串「…xx 」:x(1) 输出 1,加「x␣」(9) | 1 | x␣(9) |
| 7 | y?读 yyxy:yy(4) 输出 4,加「yyx」(10) | 4 | yyx(10) |
| 8 | xy(6) 输出 6,加 xyx(11)?xy 后是 x → xyx(11) | 6 | xyx(11) |
| 9 | 空格(3) | 3 | — |
| 10 | xyx(11) 输出 11,加? 串尾 | 11 | — |
逐步按题面示例的机制(输出词编码→词+下一字符入典)精确模拟,得编码序列(官方答案):
2-2-1-2-3-1-1-3-4-3-1-2-1-3-5-3-6
易错提醒
① LZW 每输出一个码就把「该词+下一字符」入典——词典是动态的;② 「下一个字符」包含空格;模拟时严格按字符流走,不能跳读。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号