You are on page 1of 322

HZ BOOKS

计 算 机 // 科
华0教育

t%
CENGAGE
Learning
原书第3版

计算理论导弓 近 克 尔 • 内 u 您 ( Michael Sipser )


m 麻 竹
~


段 磊 府 常 杰 屯寺 译谇~

叫 川 人¥

hitrod to the Theory of OMiipatatioii


/
‘ Third Edition

Introduction •

to the
Theory of
Computation
3rd edition

少 奢 •

觀 :

机 械 工 业 出 版 社
China Machine Press
@ ©
原书第3版

计算理论导引 迈克尔 • 西普塞 (Michael Sipser)


團 著
麻省理工学院
段磊唐常杰
等译
四州大学

Introduction to the Theory of Computation


Third Edition

Introduction •

to the
Theory of
Computation
3 rd edition n遵

-'
N ir •

' 入

© 机械工业出版社
China Machine Press
图书在版编目( CIP ) 数据

计算理论导引( 原书第 3 版 )/ ( 美 ) 西普塞 ( Sipser , M . ) 著 ;段磊等译 .一北京 :机械工


业出版社,2015.6
( 计算机科学丛书 )
书名原文 :Introduction to the Theory of Computation , Third Edition

-
ISBN 978 - 7 - 111 49971 - 8
I. 计… II . ① 西… ② 段… III . 计算技术 理论 IV . TP 301
-
中国版本图书馆 CIP 数据核字( 2015 ) 第 077899 号

本书版权登记号:图字 :01 -2014- 0329

Michael Sipser :Introduction to the Theory of Computation, Third Edition.


Copyright © 2013 by Cengage Learning .
Original edition published by Cengage Learning . All Rights reserved .
China Machine Press is authorized by Cengage Learning to publish and distribute
exclusively this simplified Chinese edition . This edition is authorized for sale in the People ’s
Republic of China only ( excluding Hong Kong , Macao SAR and Taiwan ) . Unauthorized
export of this edition is a violation of the Copyright Act. No part of this publication may
be reproduced or distributed by any means , or stored in a database or retrieval system ,
without the prior written permission of the publisher .
Cengage Learning Asia Pte. Ltd.
151 Lorong Chuan,#02-08 New Tech Park , Singapore 556741
本书原版由圣智学习出版公司出版。版权所有 ,盗印必究。
本书中文简体字翻译版由圣智学习出版公司授权机械工业出版社独家出版发行。此版本仅限在中华
人民共和国境内( 不包括中国香港 、澳门特别行政区及中国台湾 )销售。未经授权的本书出口将被视为
违反版权法的行为。未经出版者预先书面许可 ,不得以任何方式复制或发行本书的任何部分。
本书封面贴有 Cengage Learning 防伪标签,无标签者不得销售。

本书是计算理论领域的经典著作,以注重思路、深入引导为特色 ,系统地介绍计算理论的三大主要内
容 :自动机与语言、可计算性理论和计算复杂性理论。同时,重点讲解了可计算性和计算复杂性理论中的
某些髙级内容。全书通过启发性的问题、精彩的结果和待解决问题来引导读者挑战此领域中的髙层次问题。
新版的一大亮点是用一节的篇幅对确定型上下文无关语言进行了直观而不失严谨的介绍。
本书叙述由浅入深、详略得当,重点突出,不拘泥于技术细节,可作为髙等院校计算机专业髙年级本
科生和研究生的教材,也可作为相关专业教师和研究人员的参考书。

出版发行:机械工业出版社( 北京市西城区百万庄大街 22 号邮政编码:100037 )


责任编辑:迟振春 责任校对:董纪丽
印 刷:遛城市京瑞印刷有限公司 版 次 :2015 年 8 月第 1 版第 1 次印刷
开 本:185mm x 260 mm 1/16 印 张:19.5
书 号:ISBN 978 - 7-111- 49971-8 定 价 :69.00 元

凡购本书 , 如有缺页 、倒 页 、脱 页 ,由 本 社 发 行 部 调 换
客 服 热 线:
( 010 ) 88378991 88361066 ( 010 ) 88379604
投 稿 热 线:
购书热线 : ( 010 ) 68326294 88379649 68995259 .
读者信箱 : hzjsj@ hzbook com

版权所有 • 侵权必究
封底无防伪标均为盗版
本书法律顾问:北 京 大 成 律 师 事 务 所 韩 光 / 邹晓东
I 出版者的话
Introduction to the Theory of Computation , 3e

文艺复兴以来 ,源远流长的科学精神和逐步形成的学术规范 ,使西方国家在自然科学的


各个领域取得了垄断性的优势 ;也正是这样的优势 ,使美国在信息技术发展的六十多年间名
家辈出 、 独领风骚。在商业化的进程中,美国的产业界与教育界越来越紧密地结合 ,计算机
学科中的许多泰山北斗同时身处科研和教学的最前线 ,由此而产生的经典科学著作 ,不仅擘
划了研究的范畴,还揭示了学术的源变 ,既遵循学术规范 ,又自有学者个性 ,其价值并不会
因年月的流逝而减退。
近年 ,在全球信息化大潮的推动下 ,我国的计算机产业发展迅猛 ,对专业人才的需求日
益迫切。这对计算机教育界和出版界都既是机遇 ,也是挑战 ;而专业教材的建设在教育战略
上显得举足轻重。在我国信息技术发展时间较短的现状下 ,美国等发达国家在其计算机科学
发展的几十年间积淀和发展的经典教材仍有许多值得借鉴之处。因此 ,引进一批国外优秀计
算机教材将对我国计算机教育事业的发展起到积极的推动作用,也是与世界接轨 、建设真正
的世界一流大学的必由之路。
机械工业出版社华章公司较早意识到 “出版要为教育服务 ”。自 1998 年开始 ,我们就
将工作重点放在了遴选 、移译国外优秀教材上。经过多年的不懈努力 ,我们与 Pearson ,

-
McGraw Hill , Elsevier , MIT , John Wiley & Sons , Cengage 等世界著名出版公司建立了良
好的合作关系 ,从他们现有的数百种教材中甄选出 Andrew S .Tanenbaum ,Bjarne Stroustrup ,
Brain W. Kernighan , Dennis Ritchie , Jim Gray , Afred V. Aho , John E. Hopcroft , Jeffrey
D. Ullman , Abraham Silberschatz , William Stallings , Donald E. Knuth , John L. Hennessy ,
Larry L. Peterson 等大师名家的一批经典作品,以 “计算机科学丛书” 为总称出版 ,供读者
学习 、研究及珍藏。大理石纹理的封面 ,也正体现了这套丛书的品位和格调。
“计算机科学丛书 ” 的出版工作得到了国内外学者的鼎力相助 ,国内的专家不仅提供了

中肯的选题指导,还不辞劳苦地担任了翻译和审校的工作 ;而原书的作者也相当关注其作品
在中国的传播 ,有的还专门为其书的中译本作序。迄今,“计算机科学丛书” 已经出版了近

两百个品种 ,这些书籍在读者中树立了良好的口碑 ,并被许多高校采用为正式教材和参考书


籍。其影印版 “经典原版书库” 作为姊妹篇也被越来越多实施双语教学的学校所采用。
权威的作者 、 经典的教材 、 一流的译者 、严格的审校 、 精细的编辑 ,这些因素使我们的
图书有了质量的保证。随着计算机科学与技术专业学科建设的不断完善和教材改革的逐渐
深化,教育界对国外计算机教材的需求和应用都将步入一个新的阶段 ,我们的目标是尽善尽
美 ,而反馈的意见正是我们达到这一终极目标的重要帮助。华章公司欢迎老师和读者对我们
的工作提出建议或给予指正 ,我们的联系方法如下 :

华章网站 : www.hzbook .com


电 子 由 件 : hzjsj@hzbook . com
联系电话 : ( 010 ) 88379604
联系地址 : 北 京 市 西 城 区 百 万 庄 南 街 1 号 华章教育

邮政编码 : 100037 华章科技图书出版中心


译者序 I
Introduction to the Theory of Computation , 3 e

计 算 机 改 变 并 持 续 改 变 着 世 界 ,如 今 ,计 算 技 术 已 把 人 们 带 进 了 云 (云 计 算)、 物 ( 物
联 网)、人 (社 会 计 算)、海 (海 量 数 据 、大 数 据) 的 新 时 代 。
在 变 革 的 时 代 里 ,计 算 机 系 统 也 改 变 着 自 己 ,在 进 步 和 进 化 中 遵 循 了 一 组 潜 规 则—
计 算 理 论 ,这 套 理 论 描 述 和 论 证 了 计 算 机 的 能 与 不 能 ,界 定 了 计 算 能 力 的 极 限 。
业 内 人 士 常 评 说 某 人 为 某 问 题 设 计 了 一 个 比 较 快 的 算 法 ,好 到 什 么 程 度? 用 专 业 术 语
描 述 ,线 性 时 间 内 能 完 成 的 比 较 快 ,多 项 式 时 间 能 完 成 的 次 之 ,不 能 在 多 项 式 时 间 内 完 成
的 就 是 不 现 实 的 。但 是 ,大 数 据 时 代 的 来 临 修 正 了 这 一 观 念 ,对 于 大 数 据 问 题 ,线 性 时 间
也 嫌 太 长 ,因 为 需 要 “等 它 一 千 年”,人 们 呼 唤 亚 线 性 、 亚 亚 线 性 的 算 法 。
有 些 问 题 ,人 们 已 经 找 到 快 的 算 法 ;有 些 问 题 ,还 没 有 找 到 快 的 算 法 ,也 许 是 等 一 个
聪 明 程 序 员 的 出 现 。但 有 一 类 问 题 ,没 有 找 到 好 算 法 不 是 因 为 人 们 不 够 聪 明 ,而 是 根 本 就
不存在这样的算法。
计 算 理 论 将 描 述 算 法 的 本 质 ,揭 示 计 算 机 算 法 的 能 与 不 能 、 快 与 慢 以 及 足 够 快 的 近 似
技 巧 。从 这 个 角 度 来 看 ,计 算 理 论 是 计 算 机 的 灵 魂 ,是 应 用 计 算 机 成 功 解 决 实 际 问 题 的
保 障。
这 本 由 麻 省 理 工 学 院 名 师 Michael Sipser 编 撰 的 名 著 是 计 算 理 论 领 域 的 优 秀 书 籍 之 一 ,
对 于 非 纯 理 论 专 业 的 人 士 ,也 许 是 深 浅 程 度 最 合 适 的 。 自 1 9 9 6 年 第 1 版 问 世 ,该 书 历 经
近 二 十 年 ,获 得 了 学 术 界 的 公 认 和 教 育 界 的 好 评 。该 书 具 有 如 下 优 点 :
第 一 ,内 容 丰 富 ,编 排 合 理 ,展 现 了 计 算 机 科 学 研 究 的 广 度 和 深 度 。该 书 以 理 论 计 算
机 科 学 的 知 识 框 架 为 脉 络 ,系 统 地 讲 述 了 自 动 机 与 形 式 语 言 、 可 计 算 性 理 论 和 计 算 复 杂 性
理 论 等 计 算 理 论 的 重 要 内 容 。总 体 编 排 上 ,难 度 由 浅 入 深 、循 序 渐 进 ,易 于 学 习 。
第 二 ,文 字 清 晰 ,语 言 生 动 。作 者 以 引 导 、 举 例 为 叙 述 手 段 ,对 计 算 理 论 领 域 的 重 要
定 理 、 性 质 等 不 仅 给 出 证 明 ,而 且 讲 述 证 明 思 路 ,着 力 让 读 者 在 学 习 理 论 的 同 时 掌 握 证 明
的 技 巧 ,彰 显 了 作 者 在 此 领 域 的 深 厚 造 诣 和 娴 熟 的 教 学 手 法 。
第 三 ,各 章 设 有 练 习 和 问 题 ,并 提 供 了 部 分 习 题 的 解 答 。通 过 作 答 习 题 ,能 够 锻 炼 读
者 的 逻 辑 推 导 思 维 ,加 深 读 者 对 关 键 知 识 点 的 理 解 。
我 以 切 身 体 会 向 计 算 机 专 业 的 高 年 级 本 科 生 、 硕 士 生 和 博 士 生 推 荐 此 书 。我 在 本 科 阶
段 第 一 次 接 触 了 该 书 的 第 1 版 。 差 不 多 1 0 年 前 ,在 刚 开 始 博 士 阶 段 学 习 时 ,参 与 了 本 书
第 2 版 的 翻 译 工 作 。如 今 ,我 又 引 导 我 的 学 生 学 习 这 本 书 ,并 承 担 了 第 3 版 的 翻 译 工 作 。
作 为 多 重 身 份 的 “过 来 人”,我 有 独 特 的 体 会 。一 方 面 ,该 书 写 作 规 范 ,研 究 生 可 以 学 习
到 规 范 的 定 义 、 性 质 、 证 明 的 表 述 方 式 ,学 习 该 书 内 容 有 助 于 提 升 计 算 理 论 素 养 ,增 强 学
习 能 力 ;另 一 方 面 ,研 究 生 多 苦 于 论 文 理 论 深 度 不 够 ,也 不 知 如 何 分 析 问 题 ,认 真 领 会 该
书 讲 述 的 证 明 思 路 和 解 题 思 路 ,常 会 让 我 们 有 豁 然 开 朗 之 感 ,问 题 分 析 能 力 随 之 增 强 ,进
而 提 高 研 究 论 文 的 水 平。
相 较 于 本 书 第 2 版 ,第 3 版 的 内 容 更 新 主 要 在 于 增 加 了 关 于 确 定 型 上 下 文 无 关 语 言 的
V

阐述 ,这使得本书关于自动机理论和语言处理的介绍更为完整 。此外 ,第 3 版对每章后的


习题进行了增补和重新编排 。除了对第 3 版新增和修正内容进行翻译以外 ,我们还对第 2
版译文的错误进行了更正 。同时 ,我们尽可能保持新版译文的文风与第 2 版译文一致 。
本书由段磊 、 唐常杰主译 ,王文韬 、 王怡宁 、 杨皓 、 王梦洁也付出了艰辛的努力 。如
同我们在完成本书第 2 版翻译工作时所言 ,本书第 3 版的翻译工作是在先行者们工作的基
础上 ,再次接过接力棒 ,把接力赛再推进一程 。借此机会 ,向本书第 1 版译者 (北京大学
的张立昂教授 、 王捍贫教授和黄雄老师) 表示衷心的感谢 ,也向本书第 2 版译者表示衷心
的感谢 。同时 ,华章公司的姚蕾 、 朱劼编辑在翻译过程中给予了我们大力支持 ,向她们表
示衷心的感谢 。特别向阅读本书第 2 版译文并给予我们翻译指正的读者表示衷心的感谢。
由于水平有限 ,译文难免有错误和不妥之处 ,恳请读者批评指正 。

段 磊
2015 年 6 月 于 四 川 大 学
第 3 版 前 言|
Introduction to the Theory of Computation , 3 e

本 版 新 增 了 关 于 确 定 型 上 下 文 无 关 语 言 的 一 节 。我 选 择 这 个 主 题 有 以 下 几 个 原 因 。首
先 ,它 填 补 了 我 之 前 对 自 动 机 理 论 和 语 言 处 理 之 间 的 明 显 空 白 。以 前 的 版 本 介 绍 了 有 穷 自
动 机 以 及 图 灵 机 在 确 定 型 和 非 确 定 型 上 的 变 形 ,但 却 只 包 含 了 下 推 自 动 机 的 非 确 定 型 变
形 。因 此 ,增 加 关 于 确 定 型 下 推 自 动 机 的 讨 论 正 如 同 找 到 完 成 拼 图 游 戏 所 缺 的 那 块 。
其 次 ,确 定 型 上 下 文 无 关 文 法 理 论 是 LR (々) 文 法 的 基 础 ,同 时 也 是 自 动 机 理 论 在 编
程 语 言 和 编 译 器 设 计 上 重 要 且 非 平 凡 应 用 的 基 础 。这 个 应 用 将 一 些 关 键 概 念 ,包 括 确 定 型
和 非 确 定 型 有 穷 自 动 机 的 等 价 性 、 上 下 文 无 关 文 法 和 下 推 自 动 机 之 间 的 相 互 转 换 ,汇 聚 一
起 得 到 一 个 高 效 且 漂 亮 的 语 法 分 析 方 法 。这 里 我 们 实 现 了 理 论 和 实 践 的 相 互 联 系 。
最 后 ,虽 然 该 主 题 作 为 自 动 机 理 论 一 个 真 实 的 应 用 非 常 重 要 ,但 它 在 现 有 理 论 教
科 书 中 却 没 有 得 到 足 够 重 视 。 我 研 究 LRU ) 文 法 多 年 但 一 直 没 有 完 整 理 解 它 们 如 何
工 作 ,也 没 有 看 到 它 们 与 确 定 型 上 下 文 无 关 语 言 理 论 的 完 美 契 合 。 我 写 作 这 一 节 旨 在
为 理 论 学 者 和 实 践 者 提 供 关 于 这 个 领 域 直 观 而 不 失 严 谨 的 介 绍 ,并 由 此 对 该 领 域 做 出
贡 献 。需 要 注 意 的 是 :这 一 节 的 部 分 内 容 非 常 具 有 挑 战 性 ,因 此 基 础 理 论 课 程 的 教 师
可 考 虑 将 其 作 为 补 充 读 物 。之 后 的 章 节 不 依 赖 于 这 部 分 内 容 。
在 撰 写 本 版 的 过 程 中 ,很 多 人 给 了 我 直 接 或 间 接 的 帮 助 。 我 很 感 激 两 位 审 阅 者
Christos Kapoutsis 和 Cem Say 。 他 们 阅 读 了 这 一 版 新 内 容 的 初 稿 ,并 提 供 了 很 有 价 值
的 反 馈 意 见 。 在 Cengage Learning 的 一 些 人 协 助 了 本 书 的 出 版 工 作 ,特 别 是 Alyssa
Pratt 和 Jennifer Feltri-George。 Suzanne Huizenga 编 辑 了 文 字 ,ByteGraphics 的 Laura
Segel 绘 制 了 新 的 图 片 并 修 改 了 以 前 版 本 中 的 图 片 。
感 谢 我 在 MIT 的 助 教 : Victor Chen , Andy Drucker ,Michael Forbes , Elena Grigor -
escu , Brendan Juba , Christos Kapoutsis , Jon Kelner ,Swastik Kopparty,Kevin Matulef ,
Amanda Redlich , Zack Remscrim ,Ben Rossman , Shubhangi Saraf , Oren Weimann 0 他们
都 给 予 了 我 帮 助 ,包 括 :讨 论 新 的 问 题 并 给 出 解 决 方 法 ,提 出 如 何 让 学 生 理 解 课 程 内 容 的
见 解 。我 非 常 享 受 与 这 群 有 天 赋 、 有 热 情 的 年 轻 人 一 起 工 作 。
我 很 高 兴 收 到 了 来 自 世 界 各 地 的 邮 件 ,非 常 感 谢 你 们 的 建 议 、 问 题 和 思 路。这 里 有 一
个 相 关 人 员 列 表 ,他 们 的 意 见 对 这 个 版 本 产 生 了 影 响 :
Djihed Afifi ,Steve Aldrich , Eirik Bakke ,Suzanne Balik ,Victor Bandur , Paul Beame ,
Elazar Birnbaum ,Goutam Biswas ,Rob Bittner , Marina Blanton , Rodney Bliss , Promita
Chakraborty , Lewis Collier , Jonathan Deber , Simon Dexter , Matt Diephouse , Peter
Dillinger , Peter Drake , Zhidian Du , Peter Fejer , Margaret Fleck , Atsushi Fujioka , Vale-
rio Genovese , Evangelos Georgiadis , Joshua Grochow , Jerry Grossman , Andreas
Guelzow , Hjalmtyr Hafsteinsson , Arthur Hall III ,Cihat Imamoglu ,Chinawat Israd -
isaikul , Kayla Jacobs , Flemming Jensen , Barbara Kaiser , Matthew Kane , Christos
Kapoutsis , Ali Durlov Khan , Edwin Sze Lun Khoo ,Yongwook Kim , Akash Kumar , Elea -
1

zar Leal , Zsolt Lengvarszky , Cheng-Chung Li , Xiangdong Liang , Vladimir Lifschitz , Ry-
an Lortie ,Jonathan Low , Nancy Lynch , Alexis Maciel ,Kevin Matulef , Nelson Max ,
Hans- Rudolf Metz , Mladen Miksa , Sara Miner More , Rajagopal Nagarajan , Marvin Na-
kayama , Jonas Nyrup ,Gregory Roberts , Ryan Romero ,Santhosh Samarthyam , Cem Say ,
Joel Seiferas , John Sieg , Marc Smith , John Steinberger ,Nuri Ta§demir , Tamir Tassa ,
Mark Testa , Jesse Tjang , John Trammell , Hiroki Ueda , Jeroen Vaelen , Kurt L. Van
Etten , Guillermo Vazquez , Phanisekhar Botlaguduru Venkata , Benjamin Bing- Yi Wang ,
Lutz Warnke , David Warren , Thomas Watson , Joseph Wilson , David Wittenberg , Brian
Wongchaowart , Kishan Yerubandi , Dai Yi 0

最重要的是 ,我要感谢我的家人—我的妻子 Ina 以及我们的孩子 Rachel 和 Aaron 0

时光荏苒 ,岁月如梭 ,你们的爱就是一切 。

Michael Sipser
马 萨 诸 塞 州 ,剑 桥
2012 年 4 月
第 2 版前言 |
Introduction to the Theory of Computation , 3 e

大量读者来的电子邮件反映 ,第 1 版没有习题解答是一个缺陷 。 这一版弥补了这一缺


陷 。每一章现在都增加了 “习题选解” 小节 ,给出了该章的练习和问题中有代表性题目的
答案 。给岀了答案的问题就不能再作为有趣的有挑战性的家庭作业 ,为弥补这一损失 ,又
添加了若干新问题 。 教师可以和 www. course, com 上所指定的相应地区的销售代表联系 ,
索取一份教师手册 ,其中包含了附加的答案 。
第 2 版的国际版是针对国外读者的 。尽管涵盖了同样的主题 ,它和标准第 2 版还是有
所不同 ,并且不是用来替代标准第 2 版的 。
许多读者更喜欢学习更多的 “标准” 主题 ,比如 Myhill- Nerode 定理和 Rice 定理 。通
过将这些主题展示在给出答案的问题中 ,我部分地采纳了这些读者的意见 。没有将 My-
hill- Nerode 定理放到书本主体中是因为我认为 ,这门课程的目标是初步介绍而非深人研究
有穷自动机 。 有穷自动机在这里的角色是使学生通过研究计算的简单形式模型 ,为了解复
杂模型奠定基础 ,同时为后续的主题提供方便的例子 。 当然 ,一些人希望有更全面的内
容 ,同时另一些人觉得应该略去所有对有穷自动机的引用 ( 或者至少是依赖 )。尽管 Rice
定理对于不可判定性的证明是一个有用的 “工具”,第 2 版还是没有将它放到书本主体中 ,
因为一些学生可能只是机械地使用它而没有真正理解其作用。 换用归约来证明不可判定
性 ,可以为学习复杂性理论中出现的归约做更好的准备 。
我很感谢我的助教 Ilya Baran 、 Sergi Elizalde 、 Rui Fan 、 Jonathan Feldman 、 Ven -
katesan Guruswami 、 Prahladh Harsha 、 Christos Kapoutsis 、 Julia Khodor 、 Adam
Klivans 、 Kevin Matulef 、 Ioana Popescu 、 April Rasala 、 Sofya Raskhodnikova 和 Iuliu
Vasilescu , 他们帮助我草拟了若干新问题及其答案 。 Ching Law 、 Edmond Kayi Lee 和
Zulfikar Ramzan 也为给出答案付出了努力 。 感谢 Victor Shoup 提出了一个简洁的方法 ,
用于修整在第 1 版中出现在概率原始算法分析中的缺陷 。
感谢 Course Technology 出版社的编辑们的努力 ,尤其是 Alyssa Pratt 和 Aimee Poiri-
er 0 多谢 Gerald Eisman 、 Weizhen Mao 、 Rupak Majumdar 、 Chris Umans 和 Christopher
Wilson 所做的审校 。感谢 Jerry Moore 在编辑上的出色工作 ,还有 ByteGraphics 的 Laura
Segel ( lauras @ bytegraphics. com ) 精彩而又精确的图表再现 。
我所收到的电子邮件数量超乎预料 。收到来自这么多地方的这么多人的来信绝对是一
种快乐 。我会尽量回复并向我未曾回复者表示歉意 。我在此列岀对本书第 2 版提供了有益
的建议的人 ,同时对所有给我来信的人表示感谢。
Luca Aceto ,Arash Afkanpour ,Rostom Aghanian , Eric Allender ,Karun Bakshi ,
Brad Ballinger , Ray Bartkus , Louis Barton , Arnold Beckmann , Mihir Bellare , Kevin
Trent Bergeson , Matthew Berman , Rajesh Bhatt , Somenath Biswas , Lenore Blum ,
Mauro A. Bonatti , Paul Bondin , Nicholas Bone , Ian Bratt , Gene Browder , Doug Burke ,
Sam Buss , Vladimir Bychkovsky , Bruce Carneal , Soma Chaudhuri ,Rong-Jaye Chen ,
K

Samir Chopra ,Benny Chor ,John Clausen , Allison Coates ,Anne Condon ,Jeffrey Con-
sidine , John J . Crashell , Claude Crepeau ,Shaun Cutts,Susheel M. Daswani , Geoff Da-
vis , Scott Dexter , Peter Drake , Jeff Edmonds , Yaakov Eisenberg , Kurtcebe Eroglu ,
Georg Essl ,Alexander T. Fader ,Farzan Fallah ,Faith Fich ,Joseph E. Fitzgerald , Perry
Fizzano ,David Ford ,Jeannie Fromer , Kevin Fu , Atsushi Fujioka , Michel Galley ,
K. Ganesan , Simson Garfinkel , Travis Gebhardt , Peymann Gohari , Ganesh Go-
palakrishnan ,Steven Greenberg ,Larry Griffith , Jerry Grossman ,Rudolf de Haan ,Mi -
chael Halper , Nick Harvey , Mack Hendricks , Laurie Hiyakumoto , Steve Hockema ,
Michael Hoehle ,Shahadat Hossain , Dave Isecke ,Ghaith Issa ,Raj D. Iyer , Christian
Jacobi , Thomas Janzen , Mike D. Jones, Max Kanovitch , Aaron Kaufman , Roger
Khazan ,Sarfraz Khurshid , Kevin Killourhy , Seungjoo Kim , Victor Kuncak , Kanata
Kuroda ,Suk Y. Lee , Edward D. Legenski ,Li-Wei Lehman ,Kong Lei , Zsolt Leng-
varszky , Jeffrey Levetin , Baekjun Lim , Karen Livescu ,Thomas Lasko ,Stephen Louie ,
TzerHung Low , Wolfgang Maass , Arash Madani , Michael Manapat , Wojciech
Marchewka , David M. Martin Jr. , Anders Martinson , Lyle McGeoch , Alberto Medina ,
Kurt Mehlhorn , Nihar Mehta , Albert R. Meyer , Thomas Minka ,Mariya Minkova , Dai-
chi Mizuguchi , G. Allen Morris 冚 , Damon Mosk- Aoyama , Xiaolong Mou , Paul Muir ,
German Muller , Donald Nelson , Gabriel Nivasch ,Mary Obelnicki , Kazuo Ohta , Thom -
as M. Oleson , Jr. ,Curtis Oliver , Owen Ozier , Rene Peralta , Alexander Perlis ,Holger
Petersen , Detlef Plump , Robert Prince ,David Pritchard ,Bina Reed , Nicholas Riley ,
Ronald Rivest , Robert Robinson , Christi Rockwell , Phil Rogaway , Max Rozenoer ,

iferas , Joao Carlos Setubal ,Geoff Lee Seyon , Mark Skandera ,Bob Sloan , Geoff Smith ,
Marc L. Smith , Stephen Smith , Alex C. Snoeren , Guy St-Denis , Larry Stockmeyer ,
Radu Stoleru ,David Stucki ,Hisham M. Sueyllam , Kenneth Tam , Elizabeth Thompson ,
Michel Toulouse , Eric Tria ,Chittaranjan Tripathy , Dan Trubow ,Hiroki Ueda , Giora
Unger , Kurt L. Van Etten ,Jesir Vargas , Bienvenido Velez- Rivera , Kobus Vos , Alex
Vrenios ,Sven Waibel , Marc Waldman , Tom Whaley , Anthony Widjaja , Sean Wil-
liams , Joseph N. Wilson , Chris Van Wyk , Guangming Xing , Vee Voon Yee ,Cheng
Yongxi , Neal Young , Timothy Yuen , Kyle Yung , Jinghua Zhang , Lilia Zollei 。
当我夜以继日地坐在我的电脑屏幕前时 ,尤其要感谢我的家人 Ina 、 Rachel 和 Aaron
的耐心 、 理解和爱 。

Michael Sipser
马 萨 诸 塞 州 ,剑 桥
2004 年 12 月
第 1 版前言
Introduction to the Theory of Computation , 3 e

写给学生

欢迎使用本书!
将要幵始学习的是重要而又引人人胜的课题 :计算理论 。它包括计算机硬件 、软件以
及某些应用的基本数学特性 。这一课程试图回答什么是不能计算的 ,什么是能计算的 ,可
以算多快 ,要用多少存储 ,以及采用什么计算模型等 。这些问题与工程实践有着紧密的联
系 ,也具有纯理论的一面 。
许多同学主动盼望学习这门课程 ,有些同学可能只是为了完成计算机科学或者计算机
工程的学位必需的理论课程学分 他们也许认为理论比较神秘 、 难学且用处不大 。
通过学习 ,读者会发现理论既不神秘 、 也不讨厌 ,是好理解 、 甚至是有趣的 。理论计
算机科学有许多迷人而重要的思想 ,同时它也有许多细小的 、 有时甚至是乏味的细节 ,这
些细节可能令人感到厌倦 。 学习任何一门新的课程都是一件艰苦的工作。但是 ,如果能把
它适当地表述出来 ,学习就会变得容易和更愉快些 。本书的一个基本目标是让读者接触到
计算理论中真正令人激动的方面 ,而不陷人单调乏味之中 。 当然 ,对理论感兴趣的唯一途
径是努力去学习并掌握它 。
理论与实践是密切联系的 ,计算理论为实际工作者提供了在计算机工程中使用的理性
工具 。要为具体的应用设计一个新的程序设计语言吗? 本课程中关于语法的内容迟早是会
有用的 。要进行字符串搜索和模式匹配吗? 不要忘了有穷自动机和正则表达式 。 遇到了一
个看来需要比你能够提供的计算机时间还要多的问题吗? 想一想你学过的有关 NP 完 全 性
的内容 。 各种应用领域 ,如现代密码协议 ,都依赖于在这里将要学习的理论原则 。
理论是有意义的 ,它向读者展示了计算机新的 、 简单的 、 更加优美的一面 ,而通常我
们把计算机看作一台复杂的机器 。最好的计算机设计和应用出自完美的构思 。一门理论课
程可以提高审美意识 ,帮助读者建立更加优秀的系统 。
理论是实践的指南 ,学习理论能够扩展你的思维 。计算机技术更新很快 ,专门的技术
知识虽然今天有用 ,但是仅仅在几年内就会变成过时的东西。 而能力具有持久的价值 ,课
程应该注重培养思考能力 、 清楚准确的表达能力 、 解决问题的能力以及知道问题什么时候
还没有解决的能力 ,理论能够训练这些能力 。
除了实际的考虑 ,几乎每一位使用计算机的人都想了解这个神奇的创造 ,它的能力 ,
以及它的局限性 。 为了解答某些基本问题 ,在过去的 30 年里 ,一个全新的数学分支已经
确立 。这里还有一个重大问题没有解决 :如果给定大的自然数 ,例如有 500 位 ,能够在合
理的时间内把它分解成素数的乘积吗? 即使使用一台超级计算机 ,现今还没人知道怎样才
能在宇宙毁灭之前做完这件事 ! 因子分解问题与现代密码系统中的某些密码有关 。去寻找
一个快速的因子分解方法吧 ,也许 ,读者会因此而一举成名!
XI

写给教师

本书是计算机学科高年级本科生或研究生的计算理论入门教材 。它涉及计算理论的数
学论述 ,包括叙述和证明定理的基本技能 。作者努力使本书适用于那些缺乏定理证明的基
本训练的学生 ,当然 ,有较多这种经验的学生会学习得更轻松 。
强调清楚和生动是本书叙述的一个特色 ,本课程对某些低层次的细节强调了直觉和
“大的轮廓”。例如 ,虽然在第 0 章介绍了证明的归纳法以及其他的数学预备知识 ,但在后
面部分它并不是重点 。 关于自动机的各种构造方法的正确性 ,一般不用归纳证明 。 只要叙
述清楚 ,这些构造方法已经是令人信服的 ,不需进一步论证 。 归纳证明反而可能把学生搞
糊涂而不是给人以启迪 。归纳法是比较复杂的技术 ,可能还有些神秘 。对十分明显的事情
用归纳法作反复的说明可能会化简为繁 、 违反初衷 ,使学生认为数学证明是一种形式化手
法 ,而不是教给他们懂得什么是有说服力的证据 ,什么不是有说服力的证据 。
本书第二部分和第三部分没有采用伪码描述算法 ,而用了自然语言描述 。书中没有花
很多时间去设计图灵机 ( 或任何其他形式模型 ) 的程序 。现在的学生都有程序设计的经

-
历 ,觉得丘奇 图灵论题是不言自明的 。因此我不去用很长的篇幅叙述用一个模型模拟另
一个模型来说明它们的等价性 。
除增加直观性和压缩某些细节外 ,本书内容组织符合计算理论中的典型标准 。理论工
作者将发现 ,素材的选取 、 术语以及内容的前后顺序都与其他广泛使用的教材一致 。只在
少数地方 ,当我发现标准的术语十分模糊或会引起混淆时 ,才引进了新的术语 。例如 ,引
进 名 词 映 射 可 归 约 性 代 替 多 一 可 归 约 性。
习题是学习与数学相关的科学必不可少的环节 。书中的习题分成两大类 ,练习用来复
习定义和概念 。问题需要多动些脑筋 。带星号的问题更难一些。本书努力使练习和问题令
人感兴趣 ,并有挑战性 。

反馈给作者

互联网为作者与读者之间的交流提供了新的机会 。我收到很多电子邮件 ,对本书的初


版提出了建议 、 赞许和批评 ,或者指出错误 。请继续来函 。只要有时间 ,我尽量亲自给每
一个人回信。与本书有关的电子邮箱是
sipserbook @ math.mit . edu
另外 ,还有一个 Web 站点 ,包括一张勘误表 。 可能还有一些其他材料也要加入这个
站点用来帮助教师和学生 。请告诉我你希望在这里看到什么 。 这个站点的地址是
http: / / www- math.mit.edu / sipser / book. html

致谢

如果没有众多朋友 、 同事以及家人的帮助 ,我将无法完成这本书 。


我要感谢帮助我形成科学观和教育风格的各位老师 ,其中有五位非常突出 。尤其是我
的论文指导导师 Manuel Blum , 他以独有的方式激励学生 ,充分展现了他的激情和关怀 。
I

他是我和许多人的楷模 。感谢 Richard Karp 将我领入复杂性理论的大门 ;John Addison


为我讲授逻辑并布置了那些精彩的家庭作业 ;Juris Hamnanis 使我了解了计算理论 ;还有
我的父亲 ,他告诉了我什么是数学 、 计算机以及教学艺术 。
本书源自我在麻省理工学院讲授了 15 年的一门课程的教案和笔记。班上的学生们通
过我的讲解做了课程笔记 ,希望他们原谅我不能将所有人一一列出 。 我多年的助教 Avrim
Blum 、 Thang Bui 、 Andrew Chou 、 Benny Chor 、 Stavros Cosmadakis 、 Aditi Dhagat 、
Wayne Goddard 、 Parry Husbands 、 Dina Kravets 、 Jakov Kucan 、 Brian O’ Neill 、 Ioana
Popescu 以及 Alex Russell 帮助我编辑和充实了这些笔记 ,并提供了部分家庭作业问题 。
大约三年前 ,Tom Leighton 建议我写一本关于计算理论的教科书 。 我也曾多次有过
这个念头 ,但正是 Tom 的建议才使我付诸行动 。我非常感激和珍视他对于本书写作和其
他许多事情的慷慨建议 。
我还想感谢 Eric Bach 、 Peter Beebee 、 Cris Calude 、 Marek Chrobak 、 Anna Chefter 、
Guang-Ien Cheng 、 Elias Dahlhaus 、 Michael Fischer 、 Steve Fisk 、 Lance Fortnow 、 Henry
J . Friedman 、 Jack Fu 、 Seymour Ginsburg 、 Oded Goldreich 、 Brian Grossman 、 David
Harel 、 Micha Hofri 、 Dung T. Huynh 、 Neil Jones 、 H . Chad Lane 、 Kevin Lin 、 Michael
Loui 、 Silvio Micali 、 Tadao Murata 、 Christos Papadimitriou 、 Vaughan Pratt 、 Daniel
Rosenband 、 Brian Scassellati 、 Ashish Sharma 、 Nir Shavit 、 Alexander Shen 、 Ilya Shlya-
khter 、 Matt Stallmann 、 Perry Susskind 、 Y. C. Tay 、 Joseph Traub 、 Osamu Watanabe 、
Peter Widmayer 、 David Williamson 、 Derick Wood 以及 Charles Yang 所提供的意见和建
议 ,以及他们在本书写作过程中提供的帮助 。
下述各位为本书的改进提供了意见 :Isam M. Abdelhameed 、 Eric Allender 、Shay Ar-
tzi 、 Michelle Atherton 、 Rolfe Blodgett 、 AI Briggs 、 Brian E. Brooks 、 Jonathan Buss 、
Jin Yi Cai 、 Steve Chapel 、 David Chow 、 Michael Ehrlich 、 Yaakov Eisenberg 、 Farzan
Fallah 、Shaun Flisakowski 、 Hjalmtyr Hafsteinsson 、 C. R. Hale 、 Maurice Herlihy 、 Veg-
ard HolmedahK Sandy Irani 、 Kevin Jiang 、 Rhys Price Jones 、 James M. Jowdy 、 David
M. Martin Jr. 、 Manrique Mata- Montero 、 Ryota Matsuura 、 Thomas Minka 、 Farooq Mo-
hammed > Tadao Murata 、 Jason Murray 、 Hideo Nagahashi 、 Kazuo Ohta 、 Constantine
Papageorgiou 、Joseph Raj 、 Rick Regan 、 Rhonda A. Reumann 、 Michael Rintzler 、 Arnold
L. Rosenberg 、 Larry Roske 、 Max Rozenoer 、 Walter L. Ruzzo 、 Sanatan Sahgal 、 Leonard
Schulman 、 Steve Seiden 、 Joel Seiferas 、 Ambuj Singh 、 David J . Stucki 、 Jay ram
S. Thathachar 、 H. Venkateswaran 、 Tom Whaley 、 Christopher Van Wyk 、 Kyle Young 以
及 Kyoung Hwan Yun 0

Robert Sloan 在他执教的一个班上使用了本书手稿的早期版本 ,并通过使用经验向我


提供了宝贵的意见和想法 。 Mark Herschberg 、 Kazuo Ohta 和 Latanya Sweeney 通读了手
稿的各部分并提供了广泛的改进建议 。Shafi Goldwasser 为我提供了第 10 章的素材 。
我得到了 William Baxter 专 业 的 技 术 支 持 ,他 编 写 了 实 现 内 部 设 计 的 宏 语 言 包
LATEX 0 麻省理工学院数学系的 Larry Nolan 保证了所有事务的正常进行 。
1

同 PWS 出版社的人们一起工作创作最终作品是一件很愉快的事 。我在此感谢 Michael


Sugarman 、 David Dietz 、 Elise Kaiser 、 Monique Calello 、Susan Garland 和 Tanja Brull ,
因 为 我 和 他 们 的 接 触 最 为 频 繁 ,但 我 知 道 还 有 许 多 人 也 为 此 付 岀 了 努 力 。 感 谢 Jerry
Moore 的审稿 、 Diane Levy 的封面设计以及 Catherine Hawkes 的版式设计 。
-
感谢美国国家科学基金项目 CCR 9503322 给予的支持 。
我 的 父 亲 Kenneth Sipser 和 姐 姐 Laura Sipser 将 书 中 的 图 表 转 换 成 了 电 子 格 式 。
我 的 另 一 位 姐 姐 Karen Fisch 为 我 们 解 决 了 许 多 使 用 电 脑 的 紧 急 问 题 ,我 的 母 亲
Justine Sipser 用 她 那 慈 母 的 建 议 帮 助 我 。感 谢 他 们 在 疯 狂 的 截 止 时 间 、 糟 糕 的 软 件
等困难环境下的付出。
最 后 ,是 我 所 爱 的 妻 子 Ina 和 我 的 女 儿 Rachel ,感 谢 她 们 对 所 有 这 一 切 的 理 解 和
容 忍。

Michael Sipser
马 萨 诸 塞 州 ,剑 桥
1996 年 10 月
目 录I
Introduction to the Theory of Computation , 3 e

出版者的话 1.2 非确定性 29


译者序 1.2.1 非确定型有穷自动机的形式化
第 3 版前言 d 32
第 2 版前言 1.2.2 NFA 与 DFA 的等价性 33
第 1 版前言 1.2.3 在正则运算下的封闭性 36
1.3 正则表达式 38
第0章 绪 论
1.3.1 正则表达式的形式化定义 ••• •• 38
0.1 自 动 机 、可 计 算 性 与 复 杂 性
1 . 3.2 与有穷自动机的等价性 40
0.1.1 计算复杂性理论
1.4 非正则语言 46
0.1.2 可计算性理论 2 练习 50
0.1.3 自动机理论 2 问题 54
0.2 数学概念和术语 2 习题选解 58
0.2.1 集合 2 第2章上下文无关文法 62
0.2.2 序列和多元组 4 2.1 上下文无关文法概述 62
0.2.3 函数和关系 4 2.1.1 上下文无关文法的形式化
0.2.4 图 6 定义 63

0.2.5 字符串和语言 8 2.1.2 上下文无关文法举例 64

0.2.6 布尔逻辑 9 2.1 . 3 设计上下文无关文法 65

0.2.7 数学名词汇总 10 2.1.4 歧义性 66

0.3 定 义 、定 理 和 证 明 11 2.1.5 乔姆斯基范式 67


0.4 证明的类型 13
2.2 下推自动机 68

0.4.1 构造性证明
2.2.1 下推自动机的形式化定义 • 69
13
2.2.2 下推自动机举例 70
0.4.2 反证法 14
2.2.3 与上下文无关文法的等价性
.
0 4.3 归纳法 15
••• 72
2.3 非上下文无关语言 77
练习 16
2.4 确定型上下文无关语言 79
问题 17
2.4.1 DCFL 的性质 82
习题选解 18
2.4.2 确定型上下文无关文法 …• 83
第一部分自动机与语言 2.4.3 DPDA 和 DCFG 的 关 系 91
2.4 . 4 语 法 分 析 和 LRa ) 文 法 94
第1章正则语言 20
练习 96
1.1 有穷自动机 20
问题 98
1.1.1 有穷自动机的形式化定义 22 习题选解 100
1.1 2 . 有穷自动机举例 23
第二部分可计算性理论
1.1 . 3 计算的形式化定义 25
1.1 4 . 设计有穷自动机 25 第 3章 丘 奇 图灵论题 - 104
1.1 . 5 正则运算 27 3.1 图灵机 104
3.1.1 图灵机的形式化定义 105 6.1.3 应用 158
3.1.2 图灵机的例子 107 6.2 逻辑理论的可判定性 159
3.2 图灵机的变形 110 6.2.1 一个可判定的理论 …• 161
3.2.1
3.2 . 2
多带图灵机
非确定型图灵机 …•
111
112
6.2.2
6.3 图灵可归约性
— 个不可判定的理论 • 163
164
.
3.2 3 枚举器 113 6.4 信息的定义 165
3 . 2.4 与其他模型的等价性 114 6.4.1 极小长度的描述 166
3.3 算法的定义 114 6.4.2 定义的优化 168
.
3.3 1 希尔伯特问题 115 6.4.3 不可压缩的串和随机性 168
3.3.2 描述图灵机的术语 • 116 练习 170
练习 118 问题 170
问题 119 习题选解 171
习题选解 120
第 4章 可 判 定 性 122 第三部分复杂性理论
4.1 可判定语言 122
第 7章 时 间 复 杂 性 174
4.1.1 与正则语言相关的可判定性
7.1 度量复杂性 174
问题 122
7.1.1 大 O 和小 o 记法 … 174
4.1.2 与上下文无关语言相关的
7.1 . 2 分析算法 176
可判定性问题 124
4.2 不可判定性 126 7.1 . 3 模型间的复杂性关系 178

4.2.1 对角化方法 127


7.2 P类 180

4.2 . 2 不可判定语言 130 7.2.1 多项式时间 180

4.2.3 一个图灵不可识别语言 131 7.2.2 P 中的问题举例 ••• • 181


练习 132 7.3 NP 类 184
问题 133 7.3.1 NP 中 的 问 题 举 例 • 187
习题选解 134 7.3.2 P 与 NP 问 题 188
第 5章 可 归 约 性 136 7.4 NP 完全性 188
5.1 语言理论中的不可判定问题 136
7.4.1 多项式时间可归约性 189
5.2 一个简单的不可判定问题 • 143
7.4.2 NP 完 全 性 的 定 义 • 191
5.3 映射可归约性 148
7.4.3 库 克-列 文 定 理 •• • • 192
5.3.1 可计算函数 148
7.5 几个 NP 完全问题 196
5.3 . 2 映射可归约性的形式化
7.5.1 顶点覆盖问题 196
定义 148
练习 151
7.5.2 哈 密 顿 路 径 问 题 … • 198

问题 151 7.5 . 3 子集和问题 201


习题选解 153 练习 202
第 6 章 可 计 算 性 理 论 的 高 级 专 题 … J5 5 问题 203
6.1 递归定理 155 习题选解 207
6 . 1.1 自引用 155 第8章 空 间 复 杂 性 208
6.1.2 递归定理的术语 157 8.1 萨 维 奇 定 理…• 209
m

8.2 PSPACE 类 210 10.2.3 只读一次的分支程序 • • • • 254


8.3 PSPACE 完全性 … 211 10.3 交错式 257
8.3.1 TQBF 问题 … 212 10.3.1 交错式时间与交错式空间 ••• 257
8.3.2 博弈的必胜策略 214 10.3.2 多项式时间层次 260
8.3.3 广义地理学 … 215 10.4 交互式证明系统 260

8.4 L 类和 NL 类 219 10.4.1 图的非同构 261


8.5 NL 完全性 220 10.4.2 模型的定义 261
8.6 NL 等于 coNL … 222 10.4.3 IP = PSPACE 263
练习 224 10.5 并行计算 270
问题
习题选解
224
226
10.5.1
10.5.2

NC 类
致布尔电路 270
272
第 9章 难 解 性 228 10.5.3 P 完全性 273
9.1 层次定理 228 10.6 密码学 273
9.2 相对化 … 236
10.6.1 密钥 274
9.3 电路复杂性 238
10.6.2 公钥密码系统 275
练习 244
10.6.3 单向函数 275
问题 245
习题选解 245 10.6.4 天窗函数 277

第 10 章复杂性理论高级专题 247 练习 277

10.1 近似算法 247 问题 278

10.2 概率算法 248 习题选解 278


10.2.1 BPP 类 249 参考文献 280
10.2.2 素数性 250 索引 284
I 第0章
Introduction to the Theory of Computation , 3e

绪 论

本章先概述了本书中讲述的计算理论涉及的范围 ,然后学习或者复习一些后面需要用
到的数学知识。

0. 1 自 动 机 、可 计 算 性 与 复 杂 性
本书重点在计算理论的三个传统的核心领域 :自动机 、 可计算性和复杂性 。是什么将
这三个领域联系在一起的呢? 这就是 :
计 算 机 的 基 本 能 力 和 局 限 性 是 什 么?
要回答这个问题应追溯到 20 世纪 30 年代 ,当时的数理逻辑学家们首先开始探究什么是计
算 。自那时起 ,计算机技术的发展显著地增强了人们的计算能力 ,并且把这个问题从理论
王国带到人们关心的现实世界 。
对这三个领域 ( 自动机 、 可计算性和复杂性) 中的任一个领域 ,人们都会对这个问题
做出不同的解释 ,并且对不同的解释会有各不相同的答案 。 在本章之后 ,本书就这三个领
域中的每个领域分别独立介绍 。 在此 ,我们以相反的顺序 (复杂性 、 可计算性 、 自动机 )
介绍这些领域 ,因为这样能够帮助大家更好地理解本书的内容 。

0. 1 . 1 计算复杂性理论
现实中 ,计算的问题是多种多样的 ,有的容易 ,有的困难 。例如 ,排序是一个容易的
问题 ,按升序排列一张数字表 ,即使一台小型计算机也能迅速处理 100 万个数 。相对于时
间表问题而言 ,比如要制定某所大学的课程表 ,课程表必须满足某些合理的限制 (比如不
能有两个班在同一时间使用同一教室 )。 时间表问题似乎比排序问题复杂得多。 如果有
1000 个班需要排课 ,即使我们使用一台超级计算机 ,也可能需要花若干世纪的时间才能
制定出一份最好的课程表 。
那 么 是 什 么 使 得 某 些 问 题 很 难 计 算 ,而 又 使 另 一 些 问 题 容 易 计 算 呢?
这就是复杂性理论的核心问题 。 值得注意的是 ,尽管在过去的 40 多年里对该问题进行了
深入细致的研究 ,但是我们至今仍然没有它的答案 。接下来 ,我们将探究这个迷人的问题
以及它的一些分支领域 。
到目前为止 ,科研工作者发现了一个根据计算难度给问题分类的完美体系 ,这是复杂性
理论的一个重要成果。它类似于按照化学性质给元素分类的周期表。按照该体系 ,即使我们
还不能证明问题是难计算的 ,但也能够提岀一种给出某些问题是难计算的证据的方法。
当面对一个似乎很难计算的问题时 ,往往会有若干选择 。首先 ,通过弄清问题困难的
根源 ,我们可能会做某些改动 ,使问题变得容易解决 。其次 ,我们可能会转而去求问题的
一个并不完美的解 。在某些情况下 ,寻找问题的近似最优解会相对容易一些 。再者 ,有些
问题仅仅在最坏的情况下是困难的 ,而在绝大多数情况下是容易的 。就应用而言 ,一个偶
尔运行得很慢而通常运行得很快的程序是能够令人满意的 。 最后也可以选择其他计算类
2 第0 章 諸 论

型 ,如能够加速某些计算任务的随机计算 。
受到复杂性理论直接影响的一个应用领域是密码技术 ,这是一个古老的研究领域 。 在
绝大多数领域中 ,选择容易计算的问题比选择难计算的问题更可取 ,因为求解容易问题的
代价更小。密码技术与众不同 ,它特别需要难计算的问题 ,而不是容易计算的问题 。因为
在不知密钥或口令时 ,密码应该是很难破解的 。复杂性理论给密码研究人员指出了寻找难
计算问题的方向 ,围绕这些问题他们已经设计出新的创造性的编码 。

0. 1 . 2 可计算性理论
在 20 世纪前半叶 ,像哥德尔 ( KurtG del )、 图灵 ( Alan Turing ) 及 丘 奇 ( Alonzo

^
Church ) 这样的数学家们 ,发现一些基本问题是不能用计算机解决的 。确定一个数学命题
是真或是假就是这样一个例子。这项任务是数学家们的工作 ,因为它属于数学王国的范
畴 ,所以用计算机来解决似乎很自然 。但是 ,没有计算机算法能够完成这项任务 。
关于计算机理论模型思想的发展就是这一具有深远意义的研究成果之一 ,它最终会帮
助人们制造出实用的计算机 。
可计算性理论与复杂性理论是密切相关的。在复杂性理论中 ,目标是把问题分成容易
计算的和难计算的 ;而在可计算性理论中 ,是把问题分成可解的和不可解的 。可计算性理
论引入了一些在复杂性理论中使用过的概念。

0 . 1 .3 自动机理论
自动机理论阐述了计算的数学模型的定义和性质。这些模型在计算机科学的若干应用
领域中起着作用。一个模型是有穷自动机模型 ,它用在文本处理 、 编译程序以及硬件设计
中 ;另一个模型是上下文无关文法模型 ,它用在程序设计语言和人工智能中 。
自动机理论是学习计算理论的非常好的起点 。可计算性理论和复杂性理论需要对计算
机给岀一个准确的定义 。自动机理论让我们在介绍与计算机科学的其他非理论领域有关的
概念时可以使用计算的形式化定义 。

0.2 数学概念和术语
与任何数学科目一样 ,开始时 ,我们先讨论一下预计要用到的基本的数学对象 、 工具
和概念 。

0 . 2. 1 集合
集合 (set ) 是一组对象 ,把它看成一个整体 。集合可以包含任何类型的对象 ,包括
数 、 符号甚至其他集合 。集合中的对象称为它的元素 ( element ) 或 成 员 ( member )。 集
合可以用几种方式形式化地描述 。一种方式是在大括号内列出它的元素 。例如 ,集合
{ 7 ,21 ,57 }
包含元素 7 , 21 和 57 。符号 和 6 分别表示集合成员和非集合成员 。如 ,76 ( 7 ,21 ,57 } ,
e
8 $ < 7 ,21 ,57 } 对于 A 和 B 这两个集合 ,如果 A 的每个成员也是 B 的成员 ,则称 A 为 B
0

的子集 (subset ),记 作 如 果 A 为 B 的子集且不等于 B ,则称 A 为 B 的真子集


( proper subset ),记作 A
集合与描述它的元素的排列顺序无关 ,也不考虑其元素的重复 。 { 57 ,7 ,7 ,7 ,21 } 和
第0 章 绪 论 3

{ 7 , 21 , 57 } 表 示 同 一 个 集 合 。 如 果 确 实 要 考 虑 元 素 出 现 的 次 数 ,则 把 它 称 作 多 重 集 合
( multiset ) . 例如 , { 7 } 和 { 7 , 7 } 作为多重集合是不相同的两个集合 ,而作为集合是同
一个集合 。 无穷集合 ( infinite s e t ) 是包含无穷多个元素的集合 。不可能列岀无穷集合的

_
所有元素 ,所以有时用记号 “…” 表示 “ 集合的元素序列将永远继续下去”。 因 此 ,我们
把自然数集 ( s e t of natural numbers ) N 写为
.
2 ,3 广 }
{ 1,
把整数集 ( set of integers ) Z 写为
{• •,一 2,
一 1,
0,1,
2, }
不含任何元素的集合称作空集 ( empty set ) , 记为 0。通 常 ,若集合由唯一一个元素组成 ,
则把它称作单元素集合 ( singleton set );若集合恰好只包含两个不同元素 ,则 被 称 作 二 元
集 合 ( unordered pair ) 0

当我们描述由服从某种规则的元素组成的集合时 ,通常写为 {〃 1 关 于〃的 规 则 }。 例


如 ,U 丨对于某个 m 6 N , 2
},它表示由完全平方数组成的集合 。
对给定的两个集合 A 和 B ,把 A 和 B 中的所有元素合并为一个大集合 ,这 样 得 到 的
集合称为 A 和 B 的 并 集 ( union ) , 记为 AUB。既 在 A 中 又 在 B 中的所有元素组成的集合
称 为 A 和 13 的 交 集 ( intersection ) , 记为 AHB。所 有 需 要 考 虑 的 、 但不在 A 中的元素组
成的集合称为 A 的 补 集 ( complement ), 记 为 A。
数学中通常用形象化的图形来帮助阐明某个概念 。对于集合 ,我们采用所谓的文氏图
( Venndiagram ) 来描述 。通 常 把 集 合 表 示 为 圆 圈 围 成 的 区 域 。 例 如 ,在 图 0 1 中 ,用 -
“以 t 开 头” 这个图来表示以字母 “ t” 开头的英文单词组成的集合 。图 中 的 圆 圈 表 示 “以
t 开 头 ” 的集合 ,集合的几个元素表示为圆内的几个点 。

-
类似地 , 在图 0 2 中的圆圈表示以字母 “ z” 结尾的英文单词组成的集合 。

以z结尾
terrific quartz
tundra
theory razzmatazz

图0 1 - 以 “ t” 开 头 的 英 文 单 词 集 合 的 文 氏 图 图 0 2 - 以 “ z” 结尾的英文单词集合的文氏图

如果在同一个文氏图中表示两个以上的集合 ,为了表明它们具有某些共同的元素 ,应
该把它们画成部分重叠在一起 ,如图 0 3 所 示 。例如 ,单 词 topaz 就是在两个集合中 。图
中还有一个圆圈表示 “以 j 开 头” 的 集 合 ,由于没有任何一个单词同时在这两个集合中 ,
-
所以它和表示 “以 t 开头” 的圆圈不重叠 。
图 0 - 4 中的两个文氏图描述了集合 A 和 B 的并集和交集 。

以t开头 以Z 开头 以j开头

( a) A U B (b)
^ n^
图 0- 3 圆的重叠部分表明有共同元素 图 0- 4 表示并集和交集的文氏图
4 第0 章 绪 论

0 . 2. 2 序列和多元组
序 列 ( sequence ) 是 某 些 元 素 或 成 员 按 某 种 顺 序 排 成 的 一 个 列 表 。通 常 把 它 写 在 一 对
圆 括 号 内 指 明 它 为 一 个 序 列 。例 如 ,序 列 7 ,2 1 ,
57 可写为
( 7 ,2 1 ,5 7 )
在 集 合 中 可 不 考 虑 元 素 的 顺 序 ,但 在 序 列 中 要 考 虑 元 素 的 顺 序 。 因 此 ,(7 ,2 1 ,
57) 和

_
( 5 7 ,7 ,2 1 ) 是 两 个 不 同 的 序 列 。类 似 地 ,在 集 合 中 元 素 是 否 重 复 无 关 紧 要 ,而 在 序 列 中 元
素 是 否 重 复 却 很 重 要 。例 如 序 列 ( 7 ,7 ,2 1 ,
5 7 ) 与 前 两 个 序 列 都 不 相 同 ,而 集 合 { 7 ,2 1 ,
5 7 } 与 { 7 ,7 ,2 1 ,57 } 是 相 同 的 集 合 。
与 集 合 一 样 ,序 列 也 可 以 是 有 穷 序 列 或 者 无 穷 序 列 。 通 常 把 有 穷 序 列 称 为 多 元 组
( tuple ) 々 个 元 素 的 序 列 称 为 々 元 组 (htuple )。例 如 ,
0 (7 ,2 1 ,
5 7 ) 为 一 个 3 元 组 。2 元 组
也 称 为 有 序 对 ( ordered pair )。
集 合 与 序 列 可 以 作 为 其 他 集 合 或 序 列 的 元 素 。 例 如 ,A 的 幂 集 ( p o w e r s e t ) 为 A 的
所 有 子 集 的 集 合 。设 A 为 集 合 { 0 ,1 } , 则 A 的 幂 集 为 集 合 { 0 ,{ 0 } ,< 1 } ,{ 0 ,1 } > 0 元素为
0 和 1 的 所 有 有 序 对 组 成 的 集 合 为 {( 0 ,0 ),
(0 ,
1),
(1 ,
0 ),
(1,
1 )}。
设 A 和 B 为 两 个 集 合 ,A 和 B 的 笛 卡 儿 积 (Cartesian product ) 或 叉 积 ( cross product )
为 这 样 一 个 集 合 ,它 是 第 一 个 元 素 为 A 的 元 素 、 第 二 个 元 素 为 B 的 元 素 的 所 有 有 序 对 组
成 的 集 合 ,记 作 AXB。
设 焱 ={ 1 , : 2:
2 } 和 B ={ x ,y ,},则
x) ,
AXB= { (l, :
(l , (l ,
y), z) , :r ) ,
(2 , ( 2 , 30 ,
(2 ,
z) }
还可以有 A 个集合 A Az ,
…,A* 的 笛 卡 儿 积 ,记 为 A i X A 2 X … X A 。它 是 由 所 有 々
元 组 (a 1

dEB
? CL 2
^
… ,Q ) 组 成 的 集 合 ,其 中 A G A;。
设 A 和 B 两 个 集 合 与 例 0 . 1 中 的 A 、 B 相 同 ,则
A X B X A ={( 1山1 ), (1山2 ), (1 ,3,1 ),
/ (1 , ,
3;2 ),
( 1,2:,1 ) , 2:
(1 , , 2), (2 ,
X, 1),
(2 ,:C ,2),
(2, :y ,l ) , :y ,2 ) ,
(2 , (2 ,z,l),(2 ,z, 2)}
集 合 自 身 的 笛 卡 儿 积 可 采 用 如 下 缩 写 形 式:

AX AX …X A =
dEH 集 合 N2 等 于 N X N 。它 是 由 所 有 自 然 数 的 有 序 对 组 成 的 集 合 ,也 可 以 写 为
I

^
{ 分1 } 0 ■

0 . 2. 3 函数和关系
对 数 学 而 言 ,函 数 是 核 心 。函 数 ( function ) 是 一 个 建 立 输 人 输 岀 关 系 的 对 象 。 它 得 -
到 一 个 输 人 ,产 生 一 个 输 出 。对 于 每 一 个 函 数 ,同 样 的 输 入 总 会 产 生 同 样 的 输 出 。设 / 是
一 个 函 数 ,当 输 入 值 为 a 时 它 的 输 岀 值 为 6 , 则 记 为
f( a ) = b
函 数 又 称 为 映 射 ( mapping ),并 且 ,若 f ( a )= b ,则 称 / 把 a 映 射 为 6 。
例 如 ,对 绝 对 值 函 数 取 一 个 数:r 作 为 它 的 输 人 ,当 :
c 大于等于 0 时该函数返回
第0 章 绪 论 5

oo ;当:r 小于 0 时该函数返回一:r。因 此 ,abs( 2 )= abs(


2 )= 20 加 法 是 函 数 的 另 一 个 例 ~

子 ,记为 a d d 。加法函数的输入是由两个数组成的有序对 ,输岀是这两个数之和 。


函数的所有可能的输入组成的集合称为函数的定义域 ( domain )。函数的输出也来自
于另一个集合 ,这个集合称为函数的值域 ( range ) 对 于 函 数 /,采用如下方式表述其定


0

义域为 D 和值域为 i?:


f :D R
如果限制在整数范围内 ,函 数 的 定 义 域 和 值 域 都 为 Z ,可 以 写 为 abs:Z
— Z 。对 于 整 数


的 加 法 函 数 ,如 果 定 义 域 为 整 数 有 序 对 集 合 ZXZ ,而 值 域 为 Z ,则 可 以 写 为 ZX
Z Z。注意 : 函数不必取得指定值域的所有元素 。虽然一1 6 Z ,但是函数 ah 绝 不 会 取 到
值一 1。如果函数取得值域的所有元素 ,则称它映上 ( onto ) 到这个值域 。
通常可以用几种方法描述一个具体的函数 。其 中 一 种 方 法 是 采 用 从 指 定 的 输 入 到 输 出


的计算过程 。而另一种方法是用一张表列出所有可能的输人和对应的输岀 。
考 虑 函 数 /:{ 0 ,
1,2 ,3 ,4 } { 0 ,
1,2 ,3 ,4 }。

0 12 3 4
f i n) 1 2 3 4 0

该函数为把它的输入加 1 ,然 后 输 出 再 执 行 模 5 后 的 计 算 结 果 。 通 常 ,对 于 一 个 数 的 模
m 的 结 果 就 等 于 该 数 除 以 m 后 所 得 到 的 余 数 。 例如 ,钟 表 表 盘 上 的 分 针 按 模 60 计 数 。


当作模运算时 ,记 为 ZW = { 0 ,
1,2 ,… , 1 }。 用 这 个 记 号 ,前 面 提 到 的 函 数 / 可 以 写
为 /:Z5 Z5 。


如 果 函 数 的 定 义 域 为 两 个 集 合 的 笛 卡 儿 积 ,这 时 需 要 使 用 2 维 表 格 来 描

^
述 。 在这里有另一个函数 Z4 XZ4 Z4 。它 表 示 标 号 为 f 的 行 和 标 号 为 )的 列 的 内 容 是
的值 。

9 0 2 3
0 0 2 3
2 3 0
2 2 3 0
3 3 0 2

函 数 9 为模 4 的加法函数 。
当函数 / 的定义域为 A i X A 2 X ,
X A 时 ,/ 的 输 入 是 々 元 组 (f l l ,
心,…, Q ),称 A

为 / 的自变量 (argument )。々 个 自 变 量 的 函 数 称 为 A 元 函 数 (t ary function ,々 称 为 函


)
数的元数 (arity )。当々等于 1 时 ,/ 有 一 个 自 变 量 ,称为一元函数 ( unary function ) 。当
々等于 2 时 ,/ 为二元函数 ( binary fimction )。将某些大家熟悉的二元函数写为特殊的中
缀 表 示 法 (infix notation ) 的 形 式 ,即把函数符号放在它的两个自变量之间 ,而 不 采 用 前
缀 表 示 法 ( prefix notation ) 把函数符号放在最前面 。例如 ,加 法 函 数 通 常 采 用 中 缀 表
示法把符号 “+” 放在两个自变量之间 ,写为 a + 6。代替采用前缀表示法
谓词 ( predicate ) 或性质 ( property ) 种 函 数 ,它 的 值 域 为 { TRUE ,FALSE } 0

例如 ,设 even 为一个谓词 ,当输人为偶数时该函数的输岀为 TRUE; 当 输 人 为 奇 数 时 该


6 第0 章 绪 论

函数的输出为 FALSE。因 而 ,d w( 4 )= TRUE ,wen( 5 )= FALSE 0

定 义 域 为 的 谓 词 称 为 关 系 ( relation ),或 称 为 々 元 关 系 (f ary relation ),也 称 为


A 上 的 々 元 关 系 。 通常用的是二元关系 ( binary relation )。当我们书写一个包含二元关系
的表达式时 ,习 惯 上 采 用 中 缀 表 示 法 。 例 如 ,“小 于” 个 关 系 ,通 常 写 成 带 中 缀 符 号
“<” 的形式 。“等于” 是大家熟悉的另一个关系 ,写 为 带 中 缀 符 号 的 形 式 。 设 尺 是
一个二元关系 ,贝1〗命 题 表 示 ai?/)= TRUE。类似地 ,设 R 是 一 个 々 元 关 系 ,则命题尺
(ai ,2 ••• •• O.k ) ,2 , ,
表 7K 尺(<21《 a k ) = TRUE
參 參

在 一 个 叫 作 剪 刀 一 布 一 石 头 的 儿 童 游 戏 中 ,两 个 人 同 时 选 择 集 合 < 剪刀,
布 ,石头 > 中的任一个元素 ,并且用手势表示岀来 。如 果 两 个 人 的 选 择 是 相 同 的 ,则游戏
重来 。如果选择不相同 ,则按照下述打败关系 ,确定一个人获胜 。

打败 剪刀 布 石头
剪刀 FALSE TRUE FALSE
布 FALSE FALSE TRUE
石头 TRUE FALSE FALSE

根据这张表 ,剪刀打败布为 TRUE ,而布打败剪刀为 FALSE。 *


有 时 用 集 合 代 替 函 数 来 描 述 谓 词 更 方 便 一 些 。 例 如 ,谓 词 { TRUE ,FALSE }
可以写成 ( D ,S), 其中 S = U 6 D| PU ) = TRUE },或当根据上下文定义域 D 是 明 显 的
时 候 ,简单地写成 S。于是 ,打败关系可以写为如下形式 :
{( 剪刀 ,布 ),
(布 ,
石头 ),
( 石头 ,
剪刀 )}
等 价 关 系 (equivalence relation ) 是 一 种 特 殊 类 型 的 二 元 关 系 ,它 利 用 了 通 过 某 种 特
征把两个对象等同起来的想法 。如 果 二 元 关 系 尺 满 足 以 下 3 个 条 件 :
1 尺是自反的 ( reflexive ), 即对每一个 :
c ,:
r R x。 _
2.R 是 对 称 的 ( symmetric ), 即对每一个:c 和:y ,:
rRy 意 味 着 。
3.K 是传递的 ( transitive ),即对每一个:r ,)和 z, =
和:y 尺 意 味 着 。
则 称 i? 为一个等价关系 。

^
定 义 一 个 自 然 数 集 上 的 等 价 关 系 三 7 。对 于 纟, 如 果〖一 是 7 的 倍 数,
则 说 这 是 一 个 等 价 关 系 ,因 为 它 满 足 上 述 的 3 个 条 件 。 首 先 ,它 是 自 反 的 ,因 为 f
一)=0 — f 是 7 的倍数 ,则 〖 一)也 是 7 的倍数 。
是 7 的 倍 数 。其次 ,它 是 对 称 的 ,因为若 j
再者 ,它是传递的 ,因 为 只 要 f 一)是 7 的倍数且 j —々 是 7 的倍数 ,那 么 f 一々= G — j )+
(j ~ k ) 是 两 个 7 的倍数之和 ,从 而 也 是 7 的 倍 数 。

0. 2 . 4 图

无向图 ( undirected graph ) 简称为图 ( graph ),


是由一个点的集合以及连接其中某些点的线段组成

^
4
的 。这 些 点 称 为 结 点 ( node ) 或 顶 点 ( vertex ),
线段称为边 (edge ),如图 0 5 所 示 。 - 5 2
顶点的度 (degree ) 是 以 这 个 顶 点 为 端 点 的 边

-
的数目 。在 图 0 5 ( a ) 中所有顶点的度都为 2 。在
-
图 0 5 ( b ) 中所有顶点的度都为 3。任何两个顶点 图 0- 5 图的例子
第0 章 諸 论 7

之间至多有一条边 。在某些情况下 ,允许图中含有始点和终点相同的边 ,并称其为自环


( self -loop ) 0

设图 G 包含顶点 t 和顶点 j ,有序对 ( i ,j ) 表示连接 i 和 j 的边 。在无向图中不考虑


和 j 的顺序 ,因此有序对 G ,j ) 和
所以有时用二元集合来表示无向边 ,写为 { i ,j }
G=(V ,E) 可以用一个图形或更形式化地指定 7 和
图的形式化描述为
0
0 ,0 表示同一条边 。由于顶点的顺序是无关紧要的 ,
0 如果 G 的顶点集为 V、边集为 :
,则记为
来描述一个图。例如 ,图 0 5( a ) 中 -
^
2 ,3 ,4 ,5 } ,
({ 1 , {( 1 ,
2 ), (3 ,4 ),
( 2 ,3 ), (4 ,5 ),
(5 ,
1 )})
-
图 0 5 ( b ) 中图的形式化描述为
2 ,3 ,4 M( 1 ,
( U, 2 ), 3 ),
(1 , (1 , (2 ,3 ),
4 ), (2 ,4 ),
(3 ,4 )})
通常可用图表示数据 。 例如 : 顶点为城市 、 边为连接城市的高速公路 ,或者顶点为
人 、 边为连接他们的友情 。有时为了方便 ,给图的顶点或边作标记 ,这样的图称作标定图
( labeled
-
graph )。图 0 6 画岀一张图 ,它的顶点为城市 。 如果两个城市之间有直达航班 ,
则它们之间有一条边 ,并且标上直达飞行的最低票价 (美元)。
如果图 G 的顶点集为图 H 的顶点集的子集 ,则称 G 为 H 的子图 (subgraph )。如图
-
0 7 所示 ,G 的边均为 H 在对应顶点上的边 。 图 0 7 表示图 H 和子图 G 。 -
98 伊莎卡
纽约
奥斯 子图G
威戈 ( 粗黑线部分 )
109

波士顿 旧金山
378

图 0- 6 城市之间直达飞行的最低票价 图 0- 7 图 G ( 粗黑线部分) 是 H 的子图

图中的路径 ( path ) 是由边连接的顶点序列 。简单路径 ( simple path ) 是没有顶点重


复的路径 。如果每一对顶点之间都有一条路径 ,则称这个图为连通图 (connected graph )。
如果一条路径的起点和终点相同 ,则称这个图为一个圈 ( cycle ) 0 如果一个圈包含至少 3
个顶点 ,并且除起点和终点之外没有顶点重复 ,则称它是一个简单圈 ( simple cycle )。 树
( tree ) 是连通且没有简单圈的图 ,如图 0 8 所 示 。 有时专门指定树的一个顶点 ,把它称为 -
这棵树的根 ( root )。一棵树中度数为 1 的顶点称为这棵树的树叶 (leaf )。

⑷ (b) ⑹

图0 8 - ( a ) 图中的一条路径 ,
(b ) 图中的一个圈 ,(c) 一棵树
8 第0 章 绪 论

在有向图 ( directed graph ) 中线段被箭头所替换 ,如图 0 9 所示 。从一个顶点引出的 -


箭头数为这个顶点的出度 ( outdegree ) , 指向一个顶点的
1
箭头数为这个顶点的入度 ( indegree )。
在有向图中 ,用有序对 ( i ,j ) 表示从纟到 j 的边 。
E ),其中 V 为顶点集 ,
有向图 G 的形式化描述为 (V, :6
-
为边集 。图 0 9 中表示的有向图的形式化描述为
5
<5
2 ,3 ,4 ,5 ,6 },
({ 1, {( 1 ,
2 ),
(1 ,
5 ),
(2 , (2 ,4 ),
1 ),
( 5 ,4 ),
(5 ,6 ),
(6 , (6 ,3 )})
1 ), 图 0- 9
— 个有向图

所有箭头的方向都与其前进的方向一致的路径称为有向路径 ( directed path )。 如果从


每一个顶点到另一个顶点都有一条有向路径 ,则称这个有向图为强连通图 (strongly con -
nected graph )。有向图是描述二元关系的便利方式 。 设 R 为一个二元关系 ,它的定义域为
DXD , 则标定图 G =( D, E ) 表示 R ,其中
表示例 o.6 中给出的关系的有向图如图 o - io 所示 。 覼

剪刀 布

石头

图 0- 1 0 表示打败关系的有向图

0 . 2. 5 字符串和语言
字符串是计算机科学的重要基础之一 。 根据应用的要求 ,可以在各种各样的字母表上
定义这样的字符串。按照要求 ,定 义 字 母 表 ( alphabet ) 为任意一个非空有穷集合 。 字母
表的成员为该字母表的符号 (symbol )。通常用大写希腊字母 2 和 r 表示字母表和字母表
中符号的打印字体 。下面是几个字母表的例子 。
2i = { 0 ,l }
{ ci,
b,c,
d,e, 装,
f, p, v u,:
j ,

^
2 j k L
j q,r,
s,t,
u,v, y,
z}
r= { 0 , 1 9 X j y 9 z }
字母表上的字符串 ( string over analphabet ) 为该字母表中符号的有穷序列 ,通常写

^
为一个符号挨着一个符号 ,不用逗号隔开 。设 = { 0,

^
1 } ,则 01001 为 上的一个字符
串。设 22 = U ,
6,C,…, 幻则 abracadabra 为 :S2 上的一个字符串 。 设 w 为 2 上的一个字符
串 ,W 的长度 ( length ) 等于它所包含的符号数 ,记作|W I 。 长度为零的字符串叫作空
串 ( empty string ) , 记为 e 。空串起的作用就像 0 在数系中的作用一样 。 如果 w 的长度为
n ,则可以写为 W = W \ XV 2 ' '' VUn , 这里每一个叫 62。w 的 反 转 ( reverse ) 是按照相反的顺
序写 w 所 得 到 的 字 符 串 ,记 作 即 VUnUJn - l 。如果字符串 z 连续地岀现在 w
中 ,则称 2 为加的子串 (substring )。例如 ,cad 为 abracadabra 的子串 。
设 x 是长度为 m 的字符串 ,y 是长度为 的字符串 ,: r 和 j 的 连 接 ( concatenation )

是把 J 附加在 x 的后面得到的字符串 ,记为 13/ ,即
法表示一个字符串自身连接多次 ,例如 P 表示
ocmy\ --- yn 。可米用上标表
第0 章 緒 论 9

字符串的字典序 ( lexicographic order ) 和大家熟悉的字典顺序一样 。通常 ,我们采用


字符串顺序 ( shortlex order 或 string order ) , 它在字典序基础上将短的字符串排在长的字
符串的前面 。例如 ,字母表 { 0 ,1 } 上的所有字符串的字符串顺序为 ( e ,0 ,l ,00 ,01 ,l l ,
000 ,…) 0

字符串 x 是字符串 y 的前缀 ( prefix ),如果存在字符串 z 满足 并且若


则 x 称为 :y 的真前缀 ( proper prefix ) 。 字符串的集合称为语言 ( language )。 如果语言中
任何一个成员都不是其他成员的真前缀 ,那么该语言是无前缀的 ( prefix-free )。

0 . 2. 6 布尔逻辑
布尔逻辑 ( Boolean logic ) 是 建 立 在 TRUE 和 FALSE 两个值上的代数系统 。这个系
统最初是作为纯数学构想提出来的 ,现在被公认为是数字电子学和计算机设计的基础 。值
TRUE 和值 FALSE 被称为布尔值 ( Boolean value ),并且经常用值 1 和值 0 表示 。 在有两
种可能的时候使用布尔值 ,例如一条电路可能处于高电位或低电位 ,一个命题可能是真或
假 ,对一个问题的回答可能为是或否 。
可以用布尔运算 ( Boolean operation ) 处理布尔值。最简单的布尔运算为非 ( negation )
或 NOT 运算 ,用符号 “ 1 ” 表示 。一个布尔值的非为与它相反的值 ,即1 0 =1, , 1 = 0。合
取 (conjunction ) 或 AND 运算的符号为 “ A ”。仅当两个布尔值都为 1 时 ,它们的合取为
1 。析取 ( disjunction ) 或 OR 运算的符号为 “ V ”。 当两个布尔值中有一个为 1 时 ,它们
的析取为 1。下面综合列出上述运算的定义 :
0 A 0=0 0 V 0=0 0 =1
0 A 1 =0 0 V 1=1 -• 1 = 0
1 A 0=0 1 V 0=1
1 八 1=1 1V l=l
使用布尔运算可以把简单的命题组合成更复杂的布尔表达式 ,就像使用算术运算 + 和
X 构造复杂的算术表达式一样 。例如 ,设 P 是表示命题 “现在天气晴朗” 的真假值的布尔
值 ,Q 是表示命题 “今天是星期一” 的真假值的布尔值 ,那么可以用 PAQ 表示命题 “现
在天气晴朗并且今天是星期一” 的真假值 。 对于 PVQ,与此类似 ,只需把 “并且 ” 换成
“或者”。值 P 和 Q 称为该运算的运算对象 ( operand ) 0

偶尔会用到另外几个布尔运算 。异或 ( exclusive or ) 运 算 ( 或 者 XOR 运算 ) 的符号


为 “ ”,当它的两个运算对象中一个为 1 、 另一个为 0 时其值为 1。等值 (equality ) 运算


的符号是 “0”,当它的两个运算对象取值相同时其值为 1。最后 ,蕴涵 ( implication ) 运

——
算的符号是 “ ”,并且当它的第一个运算对象为 1 、 第二个运算对象为 0 时其值为 0; 否
则为 1 。下面综合列出这些定义 :
0 0=0 0o 0 = 1 0 0 =1



0 1=1 0 1=0 0 1= 1
1㊉0 = 1 1 ㈠ 0=0 1 0=0
1 1=0 1 1= 1
可以给出这些运算之间的各种关系 。 实际上 ,能用 AND 与 NOT 运算来表示所有的
10 第0 章 绪 论

— —- —
布尔运算 ,如下面的式子所示 。每一行的两个表达式是等价的 。 每一行用它上面的运算及
AND 、 NOT 表示左边一列的运算 。
PVQ 十 PA Q)
P
P^ Q
Q - P VQ
( P^Q ) A (Q F)

有关 AND 与 OR
P Q
的分配律 ( distributive
-(
1
P Q)
law ) 在处理布尔表达式时会有用 。它很像有
关加法与乘法的分配律 + aX ( 6 C )= UX 6) + UXc)。布尔分配律有以下两种形式 :
• PA ( Q V i? 等于(
) P A Q ) V ( P A i? )
• P V ( Q A i? ) 等于(P V Q ) A ( P V /? )

0 . 2. 7 数学名词汇总
字母表 符号对象的有穷集合 。
自变量 函数的输人 。
二元关系 定义域为有序对集合的关系 。
布尔运算 布尔值的运算 。
布尔值 值 TRUE 或值 FALSE ,常 用 1 或 0 表 示 。
笛卡儿积 对多个集合的运算 ,用分别来自这些集合的元素的所有多元组构成一
个集合 。
补 对一个集合的运算 ,用不在这个集合中的所有元素构成一个集合 。
连接 把多个字符串连接在一起的运算 。
合取 布尔运算 AND。
连通图 每一对顶点都有路径相连的图 。
围 起止在同一个顶点的路径 。
有向图 顶点和连接某些顶点的箭头构成的集合 。
析取 布尔运算 OR。
定义域 函数所有可能的输人构成的集合 。
边 图中的一条线段 。
兀素 集合中的一个对象 。
空集 没有任何元素的集合 。
空串 长度为零的字符串。
等价关系 自反 、 对称和传递的二元关系 。
函数 把输人转变成输出的运算 。
图 顶点和连接某些顶点的线段构成的集合 。
交 对多个集合的运算 ,用这几个集合的共同元素构成一个集合 。
k 元组 一列々个对象 。
语言 字符串的集合 。
成员 集合中的一个对象 。
结点 图中的一个点。
有序对 一对有序的元素 。
第0 章 绪 论 11

路径 图中用边连接起来的顶点序列 。
谓词 以 { TRUE , FALSE } 为值域的函数 。
性质 一个谓词 。
值域 一个集合 ,函数的输出都取自这个集合 。
关系 一个谓词 ,最典型地 ,其定义域为々元组集合 。
序列 排列成一列的对象 。
集合 一'组对象 。
简单路径 顶点不重复的路径 。
单元素集合 只有一个成员的集合。
字符串 取自一个字母表的一列有穷个符号 。
符号 字母表的一个成员 。
树 不含简单圈的连通图 。
并 对多个集合的运算 ,把这几个集合中的所有元素合并成一个集合 。
二元集合 含有两个成员的集合 。
顶点 图中的一个点 。

0.3 定 义 、定 理 和 证 明
定理和证明是数学的精髓 ,而定义是数学的灵魂 。这三部分是包括本科目在内的每个
数学科目的核心 。
定义 ( definition ) 描述了我们使用的对象和概念 。定义可能是简单的 ,如本章已给出
的集合的定义 ;也可能是复杂的 ,如密码系统中对安全的定义 。任何数学定义都必须是精
确的 。当定义一个对象时 ,必须弄清楚什么构成这个对象 、 什么不构成这个对象 。
在定义各种对象和概念之后 ,通常要给出关于它们的数学命题 ( mathematical state -
ment )。典型情况下 ,一个命题描述某个对象具有某种性质。命题可能为真 ,也可能为假 ,
但和定义一样必须是精确的 。它的含义不能有任何模棱两可的地方 。
证明 ( proof ) 是一种逻辑论证 ,它使人们确信一个命题为真 。 在数学中 ,一个论证
必须无懈可击的 ,也就是说 ,论证要使人绝对信服 。它和我们在日常生活中或在法律上使
用的证据这一概念有很大的区别 。 在谋杀案审判中要求存在 “ 没有任何合理疑点” 的证
据。重要的证据可能迫使陪审团接受疑犯无罪或有罪的辩护 。但是 ,这种证据在数学证明
中不起作用。数学家需要没有任何疑点的证明 。
定理 ( theorem ) 是被证明为真的数学命题。通常只对特别感兴趣的命题使用这个词 。
有时 ,有兴趣证明某些命题只是因为它们有助于证明另一个更有意义的命题 ,这样的命题
称为引理 ( lemma )。有时 ,一个定理或其证明可以使我们容易得出另外一些有关的命题
为真的结论 ,这些命题称为这个定理的推论 (corollary )。

寻找证明
给出数学证明是确定一个数学命题为真或假的唯一方法 。可是 ,找到数学证明并不总
是容易的事情 。不可能把它简化为一组简单的规则或过程 。 在本书中 ,我们要求给出各种
命题的证明 。请不要气馁! 因为虽然没有任何人有制造证明的诀窍 ,但是我们可以利用一
些有用的普遍性策略 。
12 第0 章 绪 论

首先 ,要仔细地看清楚要证明的命题 。是否理解命题的所有记号? 先用自己的语言把


命题重写一遍 。把它拆开并且分别考虑每一部分 。
有时候由若干部分组成的命题的各个部分并不都是明显的 。 这种命题经常出现的一种
形式是 “ P 的充分必要条件是 Q”,其中 P 和 Q 为两个数学命题 。 这种写法是对一个由两
部分组成的命题的缩写 。第一部分是 “ P 仅当 Q ”,它的意思为 : 若 P 为真 ,则 Q 为真 ,
写成 P=>Q。第二部分是 “ P 当 0”,它的意思为 :若 Q 为真 ,则 P 为真 ,写成 P Q。第
一部分是原命题的向前方向 (forward direction ),第二部分是反方向 ( reverse
把 “ P 的充分必要条件是 Q” 写成 P㈡ Q。 要证明这种形式的命题 ,必须证明这两个方向
^
direction )
0

中的每一种情况 。通常情况下 ,这两个方向中一个比另一个容易证明 。


这种命题的另一种类型是陈述两个相等的集合 A 和 B 。它的第一部分说明 A 是 B 的
子集 ,第二部分说明 B 是 A 的子集 。所以 ,证明 A = B 的通用方法 :证明 A 的每一个元
素也为 B 的元素 ,以及 B 的每一个元素也为 A 的元素 。
其次 ,当想证明一个命题或它的一部分时 ,要尽可能证明它为什么应该为真 。 在证明
之前 ,先举一些例子对完成证明会很有帮助 。例如 ,如果命题称某种类型的所有对象都有
一种特定的性质 ,那么取几个这种类型的对象并且观察它们确实具有这种性质。 这样做之
后 ,再试试找一个不具有这种性质的对象 ,这样的对象称为反例 (counterexample )。如果
命题确实为真 ,就不可能找到反例。当试图找反例时看看在什么地方遇到了困难 ,这能够
帮助我们理解该命题为什么为真 。
假设要证明命题 : 对于每一个图 G,G 中所有顶点度数之和为偶数 。
首先 ,画几个图 ,观察这个命题的实际情况 。图 0 11 是两个例子 。 -
然后 ,去找反例 ,即顶点度数之和为奇数的图 。发现每增加一条边 ,度数之和增加 2。
-
见图 0 12。

顶点度数之和 顶点度数之和
=2+2+2=6 = 2+3+4+3+2= 14

-
图 0 11 两个例子 图 0- 1 2 每 次 增 加 一 条 边 ,和 增 加 2

现在 ,你能开始看出命题为什么为真和怎样证明它了吧? ■

如果仍然不能直接证明这个命题 ,那么试试证明容易一点的事情 ,即去证明这个命题


的一种特殊情况 。例如 ,如果要证明对于每一个々>0 , 某个性质为真 ,先去证明对于々=
1 它为真 。如果成功了 ,再去证明对于々= 2 等等它为真 ,直到能够证明更一般的情况 。如
果一种特殊情况是难证明的 ,那么去试试证明另一个不同的特殊情况 ,或者还可能是这个
特殊情况的特殊情况 。
最后 ,当确信已经找到证明的时候 ,必须将它严格地书写出来 。一个写得很好的证明
是一系列的形式化描述 ,其中每一条语句都由前面的语句经过简单的推理得到 。仔细书写
证明非常重要 ,这样既能够让读者理解它 ,又能够保证它正确无误 。
以下是关于构造证明的几点建议 :
• 要 有 耐 心 。寻找证明需要时间。 如果没有马上看出怎么着手证明 ,也不必烦恼 。
第0 章 諸 论 13

为了找到一个合适的证明 ,研究人员有时要工作数周甚至数年 。
• 回头做 。 看一遍要证明的命题 ,考虑一会儿 ,然后放下它 ,过一小段时间之后再
回到这个问题上来 。让你内心的潜意识和直觉有机会起作用。
• 条例清晰 。 当对要证明的命题进行直觉分析时 ,请使用简单明了的图形或文字描
述 ,也可以两者同时使用。当你正在深入研究这个命题时 ,杂乱无章会妨碍深入
研究 。此外 ,把一个结果写给别人看 ,清晰的表述有助于别人理解 。
• 表达简洁 。简洁有助于表达高层次的思想而不丧失细节 。 好的数学表示法有利于
简明地表达思想 。但是 ,在写证明的时候必须充分地写岀你的推理 ,让读者能够
容易理解所证明的东西 。
为了说明具体的做法 ,让我们以证明德 摩根律之一为例 。
对 于 任 意 两 个 集 合 A 和 B ,A U B = A A B。
首先 ,要搞清楚这个定理的意思 。如果不知道符号 u 、 n 或上横线的意思 ,请复习前
面 (0.2.1 节 ) 的内容 。
为了证明这个定理 ,必须证明两个集合 A U B与 相 等 。前 面 讲 过 ,可 以 通 过 证 明
一个集合的每一个元素也是另一个集合的元素和反之亦真来证明两个集合是相等的 。在看
下面的证明之前 ,请先考虑几个例子 ,自己试试去证明它 。
证 明 这 个 定 理 称 两 个 集 合 A U B与 Z H B相等 。通常证明如下 ,通过说明一个集合的
每一个元素也是另一个集合的元素并且反之亦真来证明这个断言。
假设:r 是A U B的一个元素 ,那么 ,由集合的补集的定义可知 ,:
r 不在集合 A U B 中 。
故由两个集合的并集的定义可知 ,:
r 不在集合 A 中且:r 不在集合 B 中 。亦即 ,:
r 在集合 A
中且:r 在集合 S 中 。因此 ,根据两个集合的交集的定义 ,:
r 在集合 A H S 中 。
反之亦然 ,假设:r 在集合 A 中 ,那么 ,:
r 既在集合 A 中 、 又在集合 S 中 。 因此 ,
: B 中 ,亦即不在这两个集合的并集中 。所以 ,x 在这两个
r 就不在集合 A 中且:r 不在集合
集合的并集的补集中 ,即是说 ,:
T 在 集 合 中。该 定 理 的 证 明 完 毕 。 ■

现在证明例 0.9 中的命题 。


織llMI 在 任 意 一 个 图 G 中 ,G 的 所 有 顶 点 度 数 之 和 为 偶 数 。
证明 G 中对每一条边连接两个顶点 ,每一条边对连接它的每一个顶点贡献的度数是
1 。故每一条边对所有顶点贡献的度数之和为 2。 所以 ,如果 G 包含 e 条边 ,则 G 的所有
顶点度数之和等于心,这是一个偶数 。 ■

0.4 证明的类型
在数学证明中通常会出现多种类型的论证。我们在这里描述几种在计算理论中常用的
类型 。因为一个证明可以分成若干不同部分 ,每一部分也是一个证明 ,所以请注意 ,一个
证明可以包含一种以上的论证类型 。

0 . 4. 1 构造性证明
许多定理声明存在一种特定类型的对象 。通过说明如何构造这样的对象是证明这种定
理的一种方法 ,这种方法就是构造性证明 ( proof by construction ) 0

现采用构造性证明方法证明以下定理 。我们定义 :如果图中每一个顶点的度数都为々,


14 第0 章 绪 论

贝!1 称 这 个 图 是 々 正 则 的 ( - regular
^
)0

对于每一个大于 2 的偶数 存在一个有 n 个顶点的 3 正则图。


£ ),G 的 顶 点 集 为 V =
证 明 设 n 是 大 于 2 的 偶 数 。现 构 造 有 n 个 顶 点 的 图 G = ( V ,

_
{ 0,
1,… ,/2 —1 },边集为
2} U { ( w — 1 , 0} } U { { i » i+ w/2} | O z w/2 — 1 }
E= { { i y i -\~ 1 }|
现 在 沿 着 一 个 圆 的 圆 周 顺 序 画 出 这 个 图 的 所 有 顶 点 。E 等 号 右 边 的 上 一 行 描 述 的 边 连 接 圆
^^
周 上 相 邻 的 一 对 顶 点 ,下 一 行 描 述 的 边 连 接 一 个 顶 点 与 它 对 面 的 顶 点 。 这 个 想 象 的 图 清 楚
地 表 明 G 的 每 一 个 顶 点 的 度 数 为 3。故 按 照 上 面 的 定 义 ,证 得 该 命 题 为 真 。 ■

0.4 . 2 反证法

另 一 种 常 用 的 证 明 定 理 的 论 证 方 法 是 ,假 设 这 个 定 理 为 假 ,然 后 证 明 这 个 假 设 会 导 致
一 个 明 显 的 错 误 结 论 ,故 而 相 矛 盾 。 在 现 实 生 活 中 经 常 使 用 这 种 类 型 的 推 理 。 现 举 例
如 下。

iESP 当 杰 克 看 见 吉 尔 (女 ) 刚 从 外 面 进 来 时 ,发 现 她 全 身 衣 服 是 干 的 ,因 此 他
推 理 现 在 没 有 下 雨 ,他 对 现 在 没 有 下 雨 的 “ 证 明 ” 是 这 样 推 理 的 :如 果 现 在 外 面 在 下 雨
( 假 设 命 题 为 假 ),吉 尔 身 上 的 衣 服 应 该 是 湿 的 ( 一 个 明 显 的 错 误 结 论 )。 所 以 得 出 推 论:

现 在 外 面 一 定 没 有 下 雨。
下 面 我 们 采 用 反 证 法 证 明 命 题 :2 的 平 方 根 为 无 理 数 。如 果 一 个 数 是 一 个 分 式
其 中 m 和 w 是 整 数 ,则 这 个 数 是 有 理 数 ( rational number )。 换 言 之 ,一 个 有 理 数 是 整 数
m 和 n 的 比 值 。 例 如 2 /3 显 然 是 一 个 有 理 数 。 如 果 一 个 数 不 是 有 理 数 ,则 它 为 无 理 数
( irrational number )。
#是 无 理 数 。
证 明 为 了 得 到 矛 盾 的 结 论 ,假 设W 是 有 理 数 。 于 是
m
42 =
此 处 m 和〃都 是 整 数 。如 果 m 和《 都 能 被 同 一 个 大 于 1 的 最 大 整 数 除 尽 ,则 用 那 个 整 数
除 它 们 ,不 会 改 变 分 式 的 值 。故 ,m 和〃不 可 能 均 为 偶 数 。
现 用〃乘 等 式 的 两 边 ,得 到

V2 =
再 对 两 边 同 时 平 方 ,得 到
2 n2 = m 2
由 于 m 2 是 整 数 V 的 2 倍 ,故 m 2 是 偶 数 。所 以 m 也 是 偶 数 ,因 为 已 知 奇 数 的 平 方 总 是 奇
数 。因 而 ,对 于 某 个 整 数 々,m= 2 k 9 于 是 ,我 们 用 2々 代 替 m 带 人 上 式 ,得 到
2 n2 = ( 2 k ) 2 = 4 k 2
对等式两边同时除以 2, 得到
n2 = 2 k 2
而 这 个 结 果 表 明〃2 是 偶 数 ,从 而〃是 偶 数 。于 是 ,m 和〃 都 是 偶 数 。 但 是 ,前 面 已 经 化
简 772 和〃,使 它 们 不 会 都 是 偶 数 ,故 相 矛 盾。所 以 ,W 为 无 理 数 。 ■
第0 章 绪 论 15

0.4.3 归纳法
归纳法是证明无穷集合的所有元素具有某种特定性质的高级方法 。 例如 ,我们可以采
用归纳法证明 ,一个算术表达式对于它的变量的每一组赋值都能够计算岀它想要得到的
值 ,或证明一个程序在每一步或对所有的输人都能够得到正确的结果 。
2 ,3 ,… } ,而把该性
为了描述如何使用归纳法 ,我们把无穷集合取为自然数集 N = { 1 ,
质称为 P。现在要证明对于每个自然数 I V ( k ) 为真 。 换言之 ,即要证明 P( l ) 为 真 ,
以及 P( 2 ),P( 3 ), P ⑷ 等等均为真 。
每一个归纳证明均由两部分组成 :归纳基础 ( basis ) 和 归 纳 步 骤 ( induction step ) 0

每部分自身为一个单独的证明 。归纳基础证明 P( l ) 为真 。 而归纳步骤证明 :对于每一个


如 果 为 真 ,则 :P ( f + 1 ) 也为真 。
只要我们完成了这两部分的证明 ,就能得到命题的结果 :即对于每一个
真 。为什么呢? 第一步 ,证明 P( l ) “ VU 为
为真 ,因为归纳基础已经单独证明它了 。 第二步 ,通
)

过归纳步骤证明 : 如果 'P( l ) 为 真 则 P( 2 ) 为真 ,而前面已经证明了 P( l ) 为 真 ,所 以


V( 2 ) 也为真 。第三步 ,再通过归纳步骤证明 :如果 P( 2 ) 为 真 则 P( 3 ) 为 真 ,而 前 面 也
已经证明了 P( 2 ) 为真 ,所以 P( 3 ) 也为真 。将这种过程对所有的自然数继续证明下去 ,
会发现 P( 4 ) 为 真 ,P( 5 ) 为真 ,等等 。
一旦理解了这种证明的思路 ,就能够很快理解这种证法的变种或推广 。 例如 ,归纳基
础不必一定从 1 开始 ,也可以从任意的值 6 开始 。 这样归纳法证明对于每一个 V( k )
均为真 。
在归纳步骤的证明中 ,对假设 PG ) 为真称为归纳假设 (induction hypothesis )。假设
对于每一个 V( j ) 为真是一种更强的归纳假设 ,有时这种更强的归纳假设在证明中
很有用。 现在对归纳证明照样进行下去 ,因为当想要证明 PG + l ) 为 真 时 ,我 们 已 经 证

明对于每一个 ) <纟,V i j ) 为真 。
理解这种证明方法后 ,现将归纳证明的格式书写如下 :
归 纳 基 础 证 明 P( l ) 为 真 。

归 纳 步 骤 对 于 每 一 个 假 设 P( 0 为 真 ,并 且 利 用 这 个 假 设 去 进 一 步 证 明
PG + 1 ) 为 真 。

现在采用归纳法来证明房产抵押贷款的月付款计算公式的正确性 。很多人借钱买房子
并且在若干年内应偿还这笔贷款 。如果要求在 30 年内还清贷款 ,典型的方法是 ,在还贷
条款中规定每个月支付固定偿还款额 ,其中应包括利息以及部分原贷款金额 。计算月付款
钱数的公式看起来神秘 ,其实十分简单 。但它关系到大多数人的日常生活 ,因此你一定对
它感兴趣 。 我们用归纳法来证明这个公式的正确性 ,这对归纳法是个很好的说明 。
首先 ,给出几个变量的名称及其含义 。设 P 为贷款原始数额 ,称为本金 。 >o 为贷款 r
的年利率 ,J = 0.0 6 表 示 年 利 率 为 6 % ,Y 为月付款数。为简便起见 ,用 J 定义另一个变量
M, 它表示月倍增系数 。因为有利息的缘故 ,所以贷款的余额每个月按照比率 M 会发生变
化。因为月利率是年利率的 1/12 , 所以 M= l + J/12 , 并且逐月付利息 (按月复利)。
每个月还款有两部分 。第一部分是 ,由于有利息 ,贷款的余额在按照月倍增系数 M
16 第0 章 諸 论

增加 。第二部分是 ,由于每月付款 ,贷款余额又在不断地减少。设 P, 为在 Z 个月后未偿


清的贷款余额 ,那么 , = P 为 贷 款 的 原 始 数 额 ,则 一 Y 为一个月后的贷款余
额, 为 两 个 月 后 的 贷 款 余 额 ,等 等 ,依 此 类 推 。现 在 形 式 化 描 述 定 理 ,给 出
Pt 的计算公式 ,并且通过对 〖 的归纳来证明公式的正确性 。
对于每一个 〖>0 ,
1 Mf -
Pt = P M l Y M- l
~

证 明 归 纳 基 础 证 明 当 〖 = 0 时公式成立 。如果 ?= 0 , 则公式为


M -l
Po = P M° ~ Y M°- l

°
这里 M = l 。因而可以简化等式的右端 ,得到
Po = P
根据上面对 Po 的定义 ,这是正确的 。 因此 ,证明了第一步归纳基础成立 。
归 纳 步 骤 对 于 每 一 个 々>0 , 假 设 当 6 时 公 式 成 立 ,现 要 证 当 1时公式也
成立 。由归纳假设指出
\ Mk ~

Pk = PMk Y M - l
~

现在要证明
M k+ l - l
Pk + 1 = PMk + l -Y M- l

^
证明如下 : 首先 ,由从 到 6 + 1 的定义 ,得到
Pk ^ i = PkM -Y
因此 ,使用归纳假设可计算 Ph 得
Mk l ~

Pk + i = PMk - Y M- l M -Y

把 M 乘进去并且改写 Y ,得到
M出 一 M M- l _y M出 一 1

^
Pk + l = PMk + l -Y M- l
-Y
M- l
FM l
M- l
于是 ,当 =々+ 1 时公式也成立 ,这就证明了定理 。
请参看练习 0.14 , 试试采用这个公式计算实际的抵押付款 。

练习
0.1 考察下列集合的形式化描述 ,先理解它们包括什么样的元素 ,写一段简短文字描述每一个集合 。
a. U
b.{ … , 0 ,2 ,
一 2,
一 4, 4,… }。
c.{ n |对 N 中的某一个 m 9 n= 2 m } 0

d. { n 丨对 N 中的某一个 m , n = 2 m , w = 3々}。
并且对 N 中的某个 A ,
e. |加是 0,
1 字符串 ,
且 w 等 于 的 反 转 }。
r. { n|n 是一个整数 ,且 n = rz + l }。
0.2 试写出下列集合的形式化描述 。
a. 由 1 、10 和 100 组成的集合 。 b. 由所有大于 5 的整数组成的集合 。
c. 由所有小于 5 的自然数组成的集合 。
-
d 由 字 符 串 a b a 组成的集合 。
第0章 绪 论 17

e. 由空串组成的集合 。 f. 空的集合 。
0.3 设 A 为集合 :
U,y, :
d ,B 为集合 U ,y }。
a. A 是 B 的子集吗? d.A f l B 等于什么?
b.B 是 A 的子集吗? e.A X B 等于什么?
.A U B 等于什么?
C f.B 的幂集等于什么?
0.4 设焱有 个元素 ,B 有 6 个元素 ,问 A X B 中有多少个元素 ? 说明理由 。
0.5
0.6
如下表所示 :
^
设 C 是包含 c 个元素的集合 ,试问 C 的幂集中有多少个元素 ? 说明理由 。
2 ,3 ,4 ,5 > ,Y 为集合 { 6 ,
设 X 为集合 { 1 ,

f( n)
6
7 ,8 ,

9
9,10 }。一元函数 /:X

6
10
7
10

8
10
Y 和二元函数分:X X Y

9
10
10
10
— Y

2 7 2 7 8 9 10 6
3 6 3 7 7 8 8 9
4 7 4 9 8 7 6 10
5 6 5 6 6 6 6 6

a. /( 2 ) 的值等于什么? b./ 的值域和定义域是什么?


c. ( 2 ,10 ) 的值等于什么? d. 9 的值域和定义域是什么?

0.7
^
e. 分( 4 ,/⑷ ) 的值等于什么?
对下列每一小题 ,给出一个满足指定条件的关系 。
自反的和对称的 ,但不是传递的 。
c. 对称的和传递的 ,但不是自反的 。
b. 自反的和传递的 ,但不是对称的 。

0.8 考虑无向图 G =( V , 2 ,3 ,4 },边集


E ),其中顶点集 V = { 1 , = {{ 1, { 2 ,3 },
2 }, { 1, { 2 ,4 },
3 }, {1,
4 }}。画出图 G。各顶点的度数是多少? 试在图中标出一条从顶点 3 到顶点 4 的路径 。
0.9 试写出下述图的形式化描述 。

问题
0.10 试证明每个包含两个或两个以上结点的图应包含有相等度数的两个结点 。
0.11 请找出下述证明中的错误 ,它证明所有马的颜色相同 。
断 言 在 任 意 一 个 包 含 A 匹马的集合中 ,所有马的颜色相同 。
证 明 对 /i 作归纳证明 。
归 纳 基 础 对 于 /2 = 1 ,在任何只有一匹马的集合中 ,显然所有马的颜色相同 。
归 纳 步 骤 对 于 々>1 。假 设 命 题 对 于 为 真 ,要 证 明 命 题 对 于 /1 =々 1 也为真 。 +
令 H 为任意一个有々+ 1 匹马的集合 ,现在要证明这个集合中所有马的颜色相同 。
从这个集合中牵走一匹马 ,得到集合 H i 中 恰 好 有 々 匹 马 。根 据 归 纳 假 设 , 中所有马的
颜色相同 。现在把牵走的马重新牵回来 ,再牵走另外一匹马得到集合 H2 。根据同样的道理 , H2
中所有马的颜色也应相同 。因此 ,H 中所有马的颜色一定相同 。
18 第0 章 綠 论

0. 12 设 S( rO = l + 2 + … + rz 是前 w 个自然数之和 ,C( 72 )= l 3 + 23 + … + rz 3
是前 n 个立方数之和 。试
《)= 52 ( 2 ) 这一有趣的结论 。
通过对〃的归纳证明如下等式 ,从而得到对每一个《 有 (( :
a. S ( n ) = - - rz ( n + 1 )
^ 0 ^
b. C( w ) = +4 724 + 2 n + n
( 3 2 )=
+4 n 2( rz
+ l )20
0. 13 请找出下述证明 2 = 1 中的错误 。
提 示 : 考虑方程 a = 6。两边同乘以 a , 得到 a 2 == M 。 两边同时减去 62 . 得到 V — 62 =以 一 62 。
对每一边做因式分解 ,得 U + 6 ) U — 6)= 6 U — 6 )。用 ( a ~ b ) 除每一边 ,得 + 6 = 6。最后 ,
A 0.
14
令 a 和 6 等于 1 ,得证 2 = 1。
利用定理 0.15 试推导出用本金 P 、 利率 J 和付款次数 Z 计算抵押贷款的月付款额的公式 。假设
^
在付【 次款之后 ,贷款余额减少为 0。对于 30 年的抵押贷款 ,假设原贷款额为 10 万美元 ,年利
率为 5 % ,用 360 个月偿清 ,试用公式计算每个月的还款额 。
A* 0.15 Ramsey 定理 。设 G 是一个图 ,G 中的团 ( clique ) 为 任 意 两 个 顶 点 都 有 边 相 连 的 子 图 。 反 团

-
( anti clique ) 又 叫 作 独 立 集 ( independent set ), 它为任意两个顶点都没有边相连的子图 。 试证

明 :所有《 个顶点的图都包含一个顶点数不少于 jlogw 的团或反团。


习题选解
0. 14 令 P,= 0 并解出 Y,以得到公式 : Y = PM ( iVT — 1 ) / ( M — 1 )。由于 P = $ 100 000,1= 0.05 ,
r = 360 , 可以得到 M= l +(0.05 )/12 , 经过计算得到每月应还款为 Y $ 536.82。
0.15 将空间划分成两类顶点集 A 和 B 。 然后扫描整个图 ,如果顶点:r 的度数大于空间中剩余顶点数
目的一半 ,则把 X 加到 A 中 ,否则将其加到 B 中 。如 果 加 到 A 中 ,则不再考虑所有不与其
相连的顶点 ;如果:T 加到 B 中 ,则不再考虑所有与其相连的顶点 。 重复这个步骤 ,直到处理完
所有顶点 。由于每一步最多丢弃一半的顶点 ,因此至少需要经过 log2 W 步过程才会终止 。由于

每步只在 A 或 B 中添加一个顶点 ,所以在过程结束后 A 或 B 中至少含有 jlog 272 个顶点。其

中 ,A 中包含的顶点属于团 ,B 中包含的顶点属于反团 。
I 第一部分
Introduction to the Theory of Computation , 3e

自动机与语言
第1章
Introduction to the Theory of Computation , 3e

正则语言

计 算 理 论 的 第 一 个 问 题 是 :什 么 是 计 算 机? 这 或 许 是 一 个 很 简 单 的 问 题 ,任 何 人 都 知
道 我 用 来 打 字 的 这 个 东 西 就 是 一 台 计 算 机 。但 是 这 些 现 实 的 计 算 机 相 当 复 杂 ,很 难 直 接 对
它 们 建 立 一 个 易 于 处 理 的 数 学 理 论 ,因 此 采 用 称 为 计 算 模 型 ( computational model ) 的 理
想 计 算 机 来 描 述 。同 科 学 中 的 其 他 模 型 一 样 ,一 个 计 算 模 型 准 确 地 刻 画 了 某 些 特 征 ,同 时
忽 略 一 些 特 征 。 因 此 ,针 对 关 注 的 特 性 ,我 们 采 用 几 个 不 同 的 计 算 模 型 。 本 书 从 最 简 单 的
模 型 开 始 ,它 称 为 有 穷 状 态 机 (finite state machine ) 或 有 穷 自 动 机 ( finite automaton )。

1.1 有穷自动机
有 穷 自 动 机 是 描 述 能 力 和 资 源 极 其 有 限 的 计 算 机 的 模 型。一 台 存 储 如 此 少 的 计 算 机 能
做 些 什 么 呢? 回 答 是 :能 做 很 多 有 用 的 事 情!由 于 这 样 的 计 算 机 存 在 于 各 种 各 样 的 机 电 设
备 的 核 心 部 位 ,因 此 事 实 上 ,我 们 随 时 都 在 和 它 们 打 交 道 。
-
如 图 1 1 所 示 ,自 动 门 控 制 器 就 是 这 类 设 备 的 一 个 例 子 。
在 商 场 的 入 口 和 出 口 常 常 看 见 ,当 控 制 器 检 测 到 有 人 正 在 靠
前缓冲区 后缓冲区
近 时 ,自 动 门 就 会 打 开 。自 动 门 的 前 面 有 一 个 缓 冲 区 ,用 来
检 测 是 否 有 人 想 进 来 。 在 门 的 后 面 有 另 一 个 缓 冲 区 ,使 得 控
制器把门打开足够长的时间让人走进来并且不让门在打开的 门

时 候 碰 到 站 在 它 后 面 的 人。 -
图1 1 从上向下看自动门

控 制 器 有 两 个 状 态 :OPEN 和 CLOSED , 分 别 表 示 门 的 开 和 关 ,它 处 于 两 个 状 态 之
一 。如 图 1 - 2 所 示 ,有 4 种 可 能 的 输 入 : FRONT ( 表 示 门 前 面 的 缓 冲 区 内 有 人 )、 REAR
( 表 示 门 后 面 的 缓 冲 区 内 有 人)、 BOTH ( 表 示 前 后 缓 冲 区 内 都 有 人 ) 和 NEITHER ( 表 示
前 后 缓 冲 区 内 都 没 有 人)。
控 制 器 根 据 它 接 收 的 输 入 从 一 个 状 态 转 移 到 另 一 个 状 态 。 当 它 处 于 CLOSED 状 态 且
接 收 到 输 入 NEITHER 或 REAR 时 ,它 仍 处 于 CLOSED 状 态 。 而 且 ,如 果 接 收 到 输 入
BOTH , 它 也 停 留 在 CLOSED 状 态 ,因 为 打 开 门 有 撞 倒 在 后 缓 冲 区 里 的 人 的 危 险 。但 是 ,
如 果 输 入 FRONT 来 到 ,它 便 转 移 到 OPEN 状 态 。 在 OPEN 状 态 ,如 果 接 收 到 输 入
FRONT , REAR 或 BOTH ,它 保 持 在 OPEN 状 态 不 动 。如 果 输 入 NEITHER 来 到 ,它 返
回 到 CLOSED 状 态 。
例 如 ,控 制 器 可 能 开 始 时 处 于 CLOSED 状 态 并 且 接 收 到 下 述 一 系 列 的 输 人 信 号:
FRONT , REAR , NEITHER , FRONT , BOTH , NEITHER , REAR , NEITHER 。那
么 ,它 会 经 过 下 述 状 态 :CLOSED ( 开始 ),OPEN ,OPEN , CLOSED , OPEN , OPEN ,
CLOSED , CLOSED , CLOSED。
用 有 穷 自 动 机 理 论 来 处 理 自 动 门 控 制 器 是 很 好 的 方 法 。 可 以 采 用 如 图 1- 2 和 图 1 - 3 所

© 在一些文献中也被译为 “有限状态机” 或者 “有限自动机”。 译者注


/章 正 则 语 言 21

示的标准表示方法 。控 制 器 是 一 台 存 储 器 只 有 一 位 的 计 算 机 ,能 够 记 录 控 制 器 所 处 的 状
态 。另外一些公用设备的控制器具有容量稍微大一点的存储器 。在 电 梯 的 控 制 器 中 ,状 态
可能表示电梯所在的楼层 ,而输入可能是从按钮接收到的信号 。这台计算机可能需要若干
位存储器来记住这些信息 。各种家电设备 ,例如洗碗机和电子恒温器以及部分电子表和计
算器的控制器也都是只有有限存储的计算机的例子 。设 计 这 种 装 置 需 要 知 道 有 关 有 穷 自 动
机的方法和术语 。

REAR FRONT
BOTH REAR
NEITHER BOTH
FRONT 输人信号
NEITHER FRONT REAR BOTH
CLOSED OPEN
CLOSED CLOSED OPEN CLOSED CLOSED
状态
NEITHER OPEN CLOSED OPEN OPEN OPEN

图 1- 2 自动门控制器的状态图 图 1- 3 自动门控制器的状态转移表

有穷自动机和与之对应的马尔科夫链 ( Markov chain ) 常用于识别数据中的模式 。这


类方法常用在语音处理和光学字符识别中 。马尔科夫链甚至已经被用来对金融市场中价格
的变动进行建模和预测 。
下面从数学的角度考察有穷自动机 。将给出有穷自动机的精确定义 、 用 来 描 述 和 处 理
有穷自动机的术语以及描述它们的能力及其限制的理论结果 。除了让我们更明确地理解什
么是有穷自动机和它们能做什么 、 不能做什么之外 ,这些理论开发工作还能使我们在一个
相对简单的环境中了解数学定义 、 定理和证明 ,并且逐渐变得更加得心应手 。
在叙述有穷自动机的数学理论的初期 ,只做抽象的描述 ,不涉及任何具体的应用。图

^
1- 4 描述了一个有穷自动机 ,它被称为 A 。
-
图 1 4 被 称 为 Mi 的 状 态 图 ( state diagram )。
它有 3 个状态 ,记 作 % ,% 和 <?3 。起 始 状 态 ( start
state ) q x 用 一 个 指 向 它 的 无 出 发 点 的 箭 头 表 示 ,接
0,1
受状态 (accept state ) 仍带有双圈 。从 一 个 状 态 指
图 1- 4 一台有 3 个状态的有穷自动机
向另一个状态的箭头称为转移 ( transition )。
当这个自动机接收到输人字符串 ,例 如 1101 时 ,它 处 理 这 个 字 符 串 并 且 产 生 一 个 输
出 。输岀是接受或拒绝 。为简化描述过程 ,这 里 将 只 考 虑 是 非 型 的 输 出 。处 理 从 的 起
始状态开始 。自动机从左至右一个接一个地接收输入字符串的所有符号 。读到一个符号之
后, 沿着标有该符号的转移从一个状态移动到另一个状态 。 当 读 到 最 后 一 个 符 号 时 ,

^
M! 产生它的输出 。如果 iV 现在处于一个接受状态 ,则输出为接受 ;否则输岀为拒绝 。
-

^
例如 ,把输入字符串 1101 提供给图 1 4 中 的 有 穷 自 动 机 A ,处理步骤如下 :
1. 开始时处于状态 % 。
2. 读到 1 ,沿着转移从 % 到 %。
3. 读到 1 ,沿着转移从 % 到 % 。
4. 读到 0 , 沿着转移从 % 到 % 。
5. 读到 1 ,沿着转移从 % 到 % 。
6. 输 岀 接 受 ,因 为 在 输 人 字 符 串 的 末 端 处 于 接 受 状 态 %。
22 第一部分自动机与语言

用 这 台 机 器 对 各 式 各 样 的 输 入 字 符 串 进 行 试 验 ,得 知 它 接 受 字 符 串 1 、 01 、 11 和
0101010101 。事实上 ,Mi 接受以 1 结尾的任何 0 、 1 串 ,因为只要读到 1 它 就 到 达 接 受 状
态 % 。此外 ,它还接受字符串 100 、 0100 、 110000 和 0101000000 ,以及在最后一个 1 的 后
面 有 偶 数 个 0 的 任 何 0 、1 串 。它 拒 绝 其 他 的 0 、 1 串 ,例 如 0 ,10 ,101000。试 试 描 述 由
接受的所有字符串组成的语言 ,稍后我们将做这件事情 。

1 . 1. 1 有穷自动机的形式化定义
上 一 小 节 用 状 态 图 介 绍 了 有 穷 自 动 机 ,这 一 小 节 将 形 式 化 地 定 义 有 穷 自 动 机 。虽 然 状
态 图 易 于 直 观 地 理 解 ,但 基 于 下 述 两 条 理 由 还 需 要 形 式 化 的 定 义 。
首 先 ,形 式 化 定 义 是 精 确 的 。它 能 消 除 有 关 在 一 台 有 穷 自 动 机 中 任 何 不 明 确 的 疑 点 。
如 果 不 清 楚 有 穷 自 动 机 是 否 可 以 没 有 接 受 状 态 ,或 者 对 各 个 可 能 的 输 入 符 号 从 每 一 个 状 态
是 否 一 定 恰 好 引 出 一 个 转 移 ,那 么 可 以 查 阅 它 的 形 式 化 定 义 ,并 且 得 到 证 实 对 这 两 个 问 题
的 回 答 是 肯 定 的 。其 次 ,形 式 化 定 义 提 供 了 一 种 表 示 方 法 ,好 的 表 示 方 法 有 助 于 思 考 并 清
楚 地 表 达 岀 你 的 思 想。
形 式 化 定 义 的 语 言 多 少 有 点 神 秘 ,与 法 律 文 件 的 语 言 有 一 些 相 似 之 处 。两 者 都 必 须 是
精 确 的 ,每 一 个 细 节 必 须 给 予 清 楚 的 说 明 。
一 台 有 穷 自 动 机 有 若 干 部 分。它 有 一 个 状 态 集 和 根 据 输 入 符 号 从 一 个 状 态 到 另 一 个 状
态 的 规 则 。它 有 一 个 输 入 字 母 表 ,指 明 所 有 允 许 的 输 入 符 号 。它 还 有 一 个 起 始 状 态 和 一 个
接 受 状 态 集 。形 式 化 定 义 把 一 台 有 穷 自 动 机 描 述 成 一 张 含 以 下 5 部 分 的 表 :状 态 集 、 输 入
字 母 表 、 动 作 规 则 、 起 始 状 态 以 及 接 受 状 态 集 。用 数 学 语 言 表 达 ,5 个 元 素 的 表 经 常 称 为
5 元 组 。因 此 ,定 义 有 穷 自 动 机 是 由 这 5 部 分 组 成 的 5 元 组 。
用 转 移 函 数 ( transition function ) 定 义 动 作 规 则 ,常 记 作 5。 如 果 有 穷 自 动 机 有 从 状
态 到状态标 有 输 人 符 号 1 的 箭 头 ,这 表 示 当 它 处 于 状 态 I 时 读 到 1 ,则 转 移 到 状 态 h

^ ^
可 以 用 转 移 函 数 讲 清 楚 这 件 事 情 ,记 作 5(:r ,
些 结 合 在 一 起 得 到 有 穷 自 动 机 的 形 式 化 定 义。
l )= y 。这 个 记 号 是 一 种 数 学 简 写 方 式 。 把 这

2 ,5,
有 穷 自 动 机 是 一 个 5 元 组 (Q , gQ ,
F),其 中
1. Q 是 一 个 有 穷 集 合 ,称 为 状 态 集 。

4. —
2 . 2 是 一 个 有 穷 集 合 ,称 为 字 母 表 。
3.5:Q X 2 Q 是 转 移 函 数 。
是 起 始 状 态。
5. F G Q 是 接 受 状 态 集 ◎ 。
上 述 形 式 化 定 义 精 确 地 描 述 了 有 穷 自 动 机 。例 如 ,回 到 先 前 提 出 的 那 个 问 题 :是 否 允
许 没 有 接 受 状 态? 可 以 看 到 ,如 果 令 F 等 于 空 集 0 就 没 有 接 受 状 态 ,因 此 对 这 个 问 题 的 回
答 是 肯 定 的 。 此 外 ,转 移 函 数 5 对 一 个 状 态 和 一 个 输 入 符 号 的 每 一 种 可 能 的 组 合 恰 好 指 定
了 下 一 个 状 态 。这 就 对 第 二 个 问 题 做 出 肯 定 的 回 答 ,表 明 对 各 个 可 能 的 输 入 符 号 从 每 一 个
状 态 恰 好 引 出 一 个 转 移 箭 头。
通 过 指 定 定 义 1.1 中 列 出 的 5 部 分 ,可 以 用 这 个 形 式 化 定 义 的 记 号 描 述 各 个 具 体 的 有 穷


-
如果不清楚心 QX 2 Q 的含义 ,请参阅 0.2.3 节 。
接受状态有时也称作终结状态 ( final state )
第1 章 正 则 语 言 23

-
自 动 机 。 例 如 ,回 到 图 1 4 描 述 的 有 穷 自 动 机 从 。为 便 于 描 述 在 这 里 将 其 重 画 ,如 图 1 5
_
所 示。 . ,

2 ,5 ,9 l ,F ),
可 以 把 純 形 式 地 写 成 M! = ( Q,
其中
n
1- Q ( ,
%}。

^
2 0,1
2 . 2 = { 0 ,1 } 0

图 1- 5 有 穷 自 动 机 Mj
3.5 描 述 为

_
4 .q l 是 起 始 状 态 。
5.F = { g2 } 0

若 A 是 机 器 M 接 受 的 全 部 字 符 串 集 ,则 称 A 是 机 器 M 的 语 言 ,记 作 L( M) = A 。 又
称 M 识 别 A 或 M 接 受 A 。由 于 在 说 机 器 接 受 字 符 串 和 机 器 接 受 语 言 时 接 受 一 词 有 不 同 的
含 义 ,所 以 我 们 倾 向 于 对 语 言 使 用 识 别 二 字 以 避 免 混 清 。
一 台 机 器 可 能 接 受 若 干 字 符 串 ,但 是 它 永 远 只 能 识 别 一 个 语 言 。 如 果 机 器 不 接 受 任 何
字 符 串 ,那 么 它 仍 然 识 别 一 个 语 言 ,即 空 语 言 0 。
在 上 面 的 例 子 中 ,令
A ={ w|w 至 少 含 有 一 个 1 并 且 在 最 后 的 1 后 面 有 偶 数 个 0 }
那 么,U M O = A , 或 者 等 价 地 说 , 识 别 A。

1 .1 . 2 有穷自动机举例

dDD -
图 i 6 是 有 穷 自 动 机 M2 的 状 态 图 。
采 用 形 式 化 描 述 ,M 2 = ( { q l ,q2 } 9 { 0 9 1 } , 9

{ q2 ) ) o 转 移 函 数§为

-
图1 6 -
2 状 态 有 穷 自 动 机 M2 的 状 态 图

注 意 ,M2 的 状 态 图 和 M2 的 形 式 化 描 述 包 含 相 同 的 信 息 ,仅 仅 是 形 式 不 同 。如 果 需
要 ,总 可 以 由 其 中 的 一 个 得 到 另 一 个 。
了 解 一 台 机 器 的 常 用 方 法 是 用 几 个 样 本 输 人 串 做 测 试 。当 做 这 些 “试 验” 观 察 机 器 如
何 工 作 的 时 候 ,通 常 ,它 的 运 行 方 式 会 变 得 十 分 清 楚 。 对 于 样 本 串 1 1 0 1 ,M2 从 它 的 起 始
状 态 % 开 始 ,首 先 读 到 第 一 个 1 后 转 移 到 状 态 % ,然 后 在 读 到 1 ,0 和 1 后 进 入 到 状 态
q2 ,
q 和 % 。这 个 字 符 串 被 接 受 ,因 为 状 态 % 是 接 受 状 态 。 而 字 符 串 1 1 0 使 純 停 留 在
状态 q
'
所 以 它 被 拒 绝 。再 试 几 个 例 子 之 后 ,可 以 看 出 M2 接 受 所 有 以 1 结 束 的 字 符 串。

于 是 ,L( M2 ) = { W|w 以 1 结 束 }。
考 虑 有 穷 自 动 机 M3 ,见 图 1 7 。
-
24 第一部分自动机与语言

— 样。照 例,M
^
除接受状态的位置之外 ,机 器 以3 与 ] 2 3 接受所有读完之后停留在接
受状态的字符串。注意 ,因 为 起 始 状 态 同 时 也 是 接
受状态 ,所 以 iW3 接 受 空 串 e ,只 要 机 器 一 开 始 读
空 串,处理就结束了 。因 此 ,如 果 起 始 状 态 是 接 受
状 态 ,则 e 被 接 受 。除 空 串 之 外 ,这 台 机 器 接 受 任
何以 0 结束的字符串。从而 ,
L ( M3 ) = { W | I^ 是空串 e 或以 0 结束 } m 图1 7- -
2 状 态 有 穷 自 动 机 M3 的 状 态 图

dWMa -
图 1- 8 给出一台 5 状 态 机 器 M 4 。
机 器 M4 有 两 个 接 受 状 态 % 和 n ,在 字 母 表
2= { a ,
b } 上 运 行 。 试 验 表 明 它 接 受 字 符 串 a ,b,
aa , bb 和 bab,但 是 不 接 受 字 符 串 ab ,ba 和 bb -
ba。这 台 机 器 从 状 态 6 开 始 ,在 读 入 输 入 字 符 串 的
第一个符号之后它或者向左进入 g 状 态 ,或 者 向 右
进 人 r 状态 。不论是哪种情况 ,它都不可能返回到
起始状态 (这 与 前 几 个 例 子 是 不 同 的 ),因 为 它 没
有办法从任何其他状态回到状态 如果输入字符 图1 8 - 有 穷 自 动 机 M4

^
串的第一个符号是 a ,那 么 它 向 左 走 并 且 当 输 入 串
以 a 结束时接受 。类似地 ,如果第一个符号是 b ,那么它向右走并且当输入串以 b 结 束 时
接 受 。所 以 ,M4 接受开头和结尾都是 a 或 者 开 头 和 结 尾 都 是 b 的 所 有 字 符 串。亦 即 ,M4
接受开头和结尾符号相同的所有字符串。 ■

遇 图 1 - 9 给 岀 3 - 状 态 机 器 M5 ,它的输人字母表有 4 个 符 号 ,2= {( RESET ),


0,
1,2 }。把〈 RESET〉看作一个符号。
机 器 以 模 3 的方式记录它在输入字符串
中 读 到 的 数 字 之 和。 每 次 读 到 符 号〈 RESET 〉

它 将 计 数 重 新 置 0。 如 果 和 模 3 等 于 0 , 亦 即 , %
和是 3 的倍数 ,则 M5 接 受 。 ■
0, ( RESET )
在某些情况下无法用状态图来描述有穷自
动 机 。当 状 态 图 画 起 来 太 大 ,或 者 像 在 下 个 例
子中描述依赖于有穷自动机的某个未具体指定 1,( RESET )

的参数时就有可能这样 。 在 这 些 情 况 下 ,将 采
图 1- 9 有 穷 自 动 机 M5
用形式化描述来说明机器 。
考虑例 1.5 的推广 ,使 用 与 例 1.5 相 同 的 4 个 符 号 的 字 母 表 2。 对每一个
设 九 是 所 有 这 种 字 符 串 的 语 言 ,其中数字之和是 f 的 倍 数 ,当碰到符号 〈 RESET〉
时 ,和被重新置 0。对于每一个 Az ,给 出 识 别 它 的 有 穷 自 动 机 氏 。形 式 地 描 述 机 器 如
下 :Bi = CQi 9 I ,Si ,q0 Aq0 } ) J 这 里 Qf 是 z 个 状 态 的 集 合 { gQ ,
%,<? ,
2 …, },设 计 转 移
函数次使得对每一个),若氏处于七时 ,此 时 的 和 模 t 等 于 八 对 每 一 个 1,令
Si ( q j 0 )= Q j
这里 k = j + 1 mod i
di ( q ,\ ) = q k ,
}

,2) = % , 这里 k = j \ 2 mod i
~ ~
第J 章 正 则 语 言 25

8i ( q j ,( RESET ) ) = o
^
1 . 1 .3 计算的形式化定义
至 此 已 用 状 态 图 非 形 式 化 地 描 述 了 有 穷 自 动 机 ,同 时 又 用 5 元 组 作 为 形 式 化 定 义 描 述
了 它 。非 形 式 化 描 述 易 于 在 初 期 掌 握 ,而 形 式 化 定 义 是 把 概 念 完 全 搞 清 楚 的 好 方 法 。 形 式
化 定 义 能 够 清 除 在 非 形 式 化 描 述 中 可 能 岀 现 的 任 何 二 义 性 。下 面 对 有 穷 自 动 机 的 计 算 也 这
样 做。由 于 已 经 有 了 关 于 有 穷 自 动 机 计 算 方 式 的 非 形 式 的 想 法 ,现 在 就 把 它 数 学 地 形
式 化。
设 M =( Q ,
H % ,F ) 是 一 台 有 穷 自 动 机 ,W =W \ W
,
2
m,

-
VU n 是 一 个 字 符 串 并 且 其 中 任

,是 字 母 表 2 的 成 员 。如 果 存 在 Q 中 的 状 态 序 列 n),
n,… , ,满 足 下 述 条 件:
丄 .r0 = q

2,
3.r „ G F
0

=
.
z = 0 , …,
, w 1— ^
则 M 接受 w o -
条 件 1 说 机 器 从 起 始 状 态 开 始 。条 件 2 说 机 器 按 照 转 移 函 数 从 一 个 状 态 到 一 个 状 态 。
条 件 3 说 如 果 机 器 结 束 在 接 受 状 态 ,则 接 受 它 的 输 入 。 如 果 A = { W|M 接 受 w },则 称 M
识别语言 A 。
如 果 一 个 语 言 被 一 台 有 穷 自 动 机 识 别 , 则 称 它 是 正 则 语 言 ( regular lan -
guage ) 0

(HEI 以 例 i .5 中 的 机 器 M5 为 例 ,令 加 是 字 符 串
1 0〈 RESET > 22
〈 RESET > 0 1 2
由 于 当 M5 对 w 计 算 时 进 入 的 状 态 序 列 为
,%, <? , , ,
i % % % Wo ,%,%, 90
它 满 足 上 述 3 个 条 件 ,根 据 计 算 的 形 式 化 定 义 ,M5 接 受 tc,。 的语言是
L( M5 )= { tH 除〈 RESET〉将 计 数 重 新 置 0 之 外,w 中 所 有 符 号 之 和 模 3 等 于 0}
因 为 M5 识 别 该 语 言 ,所 以 它 是 正 则 语 言。

1. 1 . 4 设计有穷自动机
不 论 是 自 动 机 还 是 艺 术 品 ,设 计 都 是 一 个 创 作 过 程 ,因 此 不 可 能 把 它 归 结 为 一 个 简 单
的 处 方 或 公 式 。然 而 ,可 以 找 到 一 种 特 殊 的 做 法 ,在 设 计 各 种 类 型 的 自 动 机 时 都 是 有 帮 助
的 。设 计 者 把 自 己 放 在 所 要 设 计 的 机 器 的 位 置 上 ,考 虑 一 下 如 何 去 实 现 机 器 的 任 务 。把 自
己 假 想 成 机 器 是 一 种 心 理 上 的 技 巧 ,有 助 于 设 计 者 把 全 部 思 维 投 人 到 设 计 过 程 中 。
用 上 面 描 述 的 “读 者 即 自 动 机” 方 法 设 计 有 穷 自 动 机 。 假 设 有 某 个 语 言 ,要 设 计 一 台
识 别 它 的 有 穷 自 动 机 。假 定 设 计 者 自 己 就 是 这 台 有 穷 自 动 机 ,接 到 一 个 输 入 字 符 串 并 且 要
确 定 它 是 不 是 这 台 自 动 机 所 识 别 的 语 言 的 成 员 。设 计 者 一 个 接 一 个 地 读 这 个 字 符 串 的 符
号 。在 读 到 每 一 个 符 号 之 后 设 计 者 必 须 确 定 到 现 在 为 止 所 看 到 的 字 符 串 是 否 在 这 个 语 言
中 。理 由 是 设 计 者 和 机 器 一 样 不 知 道 字 符 串 什 么 时 候 结 束 ,因 此 必 须 随 时 准 备 好 答 案 。
首 先 ,为 了 能 做 出 这 样 的 判 断 ,必 须 估 算 岀 当 读 一 个 字 符 串 时 需 要 记 住 它 的 哪 些 东
西。为 什 么 不 直 接 记 住 所 看 到 的 全 部 东 西 呢? 记 住 当 前 设 计 者 是 一 台 有 穷 自 动 机 ,这 种 类
26 第一部分自动机与语言

型的机器只有有穷个状态 ,这意味着只有一个有穷的存储器 。想象某个输人极长 ,比如说


有从地球到月球那么长 ,因 此 设 计 者 不 可 能 记 住 所 有 的 事 情 。 设 计 者 有 一 个 有 穷 的 存 储
器 ,比如说是一张纸 ,它只有有限的存储能力 。 幸运的是 ,对 许 多 语 言 不 需 要 记 住 整 个 输
人 ,只需要记住某些关键的信息 ,那些信息恰好是关键的并且与所考虑的具体语言有关 。
例如 ,假设字母表是 { 0 ,1 } , 所考虑的语言由所有含有奇数个 1 的 字 符 串 组 成 。目 标
是构造一台有穷自动机 G 以识别这个语言 。设 想 设 计 者 就 是 这 台 自 动 机 ,开 始 一 个 符 号
接一个符号地得到一个 0 、1 输 人 串。 为 了 确 定 1 的个数是否为奇数 ,需 要 记 住 至 此 所 看
到的整个字符串吗? 当然不需要 。只 需 简 单 地 记 住 至 此 所 看 到 的 1 的 个 数 是 偶 数 还 是 奇
数 ,并且在读新的符号时保持与这个信息的联系 。如果读到 1 ,就把答案从偶数变成奇数
或者从奇数变成偶数 。如果读到 0 , 则答案保持不变 。
但 是 这 些 怎 样 帮 助 设 计 者 设 计 呢? 一 旦 确 定 了 要 记 住 的 有 关 读 过 的 字 符 串 的 必 要
信息 ,就把这些信息列成一份可能性的有限清单 。在这个实例中 ,可能性有 :
1. 到此为止是偶数 。
2. 到此为止是奇数 。
然后 ,给每一种可能性设计一个状态 。这些就是 & 的全部状态 ,如图 1 - 10 所示 。
然 后 ,通 过 观 察 如 何 根 据 读 到 的 符 号 从 一 种 可 能 性 到 另 一 种 可 能 性 来 设 计 转 移 。因
此 ,如果状态 %ven 表 示 偶 数 可 能 性 、 状 态 9 Kld 表 示 奇 数 可 能 性 ,这 样 可 以 给 出 所 有 的 转
(

移 ,读到 1 改 变 状 态 ,读到 0 保持状态不变 ,如图 1 11 所 示 。 -

-
图 1 10 状 态 geven 和 状 态 %dd
-
图 1 11 说明如何重新安置可能性的转移

接下来 ,把起始状态设置为对应于到现在为止还没有看到与
任何符号 (空 串 e ) 相关联的可能性的状态 。 在 这 个 例 子 中 ,起
始状态是状态 geven ,因为 0 是偶数 。 最 后 ,把 接 受 状 态 设 置 为 这
样一些状态 ,它们都对应于自动机打算要接受输入字符串的可能
性 。 令 %dd 为 接 受 状 态 ,因 为 当 看 到 奇 数 个 1 时就打算要接受 。 图 卜 12 增加起始状态
这些添加的内容在图 1 12 中给出 。
- 和接受状态

本例说明如何设计有穷自动机 E2 , 使 其 能 识 别 含 有 001 作为子串的所有字


符串组成的正则语言 。 例如 ,0010 ,1001 ,001 和 11111110011111 都 在 这 个 语 言 中 ,而
11 和 0000 则不在这个语言中 。如果设计者是 :, 他 会 怎 样 识 别 这 个 语 言 呢? 当符号一个
2

接一个地到来时 ,他开始可能要跳过所有的 1。如果得到一个 0 , 那么注意到 ,他此时可


能刚刚看见所要寻找的模式 001 中的第一个符号 。如果接着看见一个 1 ,由于 0 的 个 数 不
够 ,所以返回去跳过 1。但是 ,如 果 接 着 看 见 一 个 0 , 则应该记住已经看见模式的两个符
号 。现在只需要继续扫描直到看见一个 1 为止 。如果找到 1 ,那么记住已经成功地找到模
式 001 ,并且继续读完输入字符串 。
因 此 ,有 4 种 可 能 性 :
1. 刚才没有看见模式的任何符号。
第1 章 正 则 语 言 27

2. 刚 才 看 见 一 个 0 。


3. 刚 才 看 见 0 0 。
4. 已 经 看 见 整 个 模 式 0 0 1 。
。。
用 状 态 心 % ,g 和 %()1 分 别 表 示 这 4 种 可 能 性 。通 过 下 述 观 察 可 以 给 出 所 有 的 转 移 :
在 g 读 到 1 时 仍 停 在 g 而 读 到 0 时 转 移 到 %; 在 % 读 到 1 时 返 回 到 g 而 读 到 0 时 转 移 到
00; 在 读 到 1 时 转 移 到 Wen 而 读 到 0 时 仍 停 留 在 最 后 ,在 知M 读 到 0 或 1 时 都 停

^ 。
留 在 9 0 1 。起 始 状 态 是 唯 一^ 的 接 受 状 态 是

q
0

%
^
,如 图 1 - 1 3 所 7K 。

《00
0 0,1

-
图 1 13 接受含有 001 的字符串

1 . 1.5 正则运算
在 前 两 个 小 节 中 我 们 介 绍 并 定 义 了 有 穷 自 动 机 和 正 则 语 言 ,现 在 开 始 考 察 它 们 的 性
质。这 些 工 作 有 助 于 开 发 一 个 工 具 箱 ,它 提 供 在 设 计 识 别 特 定 语 言 的 有 穷 自 动 机 时 需 要 的
技 术 。工 具 箱 还 包 括 证 明 某 些 其 他 语 言 不 是 正 则 语 言 (即 ,超 出 了 有 穷 自 动 机 的 能 力 ) 的
方 法。
在 算 术 中 ,基 本 对 象 是 数 ,工 具 是 处 理 数 的 运 算 ,如 + 和 X 。在 计 算 理 论 中 ,对 象 是
语 言 ,工 具 包 括 为 处 理 语 言 专 门 设 计 的 运 算 。 定 义 语 言 的 三 种 运 算 , 称 为 正 则 运 算
( regular operation ), 并 且 使 用 这 些 运 算 来 研 究 正 则 语 言 的 性 质。
设 A 和 B 是 两 个 语 言 , 定 义 正 则 运 算 并 ( union )、 连 接 ( concatena -
tion ) 和 星 号 (star ) 如 下 :
并 :AUB = U|x 6 A 或:rGB }
• 连 接: 且

• 星 号 :A = { xi:
*
T2 …:c* I 々>0 且 每 一 个:CiGA }
大 家 对 并 运 算 已 经 很 熟 悉 ,它 把 A 和 B 中 的 所 有 字 符 串 合 并 在 一 个 语 言 中 。
连 接 运 算 有 点 小 花 招 。它 以 所 有 可 能 的 方 式 ,把 A 中 的 一 个 字 符 串 接 在 B 中 的 一 个
字 符 串 的 前 面 ,得 到 新 的 语 言 中 的 全 部 字 符 串。
星 号 运 算 与 前 两 个 运 算 有 点 不 同 ,因 为 它 作 用 于 一 个 语 言 而 不 是 两 个 语 言 。亦 即 ,星
号 运 算 是 一 元 运 算 ( unary operation ) 而 不 是 二 元 运 算 ( binary operation )。它 把 A 中 的
任 意 个 字 符 串 连 接 在 一 起 得 到 新 语 言 中 的 一 个 字 符 串 。因 为 “任 意 个” 包 括 0 个 在 内,所
以 不 管 A 是 什 么,空 串 e 总 是 A * 的 一 个 成 员 。
OBBI 设 字 母 表 2 是 标 准 的 2 6 个 字 母 { a,
b,…,
z }。 又 设 A = { good ,bad } ,B =
{ boy ,
girl },则
A \J B={ good , bad , boy , girl } ,
A ° B= { goodboy , goodgirl , badboy ,badgirl } ,
A * = { e , good ,bad , goodgood ,goodbad , badgood ,badbad ,
goodgoodgood , goodgoodbad ,goodbadgood ,goodbadbad , ••• }
28 第一部分自动机与语言

设 2 ,3 , } 是自然数集 。 说
={ 1 , 一 N 在乘法运算下封闭的意思是 ,对 N 中任意的:r
: ~
和 V ,乘 积 也 在 N 中 。 相反地 ,N 在除法下不是封闭的 ,因为 1 和 2 在 N 中 ,而 1 /
2 不在 N 中 。一般说来 ,如果把某种运算应用于一个对象集合的成员得到的对象仍在这个
集合中 ,则称这个对象集合在该运算下封闭 。下面证明正则语言类在三种正则运算下封
闭 。在 1.3 节将会看到这些封闭性对于处理正则语言和了解有穷自动机的能力是有用的工
具。首先 ,从证明并运算开始 。
正则语言类在并运算下封闭。
换 言 之 ,如 果 Ai 和 A 2 是 正 则 语 言 , 则 A 〗 UA 2 也 是 正 则 语 言 。
证明思路有两个正则语言 A i 和 A 2 , 要 证 明 A i U A2 也是正则的 。 由于 Ai *A 2 是
正 则 的 ,所 以 有 一 台 有 穷 自 动 机 识 别 A! 和一台有穷自动机 M2 识别 A 2 。为了证 WAi
UA 2 是正则的 ,因而要证明有一台有穷自动机识别 A i U A 把它称为 M。

^ Ai U A 2 , 机 器 M 必

^ ^
这是一个构造性证明 。 利用 ] 和 ]\ 2 构造 M。 为了识别并语言

^ ^
须恰好在或] 2 接 受 的 时 候 接 受 它 的 输 人 串 。M 模 拟 iV 和 M2 并 且 当 这 两 个 模 拟 中
有一个接受时 ,M 接受 。
机器 M 怎 样 模 拟 *M 2 呢? 它可能是先在输人上模拟 M! ,然后再在输入上模拟
M2 。但是 ,在这里必须小心! 一旦输入中的符号被读过且用于模拟 M:,就不可能为了模
拟純 “把输入带重新绕回去”。因而需要用另外的方法 。
,

^^
设计者可以设想自己就是 M。当输入符号一个接一个地来到时 ,同时模拟 ] 和] 2

但只能经过输入串一次 。但是 ,能够用有穷的存储同时记住两个模拟吗? 需要记住的全部


内容是 ,当每一台机器读到输入字符串的这个地方时 ,它会处在什么状态 。因此需要记住
一对状态 。 可能会有多少对状态? 如果 M: 有 h 个状态 ,iVf2 有 h 个状态 ,那么一共有

^
h X h 对状态 ,其中一个状态来自 iV ,另一个状态来自 M2 。这个数目将是 M 的状态数 ,

^^
iV 和] 2 的一对状态是 M 的一个状态 。M 的转移从一对状态到一对状态 ,同时修改 M:
和 M2 当 前 的 状 态 。 当 的 状 态 是 接 受 状 态 时 ,这 对 状 态 是 M 的接受状态 。
证 明 设 ⑽ 识 别 A!,M2 识 别 A 2 ,其中
% F i ) ,M2 = ( Q2 982 yq 2 ,

^
M i = (Qi ,
2, 汐1 , 心)
9

构造识别 A! U A 2 的 M,这里 M=( Q , H% , F)。


1.Q = {( r1 ,r 2 ) | n e Q i 且 r 2 e Q2 }。集合 Q 是 Q i 与 02 的笛卡儿积 ,记作 Q i X Q2 。
它是第一个元素取自 Q h 第二个元素取自 Q2 的所有的状态有序对组成的集合 。
2. 字母表 2 , 与 ]1 、M2 的字母表相同 。 在这个定理以及随后所有类似的定理中 ,为
简 单 起 见 ,假 设
定理仍然成立 。 不过要修改证明 ,令
*M
^
3. 转移函数 5 定义如下 :对每一对 (n ,
2 有相同的输人字母表 2。如果它们有不相同的字母表

r2 )6 Q 和 每 一 个 令
S( ( r \ ,
r2 ),
a )=(5i(n ,
a ),
J2 O2 ,
a )) ^
和么 ,

于是 ,5 取 M 的一个状态 (它实际上是取自 M i *M 2 的一对状态 ) 和一个输入符号 ,返


回 M 的下一个状态 。
4. q0 是有序对 (% ,<?2 )。
5.F 等于有一个元素是 iV 或 ] 2 的接受状态的有序对组成的集合 。它可以写成

^^
F= { (r i ,r2 )I n G F i 或 7 2 6 F2 } -
第J 章 正 则 语 言 29

^ 。
这个表达式与 / ( AXQdLKQiXFd 相 同 。( 注 意 :它 与 不 同。这 个 表 达
式能给我们提供什么呢?)e
至此 ,构造识别八 1 义2 的有穷自动机 M 的工作已经完成 。这个构造相当简单 ,因 而
根据在证明思路中描述的策略 ,它的正确性是显然的 。更复杂的构造要求增加证明正确性
的讨论 。通 常 采 用 归 纳 法 形 式 地 证 明 这 类 构 造 的 正 确 性 。作 为 一 个 例 子 ,请 看 定 理 1.28
的 证 明 。本课程中大多数这类构造都相当简单 ,因而不需要形式化的正确性证明 。 鐵

刚才证明了两个正则语言的并集是正则的 ,因而证明正则语言类在并运算下封闭 。 接
下来转到连接运算 ,并且试着证明正则语言类在该运算下也封闭 。
正则语言类在连接运算下封闭。
换 言 之 ,如 果 A! 和 A 2 是 正 则 语 言 ,则 Ai 。A 2 也 是 正 则 语 言。
为了证明这个定理 ,让我们按照关于并运算下封闭的证明线索试一试 。 和 前 面 一 样 ,
从假设有穷自动机 *M 2 分 别 识 别 正 则 语 言 烏 和 八2 开始 。但是 ,现在设计的有穷自

^
动机 M 不是当 iVH 或 ] 2 接 受 输 入 时 它 才 接 受 输 入 ,而 应 该 是 当 它 的 输 入 可 以 被 分 成 两
段 ,M! 接受第一段且 M2 接受第二段时 ,iVT 才接受输入 。问 题 是 M 不 知 道 在 什 么 地 方 把
它的输人分开 (即在什么地方第一段结束和第二段开始)。 为 了 解 决 这 个 问 题 ,引 人 所 谓
非确定性的新技术 。

1.2 非确定性
非确定性是一个有用的概念 ,已 经 对 计 算 理 论 产 生 了 巨 大 的 影 响 。 至 今 在 我 们 的 讨 论
中 ,计算的每一步都按照唯一的方式跟在前一步的后面 。当机器处于给定的状态并读人下
一个输入符号时 ,可以知道机器的下一个状态是什么—它是确定的 。因 此 ,称 这 是 确 定
型计算 ( deterministic computation )。 在 非 确 定 型 ( nondeterministic ) 机 器 中 ,在 任 何 一
点 ,下一个状态可能存在若干个选择 。
非确定性是确定性的推广 ,因此每一台确定型有穷自动机自动地是一台非确定型有穷
自 动 机 。如图 1 - 14 所 示 ,非确定型有穷自动机可能有一些另外的特征 。

0,1

图 1- 1 4 非 确 定 型 有 穷 自 动 机 Ni

确定型有穷自动机 ( 简称 DFA ) 与 非 确 定 型 有 穷 自 动 机 ( 简 称 NFA ) 之 间 的 区 别 是


显而易见的 。第一 ,DFA 的每一个状态对于字母表中的每一个符号总是恰好有一个转移
-
箭头射出 。图 1 14 中给出的非确定型自动机违背了这条规则 。 状态 % 对 于 0 有 一 个 射 岀
的 箭 头 ,而对于 1 有 两 个 射 出 的 箭 头 ;g2 对 于 0 有 一 个 箭 头 , 而 对 于 1 没 有 箭 头 。 在
NFA 中 ,一个状态对于字母表中的每一个符号可能有 0 个 、 1 个或多个射岀的箭头 。
第二 ,在 DFA 中 ,转移箭头上的标号是取自字母表的符号 。 NFAiVi 有 一 个 带 有 标

这个表达式把 M 的接受状态定义为两个元素都是接受状态的有序对 。在这种情况下 ,M 接受一个字符串仅当


*
M2 都接受这个字符串 ,因此产生的语言是交集 ,而不是并集 。事实上 ,这个结果证明正则语言类在交
运算下封闭 。
30 第一部分自动机与语言

号 e 的箭头 。一般地说 ,NFA 的箭头可以标记字母表中的符号或 e。从 一 个 状 态 可 能 射 出


0 个 、1 个或多个带有标号 e 的箭头 。
NFA 如何进行计算? 假设一台 NFA 正在对一个输入串运行 ,它能以多种行进方式到
达 一 个 状 态 。 例如 ,NFA iVi 处 于 状 态 % ,下 一 个 输 入 符 号 是 1 。在 读 入 这 个 符 号 后 ,机
器把自己复制成多个备份 ,并且并行地执行所有的可能性 。机器的每一个备份采用一种可
能的方式进行 ,并且像前面一样继续下去 。 如果随后又有多种选择 ,机 器 将 再 次 分 裂 。 对
于机器的一个备份 ,如果下一个输入符号不出现在它所处的状态射出的任何箭头上 ,则 机
器的这个备份及其相关联的计算分支一块死掉 。最 后 ,如果机器的某一个备份在输入的末
端处在接受状态 ,则这台 NFA 接受输入字符串 。
如 果 遇 到 一 个 状 态 ,在射出的箭头上标有 e ,发 生 的 情 况 类 似 。不 用 读 任 何 输 入 ,机
器分裂成多个备份 ,每一个标记 e 的射出箭头有一个备份跟踪 ,还 有 一 个 备 份 停 留 在 当 前
状态 。然后机器和前面一样非确定性地运行 。
可 以 把 非 确 定 性 看 作 是 若 干 独 立 的 “过 程 ” 或 “线 程”,即 能 同 时 运 行 的 一 类 并 行 计
算 。当 NFA 分头跟踪若干选择时 ,这 对 应 于 一 个 过 程 “ 分叉 ” 成 若 干 子 过 程 ,各 个 子 过
程分别地进行 。如果这些子过程中至少有一个接受 ,那么整个计算接受 。
另一种方法是把非确定型计算看作一棵可能性的树 。树 根 对 应 计 算 的 开 始 ,树 中 的 每
一个分支点对应计算中机器有多种选择的点。 如果计算分支中至少有一个结束在接受状
-
态 ,则机器接受 ,如 图 1 15 所 示 。
- -
考虑图 1 14 给岀的 NFAiV! 的运行 。图 1 16 描 绘 了 M 关 于 输 入 010110 的计算 。

读人的符号 开始

确定型计算 非确定型计算
开始 % 《3

n
拒绝 n % )⑹ 分4

q
©
^^
2 )( 3) (
^
4

*
接受或拒绝 接受 @
-
图1 15 有一个接受分支的确定型计算和非确定型计算 图 1- 1 6 N j 关于输入 010110 的计算

对于输入 010110 , 从起始状态 % 开 始 ,读 第 一 个 符 号 0。 对 于 0 , 从 % 出 发 只 有 一


个地方能去 ,即 回 到 % ,所以保持不动 。 接 着 读 第 二 个 符 号 1。 对于 1 ,% 有 两 种 选 择:
或者停留在 % ,或者移到 % 。对 非 确 定 型 ,机 器 分 裂 成 两 个 ,分 头 跟 踪 每 一 种 选 择 。 为
了记住可能处于哪些状态 ,在 机 器 的 每 一 个 可 能 的 状 态 上 放 一 个 手 指 。因 此 现 在 把 手 指 放
在状态 % 和 % 上 。有 一 个 e 箭头离开状态 g 2 , 故 机 器 再 次 分 裂 :一 个 手 指 留 在 % ,另 一
个手指移到 。现 在 ,在 % ,七和 % 上都有手指 。
当读第三个符号 0 时 ,返 回 来 看 每 一 个 手 指 。% 上 的 手 指 保 持 不 动 ,g2 上 的 手 指 移
第J 章 正 则 语 言 31

到 % ,并且把原来在 % 上 的 手 指 拿 掉 。原 来 在 g3 上的手指没有 0 箭 头 能 沿 着 走 ,这对应


一 个 完 全 “死 掉” 的 过 程 。此 时 ,在 状 态 % 和 % 上有手指 。
当读第四个符号 1 时 ,在 % 上的手指分裂成在状态 % 和状态 g2 上的手指 ,然后在 %
上的手指进一步分裂出一个手指沿着 箭 头 到 达 93 , 而 在 % 上 的 手 指 移 动 到 g4 。 现 在 在
四个状态上都有手指 。
和读第四个符号一样 ,当读第五个符号 1 时 ,在 % 和 % 上的手指变成在状态 % ,
% 和 % 上 的 手 指 。在状态 % 上的手指被移开 ,在 % 上 的 手 指 留 在 % 上不动 。 现 在 在 %
上有两个手指 ,所以移开一个 ,因 为 在 此 刻 只 需 要 记 住 % 是 一 个 可 能 的 状 态 ,而 不 需 要
记住有多少理由使它成为可能的状态 。
当读第六个也是最后一个符号 0 时 ,在 % 上 的 手 指 原 地 不 动 ,在 % 上的手指移到 %
上 ,移开原来在 % 上 的 手 指 ,在 % 上 的 手 指 留 在 原 地 不 动 。 现 在 已 经 到 达 字 符 串 的 末
端 ,如果有某只手指在一个接受状态上 ,则 接 受 该 字 符 串 。 现 在 ,在状态 % 、% 和 % 上
都有手指 ,由于 % 是一个接受状态 ,所 以 iVi 接受这个字符串 。
Ni 对输入 010 做 些 什 么? 开始时把一个手指放在 % 上 。读 0 之后仍然只在 % 上有一
个手指 ,而在读 1 之 后 在 % 、% 和 % 上有手指 (不 要 忘 记 箭 头 )。在读第三个符号 0 之
后 ,移开 % 上 的 手 指 ,把 % 上的手指移到 % 上 ,保留 % 上 的 手 指 不 动 。 此 时 已 经 在 输
人 串 的 末 端 ,由 于 在 接 受 状 态 上 没 有 手 指 ,所 以 以1 拒 绝 这 个 输 入 。
继续以这种方式试验 ,可以发现 iVi 接受所有含 101 或 11 作为子串的字符串。
非 确 定 型 有 穷 自 动 机 在 若 干 方 面 都 是 有 用 的 。 正 如 我 们 将 要 证 明 的 那 样 ,每 一 台
NFA 都可以转换成一台等价的 DFA ,而构造 NFA 有时比直接构造 DFA 容易 。一 台 NFA
可能比与它等价的 DFA 小 很 多 ,或者它的功能更易于理解 。 由 于 有 穷 自 动 机 特 别 容 易 理
解 ,有 穷 自 动 机 的 非 确 定 性 也 是 对 能 力 更 强 的 计 算 模 型 的 非 确 定 性 的 一 个 很 好 的 引 入 。 现
在来看几个 NFA 的例子 。

iSTO 设 A 是 { 0 ,1 } 上 倒 数 第 三 个 符 号 为 1 的 所 有 字 符 串 组 成 的 语 言 ( 例如 ,
000100 在 A 中 ,而 0011 不 在 A 中)。图 1 - 17 所 示 的 4 - 状态 NFA iV2 识别 A 。


0,

图 1- 1 7 识 别 A 的 NFA N 2

观察这台 NFA 的计算的一个好方法是让它停在起始状态 % ,直 到 它 “猜想 ” 它 正 好


位于倒数第三的位置上 。 这 时 ,如 果 输 人 符 号
是 1 ,那么它移到分支状态 % ,并 且 使 用 % 和
% “验证” 它的猜想是否正确 。
正 如 前 面 讲 过 的 ,每 一 台 NFA 都 可 以 转
换成一台等价的 DFA ,不 过 有 时 那 台 DFA 的
状 态 可 能 会 多 很 多 。关 于 语 言 A 的 最 小 DFA
含有 8 个状态 。而 且 可 能 发 现 ,通过考察图 1 -
18 中的 DFA ,更容易理解 NFA 的功能。 图 1- 1 8 一台识别 A 的 DFA
32 第一部分自动机与语言

-
假设在图 1 17 的机器 iV2 中 ,在从 q2 到 % 和从 % 到 % 的箭头上的标号中添加 e 。
亦即 ,这两个箭头的标号是 0 、 1 、 e ,而不仅仅是 0 、 1。 在做了这样的改动之后 , iV2 能

_
-
识别什么样的语言呢?试试修改图 1 18 中的 DFA ,使它也能识别这个语言。 ■

-
考虑图 1 19 中的 NFA iV3 , 它的输入字母表 { 0 } 由一个符号组成 。只含一
个符号的字母表称为一元字母表 ( unary alphabet)。
这台机器说明了有 e 箭头的方便之处 。它接受所
有形如 W 的字符串,其中々是 2 或 3 的倍数 ( 注意上
标表示重复 ,不是数值的指数 )。例如 ,N3 接受字符
00 ,000 ,0000 或 000000 ,而不接受 0 和 00000。
串 e,
考虑该机器的运行方式 : 开始时猜想是要验证 2
的倍数还是 3 的倍数 ,从而分支到上面的循环或下面
的循环 ,然后验证猜想是否正确 。当然 ,可以用一台
没有 e 箭头的机器 ,甚至是一台完全没有任何非确定
性的机器代替这台机器 。 但是 ,对于该语言这台机器
是最容易理解的 。

-
图 1 2 0 给 出 了 NFA 的另一个例子 。
运行这台机器 ,将会看到它接受字符串 e ,a , baba
和 baa ,而不接受字符串 b,bb 和 babba。 在后面我
们会用这台机器阐明把 NFA 转换成 DFA 的过程 。 麵

1.2. 1 非确定型有穷自动机的形式化定义
图 1 - 20 NFA N 4
非确定型有穷自动机的形式化定义和确定型有穷
自动机的形式化定义类似 ,它们都有状态集 、 输人字母表 、转移函数 、 起始状态以及接受状
态集 。然而 ,它们在本质上是不同的—转移函数的类型不同 。在 DFA 中 ,转移函数取一
个状态和一个输入符号 ,产生下一个状态。在 NFA 中,转移函数取一个状态和一个输入符
号或者空串 ,产生可能的下一个状态的集合。为了书写这个形式化定义 ,需要引入某个额外
的符号 ,对任意的集合 Q,记 P( Q) 为 Q 的所有子集组成的集合 。这里称 P( Q) 是 Q 的幂
集 ( power set )。对任意的字母表 2, 把 2 U { e }记作 S 。现在可以容易地写出 NFA 中这种类
型的转移函数的形式化定义 ,它是 & QX 奚 - P( Q)。下面给出 NFA 的形式化定义。

1.Q 是 有 穷 的 状 态 集 ; ^
非 确 定 型 有 穷 自 动 机 是 一 个 5 元 组 (Q ,
H % ,F ),其 中


2 . 2 是 有 穷 的 字 母 表;
3.5: QX 2£ P( Q) 是 转 移 函 数 ;
4.g0 G Q 是 起 始 状 态 ;
5.FGQ 是 接 受 状 态 集 。

HH1I 回想一下 NFA N ] :


0,1
第1 章 正 则 语 言 33

N l 的形式化描述是 ( Q ,2 ,5 ,9 l ,F), 其中
.
1 Q ,
{ q1%,
%},
Q2

1 },
2.2 ={ 0 ,
3.d 由下表给出 :

o
9i i <7 i } 92 ) 0
?2 0 W3 }
93 0 U4 } 0
94 } { 94 } 0

4.qx 是起始状态 ,
5 . F = { g4 } 0

2 ,5,
NFA 计算的形式化定义也和 DFA 计算的形式化定义类似 。设 JV =( Q , %,F) 是
一台 NFA , 是字母表 2 上的一个字符串。如果能把 w 写成 w = …知 ,这里每一个
•••,
M 是I 的一个成员 ,并且存在 Q 中的状态序列 ) , , 广m 满足下述 3 个条件 :

r0 = q0
2 . r,- 4- 1 G 5 ( rf- 9 3;

.
+ 1 ) ,i = 0 ,1 , ••,m

_^ ^
3. rm GF
则称 iV 接 受 w o
条件 1 说机器从起始状态开始 。条件 2 说状态 n+ 1 是当 iV 在 状 态 读 到 3/ f + i 时允许
的下一个状态 。注意到 5( ,3;
,+ 1 ) 是允许的下一个状态的集合 ,所以是这个集合的

1.2. 2 NFA 与 DFA 的等价性


^
一个成员 。最后 ,条件 3 说如果最后的状态是一个接受状态 ,则机器接受它的输入 。

确定型和非确定型有穷自动机识别相同的语言类 。这个等价性既岀人意料 、 又是有用


的 。说它岀人意料是因为 NFA 好像比 DFA 的能力强 ,因此猜想 NFA 能够识别更多的语
言 。说它是有用的是因为对于给定的语言 ,描述识别这个语言的 NFA 有时比描述识别这
个语言的 DFA 要容易些 。
如果两台机器识别同样的语言 ,则称它们是等价的 。
fea^iiiiuk 每 台 非 确 定 型 有 穷 自 动 机 都 等 价 于 某 一 台 确 定 型 有 穷 自 动 机。
证明思路设一个语言被一台 NFA 识别 ,那么必须证明还存在一台 DFA 也识别这个
语言。基本想法是把 NFA 转换成模拟它的 DFA。
回想设计有穷自动机的 “读者即自动机” 策略 。 如果设计者是一台 DFA ,会怎样模
拟这台 NFA 呢? 在处理输入串的过程中 ,需要记住什么? 在 NFA 的几个例子中 ,在输
入的给定点把手指放在每一个可能处在活动的状态上 ,用这种方式记住各个计算分支 。
按照 NFA 的运行方式移动 、 增加和移开手指 。需要记住的全部信息是放着手指的状态
的集合 。
设々是 NFA 的状态数 ,则它有 V 个状态子集 。 每一个子集对应模拟这台 NFA 的
DFA 必须记住的一种可能性 ,所以这台 DFA 将会有 V 个状态 。还需要给出这台 DFA 的
起始状态和接受状态以及它的转移函数 。引入一些形式化记号会使讨论变得容易些 。
34 第一部分自动机与语言

H(?Q ,
证明设 iV =( Q, F) 是识别语言 A 的 NFA ,要构造一台 DFAM 识别 A 。在
给出完整的构造之前 ,先考虑比较容易的情况 ,假设 N 没有 e 箭头 ,以后再把 e 箭头考虑
进来 。
,)
构造一台识别语言 A 的 D F A M = ( Q\ S ,S\ q0 ,F
/
o

1. Q' = P( Q) 0

M 的每一个状态是 iV 的状态的一个集合 。V ( Q ) 是 Q 的所有子集组成的集合 。


2. 对于 令 y( R ,
a )= { g 6 Ql 存在 尺,
使得 如果 R 是

M 的一个状态 ,则它是 N 的状态的一个集合。当 M 在状态 R 读符号 a 时 ,S(R , c i ) 给出

a 把 R 中的状态带到什么地方 。由于每一个状态可以转移到一个状态集合 ,所以取所有这


些集合的并 。 这个表达式可以用另一种方式写成〆( 尺 ,
a )= U 5( r ,a ) , 记 号 U 5( r ,a)
reR

含义是 :对 i? 中的所有元素 r 集合 5( r,
a ) 的并集 。

3. 9 一 { % }
0

M 开始时所在的状态对应于只含 IV 的起始状态的集合 。
4. 尺包含 iV 的一个接受状态 }
如果此时在 iV 的可能状态中有一个接受状态 ,那么机器 M 接受 。
现在考虑 e 箭头 ,为此再引人一位记号 。对于 M 的任意一个状态 R ,定义 £ ( /? ) 为从 :
R 的成员出发只沿着 e 箭头可以达到的状态集合 ,包括 i? 本身的所有成员在内 。形式地 ,
对于尺 ,令

£ ( 尺)= { g|从 R 出 发 沿 着 0 个 或 多 个 箭 头 可 以 到 达 g }
然后修改 M 的转移函数 ,使得在每一步之后 ,在沿着 e 箭头可以达到的所有状态上也放上
: a )) 代替 5( r,
手指 。用 £ (5( r ,
y(J? ,
a ) 能产生这个效果 。于是
^
a )={ g e Q
| 存在 尺,使得 q e E(8( r 9 a ))}
此外还需要修改 M 的起始状态 ,使得开始时把手指移到从 iV 的起始状态出发沿着 e
箭头可以到达的所有状态上 。将〆o 改成 :
({ % }) 能产生这个效果 。 这样就完成了模拟
NFA iV 的 DFA M 的构造 。
M 的构造显然是正确的 。在计算的每一步 ,M 进入的状态明显地对应于 iV 此时可能
处于的状态子集 。 证毕 。 ■

定理 1.19 说明每一台 NFA 都能够被转换成一台与其等价的 DFA。 于是 ,非确定型


有穷自动机给出另一种刻画正则语言的方式 。这一事实陈述为定理 1.19 的一个推论 。
一 个 语 言 是 正 则 的 ,当 且 仅 当 有 一 台 非 确 定 型 有 穷 自 动 机 识 别 它 。
“当且仅当” 的一个方向是说 ,如果有一台 NFA 能识别这个语言 ,则它是正则的 。定
理 1.19 表明 ,任何一台 NFA 都能够被转换成一台等价的 DFA,因此如果有一台 NFA 识
别这个语言 ,那么也有一台 DFA 识别它 ,从而这个语言是正则的 。另一个方向是说 ,仅
当有一台 NFA 识别这个语言时该语言才是正则的 。即 ,如果一个语言是正则的 ,则一定
有一台 NFA 识别它 ,这显然成立 ,因为每一个正则语言都有一台识别它的 DFA ,而任一
台 DFA 也是一台 NFA。
t观Ugh 用例 1.16 中的机器 iV4 来说明定理 1.19 给出的把 NFA 转换成 DFA 的过
2 ,3 }。 于是 ,在形式化描述 iV4 =( Q,
程 。为了描述清楚 ,把 iV4 的状态重新记作 { 1 , { a,
b },
5,l, -
{ l }) 中 ,状态集 Q 为 { 1 ,2 ,3 } , 如图 1 21 所示 。
第J 章 正 则 语 言 3 5

要构造与 iV4 等价的 DFAD , 首先确定 D 的状态 。] 有 3 个状态 < 1 ,2 ,3 } , 所 以 D


有 8 个状态 ,每一个状态对应于 iV 4 的一个状态子集 。把 D 的每一个状
态记作它所对应的 iV 4 的 状 态 子 集 。于是 ,D 的 状 态 集 为
{0,
{ 1 }, { 3 },
{ 2 }, {1, { 1 ,3 },
2 }, { 2 ,3 }, 2 ,3 }}
{1,
其次 ,确定 D 的 起 始 状 态 和 接 受 状 态 。起 始 状 态 是 E({ 1 }),它 等
^ .

_
a
b,

M 3
于从 1 出发沿着 e 箭头能够到达的所有状态加上 1 本身 。 有 一 个 e 箭 头 a,
b
从 1 到 3 , 故 E({ 1 })= { 1 ,
3 }。新 的 接 受 状 态 集 是 所 有 包 含 iV4 接 受 状
图 1- 21 NFA N4
态 的 状 态 子 集 ,即 {{ 1 } ,
{ 1, { 1,
2 }, 3 }, 2 ,3 }}。
{ 1,
最 后 ,确 定 D 的 转 移 函 数 。 D 的任一个状态遇到输入 a 时 转 到 一 个 地 方 ,遇 到 输 人 b
时转到一个地方 。用 几 个 例 子 说 明 安 置 D 的转移箭头的过程 。
由 于 在 iV4 中 ,状态 2 遇 到 输 入 a 时转到 2 和 3 , 并且从 2 或 3 不能沿着 箭头走得更
远 ,所以在 D 中 ,状态 { 2 } 遇到输人 a 转 到 { 2 ,3 }。 在 iV4 中 ,状 态 2 遇 到 输 人 b 时 只
能转到状态 3 , 并且不能从 3 沿 着 e 箭头走得更远 ,所 以 在 D 中 ,状态 { 2 } 遇到输入 b 时
^
转到状态 < 3} 0

由于在 iV4 中没有 a 箭头从状态 { 1 } 射出 ,所以在 D 中 状 态 { 1 } 遇到输入 a 走到 0 。


状 态 { 1 } 遇到输入 b 转 到 { 2 }。注意 ,定 理 1.19 描 述 了 跟 随 每 一 个 输 人 符 号 后 的 e 箭 头
的 过 程 。另一种基于在每一个输入符号之前跟随 e 箭 头 的 过 程 也 行 之 有 效 ,但 没 有 在 该 例
中演示 。
由 于 在 N4 中 状 态 3 遇到输人 a 时 转 到 1 ,并且 1 又沿着 e 箭头回到 3 , 所 以 状 态 { 3 }
遇到输入 a 时转到 { 1 ,3 } , 遇 到 输 人 b 时 转 到 0 。
因为 1 没 有 用 a 箭头指向任何状态 ,2 用 a 箭头指向 2 和 3 , 并 且 2 和 3 都 没 有 用 e 箭
头指向任何地方 ,所以状态 { 1 ,2 } 遇 到 输 入 a 时转到 { 2 ,3 }。状 态 { 1 ,2 } 遇到输入 b 时
转到 < 2 ,3 } 0 继 续 按 照 这 个 方 式 进 行 ,可以得到 D 的状态图 ,如 图 1 22 所示 。 -
a, b b {2}

{3}

图 1- 2 2 与 NFA N 4 等 价 的 DFA D

通过观察到没有箭头射入的状态 { 1 } 和 2 },可 以 对 这 台 机 器 进 行 简 化 ,删 掉 这
< 1,
两 个 状 态 不 会 影 响 机 器 的 性 能 。这样做可以得到图 1 23 。
-
a,
b

{3} 0

{21 K (2,3)

-
图 1 23 删掉不需要的状态后得到的 DFAD
36 第一部分自动机与语言

1.2 . 3 在正则运算下的封闭性
现 在 回 到 在 1 . 1 节 中 开 始 的 正 则 语 言 类 在 正 则 运 算 下 的 封 闭 性 ,目 标 是 证 明 正 则 语 言
在 经 过 并 、 连 接 以 及 星 号 运 算 后 仍 是 正 则 语 言。当 时 由 于 处 理 连 接 运 算 太 复 杂 ,放 弃 了 证
明 的 打 算 。使 用 非 确 定 性 能 使 证 明 容 易 许 多。
首 先 ,再 次 考 虑 在 并 运 算 下 的 封 闭 性 。前 面 在 证 明 并 运 算 下 的 封 闭 性 时 ,使 用 笛 卡
尔 积 构 造 的 同 时 ,非 确 定 性 地 模 拟 了 两 台 机 器 。 现 在 用 一 个 新 的 证 明 来 说 明 非 确 定 性 技
术 。重 新 看 看 原 来 在 1 . 1.5 中 的 证 明 可 能 是 值 得 的 ,这 能 够 让 发 现 新 的 证 明 容 易 、 直 观
许 多。
fcbtehtlfcfea 正则语言类在并运算下封闭。
AiUA 2 是 正 则 的 。想 法 是 对 Ai * A 2
证 明 思 路 有 两 个 正 则 语 言 Ai 和 A 2 , 要 证 明
取两台 NFA M 和 N2 ,并 把 它 们 合 并 成 一 台 新 的 NFA N。

^
当 iVi 或 ] 接 受 输 入 时 ,机 器 iV 应 该 接 受 这 个 输 入 。新 机 器 有 新 的 起 始 状 态 ,它 用
e 箭 头 分 支 到 原 机 器 的 起 始 状 态 。新 机 器 用 这 种 方 式 非 确 定 性 地 猜 想 两 台 原 有 机 器 中 哪 一
台 接 受 这 个 输 人 。如 果 它 们 两 台 中 有 一 台 接 受 ,那 么 N 也 接 受 。
-
图 1 24 给岀了这个构造 。在图的左部 ,大圆圈表 N

oo
示机器 iVi 和 iV2 的起始状态以及接受状态 ,小圆圈表 A
示其余的状态 。 在图的右部 ,说明了如何通过增加转
移箭头把 iVi 和 iV2 合并成 iV。
oo
o


o
证 明 设 识 别 AH 并且
,
iV2 =( Q2 ,2 52 ,
g2 ,F2 ) 识 别 A 2 , 构造识别八! 々〗 乂
的 N =( Q ,
2,d,
qQ ,
F) 0

1. Q H U U Q U C k o
OD 0

^
iV 的 状 态 是 iVi 和 iv2 的 所 有 状 态 ,再 加 上 一 个 新
的 起 始 状 态 %。
图 1- 24 识别 AiUAz 的
2. 状 态 % 是 iV 的起始状态 。
N F A N 的构造
3. 接 受 状 态

^
iV 的接受状态是 Ni 和 ] 的所有接受状态 。 因此 ,只要 iVi 接受或 iV2 接 受 ,N 就
接受。
4. 定 义 5 如 下 :对 每 一 个 和 每 一 个
51 ( q a ) q : Q i
9
^
8 ( q ,a ) = <
{% ,
^
52 ( q ^ a ) q Qz
% } 尸 且 a= e
10 g= 且 a 关e ■

现 在 证 明 正 则 语 言 类 在 连 接 运 算 下 的 封 闭 性 。回 想 早 些 时 候 在 没 有 非 确 定 性 的 情 况
下 ,要 完 成 这 个 证 明 是 有 一 定 困 难 的。
正则语言类在连接运算下封闭。
证 明 思 路 有 两 个 正 则 语 言 八!和 A2 , 要 证 明 A °A 2 是 正 则 的 。想 法 是 取 两 台 NFA
和 iV2 分 别 识 别 A! 和 A 2 , 像 在 证 明 并 运 算 封 闭 时 所 做 的 那 样 ,把 它 们 合 并 成 一 台 新
第1 章 正 则 语 言 37

的 NFAiV ,但是这一次要用不同的方式 ,如图 1 25 所示 。 -


取 N 的起始状态为 iVi 的起始状态 。 iVi 的
每一个接受状态增加一个 箭头 ,使得只要 iVi ◎ "- 2


在一个接受状态 ,就允许 iv 非确定性地分支进入 ->o ° ◎ KD , o
° ◎/
I
O O «

N 2 o 这意味着它已经找到输入的前一段 ,这一段
©
/

J v
o

N
构成 Ai 中的一个字符串 。 iV 的接受状态就是 iV 2
的接受状态 。因此当输入可以被分成两段并且第 ◎
- o ° g-i ©J

^
o o
一段被 iVi 接受 ,第二段被
接受时 ,N 接受 。 ] o
可以认为 N 非确定性地猜想在什么地方把输入串
分开 。 图 1 25- 识 别 Ai 。糸 的 iV 的 构 造

证 明 设 而, 识 别 Ah 并且 iV2 =( Q2 ,2,52 ,
( F2 ) 识 别 A2 , 构
?2 ,
造识别 A! 。A 2 的 / =( 0 ,2 ,5,

^
%,巧 )。
1. Q = Q i U Q2 o
iv 的状态是 iVi 和 iV2 的所有状态 。
2. N 的起始状态是 Ni 的起始状态 % 。
3. N 的接受状态集是 iV 2 的接受状态集 F2 。
4. 定 义 5 如 下 :对 每 一 个 和 每 一 个 e ,
( g,
a) 9 6 Qi 且 g 茫 Fi
汐1 ( q , g 6 Fi K a e
S( q a )= <
a)
^
^ S i ( q , a ) U i g2 }
. 82 ( q ,
a)
q
^ Fi 且 a =e

^kuWM
l §

证明思路有一个正则语言
正则语言类在星号运算下封闭。
Ah 要证明

A 也是正则的 。 取一台识别 A 的 NFAW ,
N

-
如图 1 26 所示的那样修改它 ,使其识别 A 。 : o o
@
©
只要能把输人分成若干段 ,并且 M 接受每一 o

段 ,则修改后的 NFA iV 就接受这个输入 。


可以这样构造在上添加从每一个接 图 1 26 - 识别 Af 的 N 的构造

受状态返回起始状态的 e 箭头 。这样 ,当进行到 iVi 能接受的一段结束时 ,机器 iV 可以选


择跳回起始状态试图读 iVi 能接受的下一段 。此外还必须修改 iV 使其接受 e ,e 永远是 Af
的成员 。一个 (不太好的) 想法是直接把起始状态加到接受状态集中 。 这个方法确实把 e
加进了被识别的语言中 ,但是它也可能加进一些其他不想要的字符串。练习 1.15 要求给
出一个说明这个想法不对的例子 。解决这个问题的办法是添加一个新的起始状态 ,同时也
是一个接受状态 ,并且有一个指向原起始状态的 e 箭头 。 这个解决方案能达到期望的效
果 : 在识别的语言中加入 e 而不加入其他任何字符串。
2 ,5,

^
证明设 % , ) 识别 An 构造识别 Af 的 iV =( Q,
, %,F)。
1.Q = { g0 } UQi 0

iv 的状态是 iVi 的所有状态加一个新的起始状态 % <>

2.g0 是新的起始状态 。
38 第一部分自动机与语言

3. F = { q0 ) 0

接受状态是原有接受状态加新的起始状态 。
4. 定义 5 如 下 :对 每 一 个 和 每 一 个
d\ ( q ^ a ) Q\ M
且a
.

^
q : F\
d\ ( q ^ a )
j 5i ( 9 ,
a ) U { g1 }
Fi
^ e

^ ? ,a ) =
((
}
q
^ gF \ SL a = e
且 a= e
尸 0

0 9= 9 且 。
1.3 正则表达式
在算术中可以用运算符 + 和 X 来构造表达式 ,如 (5 +3) X 4 0 类似地 ,可 以 用 正 则 运
算符构造描述语言的表达式 ,称 为 正 则 表 达 式 。例如 :
( 0 U 1 )0 *
上面那个算术表达式的值是 32 , 而正则表达式的值是一个语言。在这个例子中 ,正则表达
式的值是由一个 0 或一个 1 后面跟着任意个 0 的所有字符串组成的语言。仔 细 地 分 析 这 个
表达式的各部分 ,可以得到这个结果 。首先 ,符号 0 和 1 是集合 { 0 } 和 { 1 } 的 缩 写 ,因
此 ( 0 U 1 ) 就 是 ({ 0 } U < 1 })。这部分的值是语言 { 0 ,
1 }。第 2 部 分 0 * 就 是 { 0 } * ,它的
值是由所有包含任意个 0 的字符串组成的语言 。其 次 ,和代数中的符号 X

样 ,在 正 则 表
达式中常常省略连接符 。因 此 ,(o u i )o 实 际 上 是 ( o u i h o 的 缩 写 。连接运算把来
* *

自这两部分的字符串接在一起得到整个表达式的值 。
正则表达式在计算机科学各种应用中有着重要的作用。 在 涉 及 文 本 的 应 用 中 ,用 户 可
能要搜索满足某种模式的字符串。正则表达式提供了描述这种模式的有力方法 。应用程序
( 如 UNIX 中 的 awk 和 grep ) 、 现代程序设计语言 (如 Perl ) 以 及 文 本 编 辑 器 都 提 供 了 用

正则表达式描述模式的机制 。
正则表达式的另一个例子是
(0 U 1
它从语言 ( 0 U 1 ) 开始 ,并 且 运 用 运算 。这个表达式的值是由 0 和 1 的所有字符串组成
* ”
的 语 言。若 2= { 0 ,
1 },则 可 以 用 2 作为正则表达式 ( 0 U 1 ) 的 缩 写 。更 一 般 地 讲 ,设 2
是任意的字母表 ,正则表达式 2 描 述 该 字 母 表 上 所 有 长 度 为 1 的 字 符 串 组 成 的 语 言 ,而
2 * 描述该字母表上的所有字符串组成的语言 。类似地 ,2 * 1 是 包 含 着 所 有 以 1 结 尾 的 字
符串的语言。语言 (02 * ) :* i ) 由所有以 0 幵始或者以 1 结尾的字符串组成。
ua ■

在算术中 , x 优先于 + 的意思是 ,当要在 + 和 x 中 进 行 选 择 时 ,首 先 选 择 x 运 算 。因


此 ,在 2 + 3 X 4 中先做 3 X 4 , 再做加法 。要想先做加法 ,必须加括号 ,得 到 (2 + 3 ) X 4 。
在正则表达式中 ,先做星号运算 ,然后做连接运算 ,最后做并运算 ,除非用括号改变这种
惯常的顺序 。

1.3 . 1 正则表达式的形式化定义
称 R 是 一 个 正 则 表 达 式 ,如 果 尺 是
1. a 这 里 a 是 字 母 表 2 中 的 一 个 元 素 ;
,
第J 章 正 则 语 言 39

2. e ;
3. 0
4. ( i? i Ui?2 ), 这 里 i? i 和 i?2 是 正 则 表 达 式 ;
5. ( i? i 。i?2 ),这 里 尺1 和 尺2 是 正 则 表 达 式 ;
6. ( R { ) , 这 里 私 是 正 则 表 达 式 。
在 第 1 条 和 第 2 条 中 ,正 则 表 达 式 a 和 e 分 别 表 示 语 言 { a } 和 { e }。在 第 3 条 中 ,正
则 表 达 式 0 表 示 空 语 言 。在 第 4 、 5 、 6 条 中 ,正 则 表 达 式 分 别 表 示 语 言 尺!和 沁 做 并 运 算
或 连 接 运 算 或 者 仏 做 星 号 运 算 得 到 的 语 言。
不要混淆正则表达式 e 和 0 。表达式 e 表示只包含一个字符串 空串的语言 ,而 0
表示不包含任何字符串的语言 。
表面上看这里有用其自身定义正则表达式的危险 。要是果真如此 ,那么这是一个循环
定义 ( circular defination ),它 将 是 无 效 的 。 但 是 , 和 总 是 比 i? 小 ,因此 ,实际上
是在用较小的正则表达式定义较大的正则表达式 ,从而避免了循环 。这种类型的定义称为
归纳定义 ( inductive defination ) 0

表达式中的括号可以略去 。如果略去括号 ,计算按照下述优先顺序进行 :星号 ,连


接 ,然后并 。
为 便 于 描 述 将 记 作 R + 。换 句 话 说 ,鉴 于 表 示 由 0 个 或 多 个 R 中的串连接构
成 的 所 有 串 , 表 示 由 〗 个 或 多 个 i? 中的串连接构成的所有串 。因此 R + = 。此
外 ,将々个 R 中的串通过连接得到的串简记作
当想要明显地区分正则表达式 i? 和它所描述的语言时 ,把 i? 描述的语言写成 L( i? )。
dUKi 在下面的例子中假设字母表 2 是 < o,
i }。
1. 0 1 0
* *
恰好有一个 1 }。
2. 12 * ={ 加|加至少有一个 1 }。
3. 2 * 0012 * = { 切
| 加含有子串 001 }。
4. 1 * ( 01 + ) * = { w \ w 中的每一个 0 后面至少跟有一个 1 }。
5. ( XS 是长度为偶数的字符串 }e 。
” ={ 洲

^
6. (222) * ={ 加|加的长度为 3 的整数倍 }。
7. 0 l U l 0 ={ 01 ,10 } o
8. 02 * 0 U 12 *lU 0 Ul ={ w k 以相同的符号开始和结束 }。
9. ( OUe )l = 01 U 。

* *

表达式 OUe 表示语言 < 0 ,e > , 因 此 连 接 运 算 把 0 或 e 加在 1 中每一个字符串的前面 。 *

10. ( 0 Ue )( lUe )= { e ,
0,l,
01 } o

11. 1 0 = 0 。
*

把空集连接到任何集合上得到空集 。
12. 0 * = { e } 0

星号运算把该语言中的任意个字符串连接在一起 ,得到运算结果中的一个字符串。 如
果该语言是空集 ,星号运算能把 0 个字符串连接在一起 ,得到唯一的空串 。 嫌

© 字 符 串 的 长 度 是 指 它 含 有 的 符 号 的 个 数。
40 第一部分自动机与语言

若设尺是任意的正则表达式 ,可以得到下述恒等式 。它们能很好地检查读者是否理解


了正则表达式的定义 。
RU 0 = R
把空语言加到任一其他语言上不会改变这个语言。
R o
e= R
把空串加到任一字符串上不会改变这个字符串 。
但是 ,交换前面两个恒等式中的0 和 e 可能导致恒等式不成立 。
i? Ue 可能不等于尺 。
例如 ,如果尺 = 0 , 那 么 L(i? )={ 0 },而 LO? Ue )={ 0 ,
e} o
。0 可能不等于尺。

例如 ,如果尺 = 0 , 那 么 U i? )= { 0 },而 U 0 )= 0 。
在设计程序设计语言的编译程序中 ,正则表达式是个很有用的工具 。 程序设计语言中

能包括小数部分和 ( 或) 正负号的数值常量可以描述成下述语言的一个成员
( + -
^
的基本对象称为单字 ( token ),如变量名和常量 ,它们可以用正则表达式描述 。例如 ,可

U Ue)( D+ UD + .D * UD * • D+ )
其中 D = { 0 ,
1,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 } 是十进制数字字母表 。几个生成的字符串例子如 :72 ,
3.14159 , 7. 和一 .01 。
+
一旦程序设计语言中单字的语法用正则表达式描述出来 ,自动系统便能够生成词法分
析器 ( lexical analyzer ),它是编译程序的一部分 ,用来在开始阶段处理输人程序 。

1.3 . 2 与有穷自动机的等价性
就描述能力而言正则表达式和有穷自动机是等价的 。 这个事实是相当出乎意料的 ,因为
表面上看有穷自动机和正则表达式是很不相同的。然而 ,任何正则表达式都能够转换成能识
别它所描述语言的有穷自动机 ,反之亦然 。回忆一下正则语言是有穷自动机识别的语言。
一 个 语 言 是 正 则 的 ,当 且 仅 当 可 以 用 正 则 表 达 式 描 述 它 。
这个定理有两个方向 。 把每个方向叙述成一条单独的引理并加以证明 。
如 果 一 个 语 言 可 以 用 正 则 表 达 式 描 述 ,那 么 它 是 正 则 的 。
证明思路假设正则表达式 R 描述某语言 A 。 要说明怎样把 R 转换成一台识别 A 的
NFA 。根据推论 1.20 , 如果一台 NFA 识别 A ,则 A 是正则的 。
证明把 i? 转换成一台 NFA iV 。考虑正则表达式定义中的 6 种情况 。
1. R = a ,这里 ae 2。 那么,L( R)= { a } 下述 NFA 识别 L( i? ):
9

00 -
注意到这台机器符合 NFA 的定义 ,但不符合 DFA 的定义 ,因为它的状态不是对每一
个可能的输入符号都有射出的箭头 。 当然这里也能够给出等价的 DFA ,但是 ,现在有
NFA 就可以了 ,而且它更容易描述一些 。
形式地表示 ,N =( { q l , q2 } { q2 } 其 中 5 的 定 义 如 下 :若 则
d ql ,
( a = { <?2 },
) ,
5O 6 = 0 。
)
9
^
2. R= e 那么 LCR )= { e }。下述 NFA 识别
,
第J 章 正 则 语 言 41

-Q
形式地表示 , N =({ q l },l ,S ,qlAql )), 其中对所有的 r 和 6 , d( r 9 b )= 0 o
3. R= 0 9 那么 LO? )= 0 。下 述 NFA 识别 L( i? ):

形式地表示 ,N =({ q },E,


S, :
-o
0 ),其中对所有的 r 和 6 ,5( r ,
q, 6 )= 0 。
4. R = R\ U - 2
5. R = R\ 。R 2
^
6. R= RX *

对 后 3 种情况 ,使用正则语言类在正则运算下封闭的证明中所给出的构造 。 换 句 话
说 ,由 识 别 仏 和 沁 (在 情 况 6 中 只 有 私 ) 的 NFA 构 造 出 关 于 i? 的 NFA ,从而得到需
要 的 NFA。 藝

这就结束了定理 1.28 证 明 的 第 一 部 分 ,给出当且仅当中较容易的方向 。 在 接 着 证 明


另一个方向之前 ,先 看 几 个 例 子 ,用上述过程把正则表达式转换成 NFA。
(HSEI 分若干阶段把正则表达式 UbUa ) * 转 换 成 一 台 NFA。从最小的子表达式
到大一点的子表达式逐步建立 ,直至获得关于原始表达式的 NFA ,如 图 1 - 27 所 示 。注意
这个过程一般不能给出状态最少的 NFA 。本例给岀一台有 8 个 状 态 的 NFA ,而 等 价 的 最
小 NFA 只 有 2 个 状 态 。 你能找出这台最小的 NFA 吗?

ab

abUa
>0

(ab U a)* -

图 1 - 27 根据正则表达式 (abUa ) * 构造一台 N F A

-
在 图 1 28 中 ,正则表达式 UUb) * aba 被 转 换 成 一 台 NFA。有 几 小 步 没
有在图中给出 。 》

现在回到证明定理 1.28 的 另 一 个 方 向 。
如 果 一 个 语 言 是 正 则 的 ,则 可 以 用 正 则 表 达 式 描 述 它 。
42 第一部分自动机与语言

-O ©

^
a

b - o^o
>

aUb
b
©
>

(aUb)

aba

(aUb)*aba
b

图 1- 2 8 根 据 正 则 表 达 式 (a U b ) * a b a 构造一台 N F A

证 明 思 路 需 要 证 明 :如 果 语 言 A 是 正 则 的 ,则 有 一 个 正 则 表 达 式 描 述 它 。由 于 A
是 正 则 的 ,故 它 被 一 台 DFA 接 受 。 下 面 给 出 一 个 把 DFA 转 换 成 等 价 的 正 则 表 达 式 的
过 程。
这 个 过 程 分 两 部 分 ,这 里 要 使 用 一 种 称 为 广 义 非 确 定 型 有 穷 自 动 机 的 新 型 有 穷 自 动
机 ,简 记 作 GNFA 。首 先 说 明 如 何 把 DFA 转 换 成 GNFA ,然 后 说 明 如 何 把 GNFA 转 换 成
正 则 表 达 式。
广 义 非 确 定 型 有 穷 自 动 机 就 是 非 确 定 型 有 穷 自 动 机 ,只 是 转 移 箭 头 可 以 用 任 何 正 则 表
达 式 作 标 号 ,而 不 是 只 能 用 字 母 表 的 成 员 或 e
ab* aa
作 标 号 。GNFA 读 输 入 符 号 段 ,而 不 必 像 普
通 NFA
输人符号
—, 次 只 能 读 一 个 符 号 。GNFA 读 一 段
沿 着 连 接 两 个 状 态 的 箭 头 移 动, abuba

这段输人符号正好是那个箭头上的正则表达 0 ( aa ) *
式 描 述 的 一 个 字 符 串。GNFA 是 非 确 定 性 的 ,
从而可能有好几种不同的方式处理同一个输
b b*
人 串。如 果 它 的 处 理 能 够 使 得 GNFA 在 输 人
ab
结 束 时 进 人 一 个 接 受 状 态 ,则 它 接 受 它 的 输
-
入 。图 1 2 9 给 出 了 一 个 GNFA 的 例 子。
为 方 便 起 见 ,要 求 GNFA 具 有 符 合 下 述 -
图 1 29 一台广义非确定型有穷自动机

条件的特殊形式:
• 起 始 状 态 有 射 到 其 他 每 一 个 状 态 的 箭 头 ,但 是 没 有 从 任 何 其 他 状 态 射 人 的 箭 头 。
• 有 唯 一 的 一 个 接 受 状 态 ,并 且 它 有 从 其 他 每 一 个 状 态 射 人 的 箭 头 ,但 是 没 有 射 到
第1 章 正 则 语 言 43

任 何 其 他 状 态 的 箭 头 。 此 外 ,这 个 接 受 状 态 与 起 始 状 态 不 同 。
• 除 起 始 状 态 和 接 受 状 态 外 ,每 一 个 状 态 到 自 身 和 其 他 每 一 个 状 态 都 有 一 个 箭 头 。
能 够 很 容 易 地 把 DFA 转 换 成 这 种 特 殊 形 式 的 GNFA 。 添 加 一 个 新 的 起 始 状 态 和 一 个
新 的 接 受 状 态 ,从 新 起 始 状 态 到 原 起 始 状 态 有 一 个 e 箭 头 ,从 每 一 个 原 接 受 状 态 到 新 接 受
状 态 有 一 个 e 箭 头 。如 果 一 个 箭 头 有 多 个 标 记 ( 或 者 在 两 个 状 态 之 间 有 多 个 方 向 相 同 的 箭
头),则 把 它 替 换 成 一 个 标 记 着 原 先 标 记 的 并 集 的 箭 头 。 最 后 ,在 没 有 箭 头 的 状 态 之 间 添
加 标 记 0 的 箭 头 。最 后 一 步 不 会 改 变 识 别 的 语 言 ,因 为 标 记 0 的 转 移 永 远 不 能 被 使 用。从
现 在 起 ,假 设 所 有 的 GNFA 都 是 这 种 特 殊 形 式 的 。
下 面 说 明 如 何 把 GNFA 转 换 成 正 则 表 达 式 。设 这 台 GNFA 有 6 个 状 态 。由 于 GNFA
必 须 有 一 个 起 始 状 态 和 一 个 接 受 状 态 ,并 且 这 两 个 状 态 是 不 相 同 的 ,因 此 々>2。如 果 々>
2 , 则 构 造 一 台 有 々 一 1 个 状 态 的 等 价 GNFA 。对 新 的 GNFA 重 复 这 一 步 骤 直 至 把 它 化 简
到 只 有 2 个 状 态 。 当 々= 2 时 ,这 台 GNFA 只 有 一
个 从 起 始 状 态 到 接 受 状 态 的 箭 头 。这 个 箭 头 的 标 记
3 状态
DFA
5 狀1态
GNFA - 4 状态
GNFA - -
就 是 等 价 的 正 则 表 达 式 。 例 如 ,图 1 - 3 0 中 给 出 了
把一台有 3 个状态的 DFA 转 换 成 等 价 的 正 则 表 达
式的各个阶段。
正则
表达式 -
2 状态
GNFA -
3 状态
GNFA
关 键 的 步 骤 是 当 k> 2 时 构 造 等 价 的 少 一 个 状
态 的 GNFA 。 为 此 ,挑 选 一 个 状 态 ,把 它 从 机 器 上 图 1- 3 0 把 DFA 转换成正则

删 掉 ,并 且 修 改 留 下 来 的 部 分 使 其 仍 然 识 别 相 同 的 表达式的典型阶段

语 言。可 以 挑 选 任 意 一 个 状 态 ,只 要 它 不 是 起 始 状 态 或 接 受 状 态 ,当 纟>2 时 ,一 定 存 在
这 样 的 一 个 状 态 。把 这 个 被 删 去 的 状 态 称 为 t p 。
删 去 后 ,要 修 改 每 一 个 留 下 来 的 箭 头 上 标 记 的 正 则 表 达 式 。新 标 记 中 加 进 了 失 去
的 计 算 ,从 而 弥 补 了 由 于 删 去 带 来 的 损 失 。从 状 态 % 到 状 态 %. 的 新 标 记 是 描 述 使 机 器
从 % 直接到 或 者 通 过 gnp 到 % 的 所 有 字 符 串 的 正 则 表 达 式 。图 1 3 1 说 明 了 这 个 方 法 。 -
~ %

%,
% Q ( A ) ( A ) * ( A ) U ( 尺4 )

0
>

R2
原图 修改后

-
图 1 31 构 造 等 价 的 少 一 个 状 态 的 GNFA

在 原 机 器 中 ,如 果
1. 从 % 到 {)
有一个标记为私的箭头,
2. 从 p 到 它 自 己 有 一 个 标 记 为 尺2 的 箭 头,
3 从 到 A 有一个标记为尺3 的箭头,
4. 从 A 到I 有 一 个 标 记 为 的 箭 头 ,
那 么 在 新 机 器 中 ,从 % 到 的箭头的标记为
44 第一部分自动机与语言

_
( i?i ) o?2 ) * o?3 ) u ( i?4 )
对从任一状态 i 到任一状态 ( 包 括 在 内) 的 每 一 个 箭 头 进 行 这 样 的 改 动。
新的机器仍然识别原来的语言。
证明现在来形式地实现上述想法 。 为便于证明,首先形式地定义引人的新型自动 ~

机 。除转移函数外 ,GNFA 与非确定型有穷自动机类似 。 GNFA 的转移函数的形式为
(Q — Waccept }) X ( Q 一
Wstart }) 尺
符号咒是字母表 2 上的全体正则表达式组成的集合 , 和 9a pt 分别是起始状态和接受
^ st art

状 态 。如 果 则 从 状 态 % 到 状 态 ^
的 箭 头 以 正 则 表 达 式 R 作为它的标记 。转
移函数的定义域为 (Q — kaeeept }) X ( Q - { g
}),这是因为除了 gaeeept 没有射出的箭头和
没有射人的箭头 ,每一状态到另一状态都有一个箭头连接 。
n
广 义 非 确 定 型 有 穷 自 动 机 (Q,
~ gstart accept
) 是一个 5 元 组 ,其中 :
1. Q 是有穷的状态集 。


2. 2 是输入字母表 。
3. S : -
( Q { gaccept }) X ( Q { - }) 尺 是 转 移 函 数 。

^
start

4. gstart 是 起 始 状 态 。

-
5 teeept 是 接 受 状 态 。
如果字符串 W 可写成 W = W2 參
• IVk ,这里每一个叫 62
*
,并且存在状态序列 % ,
•••,
q\ , % ,使得 :
1. q0 = q 是起始状态 。
2. qk = qaccept 是接受状态 。
3. 对每一个 f ,W i L( Ri ), 其中 i ,
% ),即 是 从 i 到 的 箭 头 上 的
表达式 。
则称这台 GNFA 接受字符串
现在回到引理 1.32 的证明。设 DFAM 识别语言 A。通过添加一个新的起始状态 、 一个
新的接受状态以及一些必要的转移箭头 ,把 M 转换成一台 GNFA G。过程 CONVERT( G )
取一台 GNFA 作为输入 ,返回一个等价的正则表达式 。该过程采用递归方式 ,即它要调
用它自己 。由于该过程只是在要处理少一个状态的 GNFA 时才调用它自己 ,故不会出现
无穷循环 。当 GNFA 只有两个状态时 ,就用非递归的方式进行处理。
CONVERT( G ):
1. 设々是 G 的状态数 。


2. 如果々= 2 , 则 G 定是由一个起始状态 、一个接受状态和连接这两个状态的箭头
组成 ,设箭头上的标记为正则表达式尺 。
返回这个表达式 R 。
3. 如果々>2 ,则任取一个状态
q accept ),其中
P
6 Q —{ gstait , _ y,
<?accept },并且令 G'为 GNFA( Q 2, 、
^ start 9


-

^
Q =Q rip }

并且对每一个 A 6 Q' { gaccept } 和 每 一 个 l - 令


s\qi , =
^ a (i ?2 ?3 ) U O? 4 )
其中
^ = 5 1,% , ( ) 尺2 ( ^
)
) ”%
grip ,i? = 5 grip ,
= 5 grip ,
(

3
1)

( ) R R\ = 8 (.q i , q j ) o
第J 章 正 则 语 言 45

4. 计算 CONVERTXG 。 且返回这个值 。
下 面 证 明 CONVERT( G ) 返回的值是正确的 。
对 任 意 的 GNFAG,CONVERT( G ) 等价于 G。
对 G 的状态数々作归纳证明 。
归 纳 基 础 :证明对于々= 2 , 断 言 为 真 。若 G 只有 2 个 状 态 ,它只可能有 1 个箭头 ,从
起始状态到接受状态 。这个箭头上标记的正则表达式描述了能使 G 到达接受状态的全部字
符 串。因而这个表达式等价于 G。
归纳步骤 :假设断言对于 6 — 1 个 状 态 为 真 ,利 用 这 个 假 设 ,证 明 对 于 々 个 状 态 断 言
为真 。 首先 ,证 明 G 和 GH只别相同的语言。 假 设 G 接 受 输 入 ;,那么在计算的一个接受
分支中 ,G 依次进人下列状态 :

^ ,9\ A,A
start ,… ,Accept
^
如果被删去的状态 p 不在这些状态中 则显然以也接受 W 。这是因为标记 & 的 箭 头
的每一个新正则表达式包含原有正则表达式作为并集的一部分 。
如 果 出 现 在 这 些 状 态 中 ,则 删 去 这 个 状 态 序 列 中 所 有 的 tp ,得 到 G'的 一 个 接 受
计算 。设状态 % 和 之间夹着若干个连续的 @ ,则它们之间的箭头上的新正则表达式描

~ ^
述在 G 中使 t 经 过 gHp 到 % 的 所 有 字 符 串 。因 此 G 接受 W 。
另一方面 ,假设以接受输入 w 。由于以中任意两个状态 t 和 %. 之间箭头上的正则表
达式描述在 G 中使1 直 接 或 经 过 到 达 的所有字符串组成的集合 ,故 G 也一定接受
w 。 于是 ,G 和以等价 。
~
归纳假设表明 ,当算法对输人以递归地调用它自己时 ,由于以有々一 1 个 状 态 ,因 此
得到一个等价于以的正则表达式 ,从而这个正则表达式也等价于 G ,得证算法是正确的 。
这就完成了断言 1.34 、引 理 1.32 和定理 1.28 的 证 明 。 職

在本例中 ,运用上面的算法把 DFA 转 换 成 正 则 表 达 式 。 从 图 1 32 U ) 中 -


-
的 2 状 态 DFA 开 始 。
-
在图 l - 3 2 ( b ) 中 ,通 过 添 加 一 个 新 的 起 始 状 态 和 一 个 新 的 接 受 状 态 ,得 到 一 台 4 状
态 的 GNFA。把 \加和 9accept 分别称为 s 和 a ,这样画起来方便些 。 为避免把图搞得乱七八
糟 ,没有画岀标记为 0 的 箭 头 ,尽 管 图 中 确 实 有 这 样 的 箭 头 。 注 意 ,在 DFA 中 状 态 2 的
环上标记 a 、 b ,在 GNFA 中对应处被替换成标记 aUb。这 样 做 是 因 为 DFA 中 的 标 记 代
表 2 个 转 移 ,一个对应 a ,另一个对应 b,而 GNFA 只 能 有 一 个 从 2 到它自身的转移 。
在图 l - 32( c) 中 ,删去状态 2 , 修 改 留 下 的 箭 头 上 的 标 记。这次只有一个标记要改变 ,
它是从 1 到 a 的标记。在图 (b) 中 它 是0 ,而在图 (c) 中 是 b ( aUb ) * 。根据过程 CON
VERT 的步骤 3 得到如下结果 :状态 % 是状态 1,状态 % 是 a ,而 & 是 2 , 故 i? i = b,R2 =
-
a Ub , 及尺4 = 0 。 因 此 ,从 1 到 a 的箭头上的新标记是 (b ) ( aUb ) * (e ) U 0 。这 个
正则表达式可简化成 b( aUb ) * 。
-
在 图 l 32( d ) 中 ,删 去 图 ( c ) 中 的 状 态 1 ,并 且 按 照 同 样 的 步 骤 进 行 。 由 于 只 剩
下 起 始 状 态 和 接 受 状 态 ,因 此 连 接 它 们 的 箭 头 上 的 标 记 就 是 等 价 于 原 DFA 的 正 则 表
达式 。 鐵

HKSi -
本 例 从 一 台 3 状 态 的 DFA 开 始 ,转换成等价的正则表达式的步骤如
-
图 1 33 所 示 。 黴
46 第一部分自动机与语言

b b a*b(aub)*

a,
b aub
2

⑻ (b) ⑹ (d)

图 1- 3 2 把 一 台 2 - 状 态 的 DFA 转换成等价的正则表达式

aaUb
a(aaU b)*
2

s ab, baUa a(aaUb)*abUb (baUa) (aaUb)* U e


b 3
3
(ba U a) (aa U b)*abUbb
bb
(c ) (d )

-
" 0
(a(aa U b)*ab U b)(( baU a )(aa U b)*abU bb)*((baU a)(aaUb)* Ue) U a(aaUb)*
(e )

图 1- 3 3 -
把 一 台 3 状 态 的 DFA 转换成等价的正则表达式

1.4 非正则语言
要了解有穷自动机的能力 ,必须同时了解它们的局限性 。 这一节将讲述如何证明某些
语言不可能用有穷自动机识别 。
|n>0 }。 如果想找一台识别 B 的 DFA ,会发现这台机器看起来需要
设语言 B = { 0”l”
记住至此它在输入中读到了多少个 0 。由于 0 的个数没有限制 ,因此机器将不得不记住无
穷多个可能 。但是 ,用有穷个状态不可能做到这一点 。
下面给出一种方法 ,用来证明像 B 这样的语言不是正则的 。由于 0 的个数没有限制 ,
上面给出的论证不是已经证明了 B 的非正则性了吗? 非也。这些看起来需要无穷存储的语
言并不意味着一定需要无穷的存储 。语言 B 确实是非正则的 ,但是另外一些语言看起来也
需要无穷多个可能 ,而实际上却是正则的 。例如 ,考虑字母表 2={ 0 ,
1 } 上的两个语言 :
$J t 正 则 语 言 47

C = { w|w 中 0 和 1 的 个 数 相 等 },
D ={ w|w 中 0 1 和 1 0 作 为 子 串 出 现 的 次 数 相 同 }
初 看 一 下 ,识 别 这 两 个 语 言 的 机 器 都 需 要 计 数 ,因 而 好 像 都 不 是 正 则 的 。 正 如 所 预 料
的 那 样 C 不 是 正 则 的 ,但 令 人 吃 惊 的 是 ,D 是 正 则 的 © ! 可 见 直 觉 有 时 可 能 会 把 我 们 带 入
歧 途 。 这 就 是 为 什 么 想 当 然 的 事 情 还 需 要 数 学 证 明 。本 节 将 说 明 如 何 证 明 某 些 语 言 不 是 正
则 的。

关于正则语言的泵引理
证 明 非 正 则 性 的 技 术 源 于 一 个 关 于 正 则 语 言 的 定 理 ,通 常 把 它 称 为 泵 引 理 ( pumping
lemma )。 该 定 理 指 出 所 有 的 正 则 语 言 都 有 一 种 特 殊 的 性 质。如 果 能 够 证 明 一 个 语 言 没 有
这 种 性 质 ,则 可 以 保 证 它 不 是 正 则 的。这 条 性 质 是 :语 言 中 的 所 有 字 符 串 只 要 它 的 长 度 不 小
于某个特定的值 泵 长 度 ( pumping length ),就 可 以 被 “抽 取”。 它 的 意 思 是 指 每 一 个 这
样 的 字 符 串 都 包 括 一 段 子 串 ,把 这 段 子 串 重 复 任 意 次 ,得 到 的 字 符 串 仍 在 这 个 语 言 中 。
( 泵 引 理 ) 若 A 是 一 个 正 则 语 言 ,则 存 在 一 个 数 p ( 泵 长 度) 使 得 ,如 果 s
是 A 中 任 一 长 度 不 小 于 的 字 符 串 ,那 么 s 可 以 被 分 成 3 段 , 满 足 下 述 条 件:
1. 对 每 一 个 xylz G A
2. b l >0
3.
回忆一下这里用的记号, M 表 示 字 符 串 s 的 长 度 ,y 是 ;个 连 接 在 一 起 ,/ 等

当 s 被 划 分 成: 时 ,: ^
r 和 z 可 以 是 e ,但 是 条 件 2 说 可 以 看 到 如 果 没 有 条 件
2 , 定 理 显 然 成 立 ,但 也 就 没 有 什 么 意 思 了。条 件 3 说:r 和 3/ 两 段 在 一 起 的 长 度 不 超 过 户 。
这 是 一 个 额 外 的 技 术 条 件 ,偶 尔 会 发 现 它 在 证 明 语 言 的 非 正 则 性 时 是 有 用 的 。关 于 条 件 3
的 应 用 见 例 1 . 3 9。
2 ,5,
证 明 思 路 设 M =( Q , %,F ) 是 识 别 A 的 DFA。令 泵 长 度 户 等 于 M 的 状 态 数 。
要 证 明 A 中 任 意 长 度 不 小 于 /> 的 字 符 串 5 可 以 划 分 成 3 段 且 满 足 定 理 中 的 3 个 条
件 。如 果 在 A 中 没 有 长 度 不 小 于 p 的 字 符 串 怎 么 办? 这 时 工 作 就 更 容 易 了 ,因 为 定 理 显
然 成 立 :如 果 没 有 这 样 的 字 符 串 ,则 显 然 对 所 有 这 样 的 字 符 串 ,3 个 条 件 都 成 立 。
若 sGA 的 长 度 不 小 于 /> ,考 虑 M 对 输 入 s 的 计 算 中 经 过 的 状 态 序 列 。它 从 起 始 状 态
开 始 ,然 后 到 % ,到 七 ,再 到 %。 一直到 s 结束进入状态 q u o 由于 s 属于 A ,
M 接 受 S ,因 此 %3 是 一 个 接 受 状 态 。
若 的 长 度 为《,则 状 态 序 列 % , g3 , 2 ,
%, 。
… , 的 长 度 为 W + l 。由 于 W 不 小 于
^
<?

沁. 故〃+ 1 大 于 M 的 状 态 数 P 。 因 此 , 在 这 个 序 列 中 一 定 有 重 复 岀 现 的 状 态 ,这 个 结
论 是 鵠 巢 原 理 ( pigeonhole principle ) 的 一 个 例 子 。 这 个 奇 特 的 名 字 源 于 下 述 很 明 显 的
事 实 :如 果 要 把 只 鸽 子 放 进 鸽 巢 , 而 鸽 巢 数 小 于 /> ,则 一 定 有 些 鸽 巢 里 将 不 止 有 1
只鸽子。
-
图 1 3 4 给 出 字 符 串 s 和 M 在 处 理 s 时 经 过 的 状 态 序 列 。状 态 % 重 复 出 现 。

见问题 1.53 。
48 第一部分自动机与语言

4 52 53 54 55 56
个 t 个 个 个 t
®
^ …^^ ^

图 1- 3 4 说明当 读 时 状 态 %重 复 的 例 子


现 在 把 5 划分成三段 X ,V 和 Z 。X 是 S 在 g 9 前 面 的 部 分 ,y 是 两 个 之 间 的 部 分 ,2:
是 S 的剩余部分 ,即第二个 % 以 后 的 部 分 。 因 此 ,:
T 把M

从 状 态1 带 到 g9 , y 把

^
从 %带回到 % ,Z 把 M 从 %带
到接受状态 913 。如图 1 35 所 示 。 -
现在来看看为什么这样划分 s 能满足规定的 3 个条 r、
、 :W 屬
件 。 假 设 对 输 入 运 行 M。已 知:r 把 M 从1 带 到 % , ,

然后第一个 把 它 从 % 带 回 到 % ,第 二 个 3 也 同 样 把 它

^
从 % 带回到 % ,接 着 2:把 它 带 到 <? 13 。由 于 %3 是 一 个 接
受状态 ,故 M 接 受 输 入 X3 0 。类 似 地 ,对 于 任 意 />0 ,

^
它将接受工y z 。当纟= 0 时 ,x y z = x z , 根据类似的理由
^ 图 1- 3 5
z 如何影响 M 的例子
r ,:
说 明 字 符 串: y 和

它也被 M 接受 。这就证实了条件 1。
由于 是 S 在状态 %出现的两个不同地点之间的部分 ,故可以看到 b l >o 。这 就 验 证
了条件 2。

/>
^
为了使条件 3 成立 ,确保 % 是序列中第一个重复的状态 。根据鸽巢原理 ,在序列的前
+ 1 个状态中必定有重复。因 此 ,\ ^ y \ < pQ
证 明 设 M= ( Q , w,
2 , 5, F) 是一台识别 A 的 DFA ,户是 M 的 状 态 数 。
2>户。又 设 n ,
…, +1 是

^
设 5 — 51 52 ••• 是 A 中长度为 的 字 符 串 ,这里 ; 在处理 5
的 过 程 中 进 入 的 状 态 序 列 ,因 而 该 序 列 的 长 度 为
^
P + lQ 根据鸽巢原理 ,在该序列的前 f + 1 个 元 素 中 ,一定有两个相同的状态 。设 第 1 个
72 + 1 ,不 小 于
是 r,,第 2 个 是 由 于 岀 现 在 序 列 的 前 p + 1 个 位 置 中 ,而且序列是从 n 开 始 的 ,故
有 此 时,令 工 二 以 … 一 1 , ~
:y = / …卜
5 1 以 及;2:
=心
由于 X 把 M 从 n 带到 r;
接受状态 ,故对于 M 接受:
^
,y 把 M 从 0 带到 G ,Z 把 M 从 带 到 +1 ,而 +1 是 一 个
r y z 。已 知 故 l 3H >0; 又已知 /<户+1,故|
:| <户。
~
于是 ,满足泵引理的 3 个条件 。
为了运用泵引理证明某个语言 B 不是正则的 ,首 先 假 设 B 是 正 则 的 ,以 便 得 出 矛 盾 。
根据泵引理 ,存 在 泵 长 度 使 得 B 中 所 有 长 度 为 /> 或 大 于 /> 的 字 符 串 都 可 以 被 抽 取 。其
^
次 ,在 B 中寻找一个字符串 5 , 它的长度为 p 或 大 于 /> 、 但不能被抽取 。最 后 ,证 明 s 不
能被抽取 。这要考虑把 s 划 分 成:r、 和 z 的 所 有 方 式 ( 如果方便的话 ,把 泵 引 理 中 的 条

时 ,常常把划分 s 的各种方式分成若干种情况 ,并且分别分析每一种情况 。如 果 B 是正则


的 ,存在这样的 s 与泵引理矛盾 。因 此 B 不 可 能 是 正 则 的。
^
件 3 考虑进来),并且对每一个这样的划分 ,找 到 一 个 / 值使得:r y z $ B。在做这最后一步

寻 找 s 有时需要点创造性思维 。在找到合适的 5 之 前 ,可能需要在多个候选中仔细搜


索 。试 验 B 中那些看起来反映了 B 的 非 正 则 性 “ 本 质” 的 成 员 。后 面 的 一 些 例 子 将 更 深
人地讨论寻找 s 的方法 。
设 B 是 语 言 { 0 w P U> 0 }。 用 泵 引 理 证 明 B 不 是 正 则 的 。 采 用 反 证 法
第1 章 正 则 语 言 49

证明。
假设相反 ,即 B 是正则的。令 /> 是由泵引理给出的泵长度 。选择 5 为字符串 0M
因为 s 是 B 的一个成员且 s 的长度大于 /> ,所以泵引理保证 s 可以分成 3 段 s = 使得 '
对 于 任 意 的 串: r y z 在 B 中 。下面考虑 3 种情况 ,说明这个结论是不可能的 。
1. 字符串 y 只包含 0 。在这种情况下 ,字符串 x y F 中的 0 比 1 多 ,从而不是 B 的成
员。违反泵引理的条件 1 ,矛盾 。
2. 字符串 只包含 1 ,这种情况同样给岀矛盾。
3. 字 符 串

^^ 既 包 含 0 也 包 含 1。在 这 种 情 况 下 ,字 符 串 中 0 和 1 的 个 数 可 能 相
等 ,但 是 它 们 的 顺 序 乱 了 ,在 0 的 前 面 出 现 1 。因 此 , 不 是 B 的成员 ,矛盾 。
这样 ,如果假设 B 是正则的 ,则矛盾是不可避免的 。因此 ,B 不是正则的。注意 ,可
以通过应用泵引理的条件 3 来排除第 2 种和第 3 种情况 ,进而简化该证明 。
在这个例子中 ,很容易找到字符串 因为 B 中 任 何 长 度 为 或 大 于 P 的字符串都符
合要求 。在下面两个例子中 ,s 的某些选择是行不通的 ,所以需要额外小心 。
设 0={ 加|加中 o ^
和 1 的个数相同 },用泵引理证明 c 不是正则的 。 证明采

用反证法 。
假设相反 ,即 C 是正则的 。令 p 是由泵引理给出的泵长度 。 和例 1.38
字 符 串 由 于 s 是 C 的一个成员且长度大于户 ,泵引理保证 s 可以分成三段
— 样 ,设 S 为

r y z 都在 C 中 。我们想证明这个结果是不可能的 。可是稍
使 得 对 于 任 意 的 字 符 串:
等一下 ,这个结果是可能的! 如果令:c 和 z 是空串 ,:
y 是 字 符 串 0P P ,则 :
ryz 中 0 和 1
的个数总是相等的 ,从而在 C 中 。所以 s 好像是可以被抽取的 。
在这里 ,泵引理中的条件 3 是有用的 。它规定在抽取 s 时 ,s 必须被划分使得| |<
P o 这样就限制了 s 的划分方式 ,使得能够比较容易地证明所选取的字符串 5 =

抽取 。这就给出了所希望的矛盾 。

可能被抽取的 。如果 I x y 丨 <户,则 :y 定只由 0 组成 ,从而 x:
y:

是不
y2:$ C。因 此 5 不 可 能 被
^
在这个例子中 ,选取字符串 s 比在例 1.38 中需要更加小心 。如果改为选择 .s =( 01 )N
就会遇到麻烦 。因为所需要的是一个不能被抽取的字符串 ,而这个 5 是能被抽取的 ,甚至
把条件 3 考虑在内也能被抽取 。想一想如何抽取它? 一个办法是令 x = e ,7 = 0 1 和 2=
1 ,, 那么对于 f 的每一个值 ,:

^
(Ol ) r y z G C。如果在第一次尝试寻找一个不能被抽取的字
符串时没有成功 ,不要丧失信心 。再来一次!
已知 B 是非正则的 ,由此可以得到另一个证明 C 是非正则的方法 。如果 C 是正则的 ,
则 CHO *
1 * 也是正则的 。理由是语言 0 * 1 * 是正则的 ,并且正则语言类在交运算下封闭
( 在 1.1 .5 节的脚注中证明了这条性质),但是 CHCT 1 *
等 于 B,并且由例 1.38 可知 B 是
非正则的 。
设 F= { WW l e { oa ) M o 用泵引理说明 F 不是正则的 。

s
^
假设相反 ,即 F 是正则的 。设 /> 是泵引理给出的泵长度 ,设 S 是字符串 M 10M。因为
是 F 的一个成员 ,并且 s 的长度大于户 ,故泵引理保证 s 能够被划分成 3 段 ,s = 满
足引理中的 3 个条件 。目标是证明这个结果是不可能的 。
条件 3 再一次是不可缺少的 。如果没有这一条 ,令:c 和 2 为空串 ,就能够抽取 5。 当
满足条件 3 时 ,证明如下 :因为 y 定 仅 由 0 组 成 ,故 茫 F。

50 第一部分自动机与语言

选 择 注 意 到 这 是 一 个 能 显 示 F 非正则性 “ 本质” 的字符串 。 相反地 ,


例 如 字 符 串 0 * 0 * 就 不 能 。虽 然 是 F 的一个成员 ,但是它能被抽取 ,所以不能给出
矛盾 。 ■
2
MSB
( 这里展示一个非正则的一元语言。设 D = { 1 "|n>0 }。 8卩 ,D 包含所有由
1 组成 、长度为完全平方的字符串。用泵引理证明 D 不是正则的 。证明采用反证法 。
2
假设相反 ,即 D 是正则的 。设户是泵引理给出的泵长度 ,s 是字符串 P 。由于 s 是 D
的一个成员且长度不小于 P ,泵引理保证 s 能被划分成 3 段 ,5 = 使得对任意的
ryz 在 D 中 。和前面的例子一样 ,要证明这个结果不可能的 。这里需要考虑一下
字符串 :
完全平方数序列 :
0,
1,4 ,9 ,
16 ,25 ,36 ,49〆"
注意序列中相邻的两个数之间的间隔在增大 ,序列中大的数不可能彼此靠近 。
现 在 考 虑 两 个 字 符 串 和 x/ b 它们之间相差 y 的一次重复 ,因而它们的长度相
差 y 的长度 。 根据泵引理的条件 3 , \ xy p , 从而 bl < 。由于 UFI = P , 所 以
\ 2

|x22|
: + p 但是〆+ /><〆+ 2户 ( /? )2
^
+1 = + 1 ,此外条件 2 意味 : y 不是空串 ,所以
/>

^
0

k/ z|>/>2 。这样:r/ z 的长度严格地在 p 2 和 ( p + 1 )2 这两个连续的完全平方数之间 。


因此该长度肯定不是一个完全平方数 。从而得出结论 x/ z 泛 D 并且 D 不是正则的 。 ■

dM邏Ha 在运用泵引理时 ,有时 “抽出” 是很有用的 。用泵引理证明


j ) 不是正则的 。采用反证法证明 。
假设 E 是正则的 。设是泵引理给出的关于 :的泵长度 。令 5 = 0*+ 1 P 。 于是 s 能够
被划分成 xyz ,且满足泵引理的条件 。根据条件 3 , 仅 包 含 0。 检 査 字 符 串 看 它
是否在 :中 。添加一个 y 使 0 的数目增加。而 :包含 (T 1 中所有 0 多于 1 的字符串 ,因
而增加 0 的数目给岀的字符串仍在 :中 ,没有矛盾 。因此需要试试别的办法 。
泵引理指岀 ,当 f = 0 时也有:ryzGf ,因此考虑字符串 x/ z =: :
TZ。删去串 y 使 0 的
^ *

数目减少 ,而 S 中 0 只比 1 多一个 。因此 , 中的 0 不可能比 1 多 ,从而它不可能是 :的


一个成员 。于是得到矛盾。

练习
Al. l 下图给出了两台 DFAA

^n
的状态图 。 回答下述关于这两台机器的问题 。
^和 ] 2

-( ► 孕1

b a,
b
%

M2

a. 它们的起始状态是什么? b. 它们的接受状态集是什么?
c. 对输入 aabb ,它们经过的状态序列是什么? d. 它们接受字符串 aabb 吗?
e. 它们接受字符串 e 吗?


^ 和純的形式化描述
A 1.2
给出练习 1.1 中画出的机器 iV
1.3 DFAM 的形式化描述为 ,, } A u d } ,d ,
( { q i 1q q q q5 9 q3 A q3 } ) , 其中 3 在下表中给出 。 试画出这
2 3
^
台机器的状态图 。
第1 章 正 则 语 言 51

d
9i
92 9i 93
93 92 94
93 95
9s q4 9s

1.4 下 面 每 个 语 言 都 是 两 个 简 单 语 言 的 交 。对 每 一 小 题 先 构 造 简 单 语 言 的 DFA ,然 后 按 照 1 . 1.5 节 的


脚 注 所 讨 论 的 构 造 方 法 结 合 它 们 以 画 出 给 定 语 言 的 DFA 状 态 图 。在 所 有 问 题 中 2= { a ,b ) o
a.{ w| 含 有 至 少 3 个 a 和 至 少 2 个 b } Ab. 含 有 正 好 2 个 a 和 至 少 2 个 b}

^

c.{ w \ vu 含 有 偶 数 个 a 和 1 个 或 2 个 b } Ad.{ 刻 w 含 有 偶 数 个 a 并 且 每 个 a 后 都 跟 有 至 少 一 个 b}
e. 从 a 开 始 并 且 最 多 有 1 个 b} f. 含有奇数个 a 并且以 b 结束}
g. 的 长 度 为 偶 数 并 且 有 奇 数 个 a}
1.5 下 述 每 个 语 言 都 是 一 个 简 单 语 言 的 补 。对 每 一 小 题 先 构 造 简 单 语 言 的 DFA ,然 后 用 其 画 出 给 定 语
言 的 DFA 状 态 图 。 在 所 有 问 题 中 2={ a ,
b }。
Aa. 中 不 含 子 串 ab } A b. { w l w 中不含子串 baba }
c. { w \ w 中 既 不 含 子 串 ab 也 不 包 含 子 串 ba } d.{ w 是不在 ax b "" 中 的 任 意 串 }
e.{ w \ w 是 不 在(ab + ) * 中 的 任 意 串 } f.{ 刻 加 是 不 在 a *
Ub * 中 的 任 意 串 }
g. 是 恰 好 不 含 2 个 a 的 任 意 串} h. 是除 a 和 b 外的任意串}
1.6 画 出 识 别 下 述 语 言 的 DFA 状 态 图 。在 所 有 问 题 中 字 母 表 均 为 { 0 ,
1 }。
a.{ 洲! 从 1 开 始 且 以 0 结 束 }
b.
c.
^ 含有至少 3 个 1}
含 有 子 串 0 1 0 1( 即 对 某 个:r 和 y :
j 0 1 0 1 jy )}
d. ,
的 长 度 不 小 于 3 并 且 第 3 个 符 号 为 0}
e. 从 0 开 始 且 长 度 为 奇 数,
或者从 1 开始且长度为偶数}
f. 不含子串 110}

-
g { w \ w 的 长 度 不 超 过 5}
h. 是除 11 和 111 外的任意串}
i. 的 奇 数 位 置 均 为 1}
j.
^
k.{ e ,
0}
含 有 至 少 2 个 0 ,并 且 至 多 含 1 个 1 }

l.{ w \ uu 含 有 偶 数 个 0 或 恰 好 2 个 1 }
m. 空 集
n. 除 空 串 外 的 所 有 字 符 串
1.7 给 出 识 别 下 述 语 言 的 NFA ,并 且 符 合 规 定 的 状 态 数 。在 所 有 问 题 中 字 母 表 均 为 { 0 ,
1 }。
a. 语 言 { u;|w 以 0 0 结 束 } , 3 个 状 态 。 b. 练 习 1 . 6 c 中 的 语 言,5 个 状 态 。
c. 练 习 1.61 中 的 语 言 ,6 个 状 态 。 d. 语 言 { 0 } , 2 个 状 态 。
e. 语 言 0 * 1 * 0 + ,3 个 状 态 。 Af. 语 言 1 * ( 0 0 1 + ) * ,3 个 状 态 。
g. 语 言 { e },1 个 状 态 。 h. 语 言 (T ,1 个 状 态 。
1 . 8 使 用 定 理 1 . 2 2 证 明 中 的 构 造 ,给 出 识 别 下 述 语 言 的 并 集 的 NFA 状 态 图 。
a. 练 习 1.6 a 和 1.6 b 中 的 语 言。 b. 练 习 1 . 6 c 和 1 . 6 f 中 的 语 言。
1.9 使 用 定 理 1 . 2 3 证 明 中 的 构 造 ,给 出 识 别 下 述 语 言 的 连 接 的 iVFA 的 状 态 图 。
a. 练 习 1 . 6 g 和 1 . 6 i 中 的 语 言 。 b. 练 习 1 . 6 b 和 1 . 6 m 中 的 语 言。
1.10 使 用 定 理 1 . 2 4 证 明 中 的 构 造 ,给 出 识 别 下 述 语 言 的 星 号 的 NFA 的 状 态 图
a. 练 习 1 . 6 b 中 的 语 言 。 b. 练 习 1 . 6 j 中 的 语 言。 c. 练 习 1 . 6 m 中 的 语 言 。
52 第一部分自动机与语言

Al.1 1 证 明 每 一 台 NFA 都 能 够 被 转 换 成 只 有 一 个 接 受 状 态 的 等 价 NFA 。


1 . 1 2 令 0={ 洲 功 含 有 偶 数 个 a 和 奇 数 个 b 并 且 不 包 含 子 串 ab }。画 出 识 别 D 的 5 状 态 的 DFA 图 和 -
生 成 D 的 正 则 表 达 式。 (建 议 尽 量 简 单 地 描 述 D。)
1 . 1 3 令 F 是 { 0 ,1 } 上 所 有 串 构 成 的 语 言 ,并 且 F 中 任 意 两 个 1 之 间 间 隔 的 符 号 数 都 不 是 奇 数 。画 出

- -
识 别 F 的 5 状 态 的 DFA 图 。(先 找 一 个 4 状 态 的 NFA 作 F 的 补 集 可 能 有 助 于 求 解 问 题。 )
1.1 4 a. 证 明 :若 M 是 一 台 识 别 语 言 B WDFA ,交 换 M 的 接 受 状 态 与 非 接 受 状 态 得 到 一 台 新 的 DFA ,
则 这 台 新 DFA 识 别 B 的 补 集 。 因 而 ,正 则 语 言 类 在 补 运 算 下 封 闭 。
b. 举 例 说 明 :若 M 是 一 台 识 别 语 言 C 的 NFA , 交 换 M 的 接 受 状 态 与 非 接 受 状 态 ,得 到 一 台 新
NFA , 这 台 新 NFA 不 一 定 识 别 C 的 补 集 。 NFA 识 别 的 语 言 类 在 补 运 算 下 封 闭 吗? 并 解 释
回 答。
1.15 给 出 一 个 反 例 ,说 明 下 述 构 造 不 能 证 明 定 理 1 . 2 4 ,即 正 则 语 言 类 在 星 号 运 算 下 封 闭 © 。设
=( 01 ,2, , ,

^ ^ ^^
) 识别 Ab 如 下 构 造 H 9l ,
, F) 。N 应 该 识 别 Af 。
a. iV 的 状 态 集 是 iVi 的 状 态 集 。
b. N 的 起 始 状 态 与 Ni 的 起 始 状 态 相 同 。
C. F ={ ql } UA 。
F 的 接 受 状 态 是 原 来 的 接 受 状 态 加 上 它 的 起 始 状 态。
d. 定 义 5 如 下 :对 每 一 个 和 每 一 个
8\ ( q y a ) q乐 F 或 a
^=e
8( q ,a ) = '
d\ ( q a ) U 或 a =e
( 建 议 :把 这 个 构 造 转 换 成 图 ,如 图 1 - 2 6 所 示。
) ^
1.16 使 用 定 理 1 . 1 9 给 出 的 构 造 ,把 下 图 的 两 台 非 确 定 型 有 穷 自 动 机 转 换 成 等 价 的 确 定 型 有 穷 自 动 机 。

a, b

3 Ob

(b)

1.17 a. 给 出 识 别 语 言 (0 1 U 0 0 1 U 0 1 0 ) * 的 NFA。
b. 将 给 出 的 NFA 转 换 成 等 价 的 DFA 。 给 出 在 该 DFA 开 始 状 态 可 达 的 部 分 即 可 。
1.18 给出生成练习 1.6 中语言的正则表达式。
1.19 使 用 引 理 1 . 2 9 中 描 述 的 过 程 ,把 下 述 正 则 表 达 式 转 换 成 非 确 定 型 有 穷 自 动 机 。
a. ( 0 U 1) * OOO( OUl ) * b. ( ( ( 00 ) * ( 11 ) ) 1101 ) * c. 0 *
1.20 对 于 下 述 每 一 个 语 言 ,给 出 4 个 字 符 串 ,其 中 2 个 是 这 个 语 言 的 成 员 ,2 个 不 是 这 个 语 言 的 成
员 。这 里 假 设 字 母 表 2={ a ,
b }。
# #
a. a b b. a ( ba ) * b
c.a Ub
* *
d. ( aaa ) *
e.2 *
hi al* *
f . aba U bab
g.( e U a )b h. ( aU baU bb ) 2 *
1.21 使 用 引 理 1 . 3 2 中 描 述 的 过 程 ,把 下 图 的 有 穷 自 动 机 转 换 成 正 则 表 达 式 。

© 换句话说 ,必须给岀一台有穷自动机 iv!,关于它构造出来的自动机 IV 不识别 iVi 的语言的星号 。


第J 章 正 则 语 言 53

(a)

1.22 在 某 些 程 序 设 计 语 言 中 ,注 释 出 现 在 两 个 分 隔 符 之 间 ,如 : / # 和 # /。设 C 是 所 有 有 效 注 释 串

^
的 语 言。C 中 的 成 员 必 须 以 / # 开 始 、 : / 结 束 ,并 且 在 开 始 和 结 束 之 间 没 有 :tt /。为 简 便 起 见 ,
假 设 C 的 字 母 表 2= U ,
6,/,井
a. 给 出 识 别 C 的 DFA 。 b. 给 出 生 成 C 的 正 则 表 达 式 。
A1.23
设 J3 是 字 母 表 2 上 的 任 一 语 言。证 明 B = 当且仅当
1.24 有 穷 状 态 转 换 器 ( FST) 是 确 定 型 有 穷 自 动 机 的 一 种 类 型 。它 的 输 出 是 一 个 字 符 串 ,而 不 仅 仅 是
接 受 或 拒 绝 。下 图 是 两 台 有 穷 状 态 转 换 器 乃 和 T2 的 状 态 图 。:

0/0 1/1 a/ l
1/0 2/1 a/0 ,
b/0
b/1
b/1
o/o a/ l
7] T2

FST 的 每 一 个 转 移 用 两 个 符 号 标 记 ,一 个 指 明 该 转 移 的 输 入 符 号 ,另 一 个 指 明 输 出 符 号 。 两 个
符 号 之 间 用 斜 杠 / 把 它 们 分 开 。在 乃 中 ,从 % 到 % 的 转 移 有 输 入 符 号 2 和 输 出 符 号 1。某 些 转

- :
移 可 能 有 多 个 输 入 输 出 对 ,例 如 H 中 从 % 到 它 自 身 的 转 移 。 当 FST 在 对 输 人 串 w 计 算 时 ,从
起 始 状 态 开 始 ,一 个 接 一 个 地 取 输 入 符 号 … ,n ,并 且 比 照 输 入 标 记 和 符 号 序 列 W\ " .W n
进 行 转 移 。每 次 沿 一 个 转 移 走 一 步 ,输 出 对 应 的 输 出 符 号 。 例 如 ,对 输 人 2 2 1 2 0 1 1 ,机 器 :
H 依
次进人状态 %, <? ,
g2 , 2 <?2 , %,
g2 , %,
% 和 输 岀 1 1 1 1 0 0 0。对 输 人 abbb,T2 输 岀 1 0 1 1 。 给 出 在 下 述
每一小题中机器进人的状态序列和产生的输出。
a. 丁1 对 输 人 串 0 1 1 b. Ti 对 输 人 串 2 1 1 c.Ti 对 输 人 串 1 2 1
d. Ti 对输人串 0202 e. T2 对 输 人 串 b f . T2 对 输 入 串 bbab
.
g 丁2 对 输 人 串 bbbbbb h. T2 对 输 入 串 e
1.25 见 练 习 1 . 2 4 中 给 岀 的 有 穷 状 态 转 换 器 的 非 形 式 化 定 义 。仿 照 定 义 1 . 1 ( 1 . 1.1 节 ) 的 模 式 ,给 出
这 个 模 型 的 形 式 化 定 义 。假 设 FST 的 输 入 字 母 表 为 2、 输 出 字 母 表 为 r ,但 没 有 接 受 状 态 集 。包
括 FST 的 计 算 的 形 式 化 定 义 在 内 。( 提 示 :一 台 FST 是 一 个 5 元 组 ,它 的 转 移 函 数 形 如 & QX
2^Q X r ) 0

1.26 参 见 练 习 1 . 2 5 的 解 决 方 案 ,给 出 练 习 1 . 2 4 中 画 出 的 机 器 乃 和 T2 的 形 式 化 描 述 。 :
1.27 参 见 练 习 1 . 2 4 中 给 岀 的 有 穷 状 态 转 换 器 的 非 形 式 化 定 义 。 给 出 一 台 具 有 下 述 行 为 的 FST 的 状 态
图 。它 的 输 入 、 输 岀 字 母 表 都 是 { 0 , 1 }。它 输 出 的 字 符 串 与 输 入 字 符 串 在 偶 数 位 相 同 、 奇 数 位
相 反 。例 如 ,对 于 输 入 0 0 0 0 1 1 1 ,它 应 该 输 出 1 0 1 0 0 1 0 。
1.28 使 用 定 理 1 . 2 8 给 出 的 过 程 将 下 述 正 则 表 达 式 转 换 成 NFA 。 在 所 有 问 题 中 2={ a ,
b }。
a.a abb U b
( ) * 1
b. a U a b
( ) f c. aUb a b
( + ) + +
1.29 使 用 泵 引 理 证 明 下 述 语 言 不 是 正 则 的。
Aa.Ai ={ 0 nlw 2 n \ n 0 )

^
b. A 2 = { 1 { a j b} * }

Ac.A3 ={ a2”
| n>0 }( 这 里 a2”表 示 2” 个 a 构 成 的 串)
54 第一部分自动机与语言

1.30 指 出 下 述 关 于 0 * 1 * 不 是 正 则 语 言 的 “证 明” 的 错 误 (由 于 (T 1 是 正 则 语 言 ,所 以 “证 明” 存
在 错 误 ):用 反 证 法 证 明 。假 设 e r r 是 正 则 的。设 是 泵 引 理 给 出 的 关 于(r 1 * 的 杲 长 度 。选
择 5 为 串 0 M〃。已 知 S 是 (T 1 * 的 一 个 成 员 ,但 例 1 . 3 8 表 明 5 不 能 被 抽 取 。这 样 得 到 矛 盾 。 因 此
0 * 1 * 不 是 正 则 的。

问题
1.31 对 语 言 A 和 语 言 B ,设 A 和 B 的 完 全 间 隔 交 叉 ( p e r f e c t s h u f f l e ) 为 :
其 中 a \ •••a* 6 A 并 且 6!… 6*
{w \ w = a\ bi ••• akbk , 任 一 a,,
B, 6, 2}
证 明 :正 则 语 言 类 在 完 全 间 隔 交 叉 下 封 闭 。
1.32 对 语 言 A 和 语 言 B , 设 A 和 B 的 间 隔 交 叉 ( shuffle ) 为 :
x = a i 6i … akbk ,
其中 ai … 6 A 并 且 61 … 6 B,
任 一 a ,.,
_
6,6 2 * }

1.33
^
证 明 :正 则 语 言 类 在 间 隔 交 叉 下 封 闭 。

-
设 A 为 任 意 语 言。定 义 D K O P OL/T( A ) 得 到 的 语 言 包 含 的 串 都 是 A 中 的 串 移 除 一 个 符 号 后 得

- ;
到 的 。这 样 ,Z R O P OL 丁(八)={:丨0: 6 八 , : , 62 , e 2>

^
其中 *
证 明 :正 则 语 言 类 在 运 算

^— ^ ^
X 2 o

D尺O P-OLTT 下 封 闭 。 像 定 理 1 . 2 3 样 ,用 图 给 出 一 个 证 明 ,再 通 过 构 造 给 出 一 个 更 形 式 化 的
证 明。
A1.34
设 B 和 C 是 2 = { 0 , 1 } 上 的 语 言。定 义


对 于 某 个:y 6 C,
串 功 和:y 含 有 同 样 个 数 的 1}

证 明 :正 则 语 言 类 在 运 算 下 封 闭。
*
1.35 设 A/B= { m
| 对于某: m r G A }。证 明 如 果 A 是 正 则 的 ,B 是 任 意 语 言 ,那 么 A / B 是 正
r 6 B,
则 的。
1.36 对 于 任 意 的 字 符 串 W = U U\ W 2 ,,* ' , UU 的 反 转 是 按 相 反 的 顺 序 排 列 得 到 的 字 符 串 ,记 作

^
Wn

即加尺 UUn “. ^
1 2 切1 。 对 于 任 意 语 言 A ,设 =
证 明 :如 果 A 是 正 则 的 ,则 AK 也 是 正 则 的 。
1.37 设
「o
~
i roi roi
23 = o o
L0J L0J
23 包 含 所 有 高 度 为 3 的 0 和 1 的 列 。23 上 的 字 符 串 给 出 三 行 0 和 1。 把 每 一 行 看 作 一 个 二 进 制
数 ,令
B ={ W 6 2 3 * 丨 比 最 下 面 的 一 行 等 于 上 面 两 行 的 和 }
例 如,
ro non
0 0 G B, 但 是 0 0 $ B
Ll」L0」L0」 LI」LI」
证 明 B 是 正 则 的 (提 示 :证 明 是 正 则 的 会 容 易 一 些 。假 设 已 知 问 题 1 . 3 6 中 的 结 果 )。
1.38 设
0 0
22 =
0 0
这 里 ,22 包 括 所 有 高 度 为 2 的 0 和 1 的 列 。22 上 的 字 符 串 给 出 两 行 0 和 1 。 把 每 一 行 看 作 一 个
二 进 制 数 ,令

C = {w e i 2* 丨 切 下 面 一 行 是 上 面 一 行 的 3 倍 }
例如,
第1 章 正 则 语 言 55

onronrinro rOn 厂 On 厂 1
o o
e c, 但 是 ULoJ
$C

证明 C 是正则的 。(可以假设已知问题 1.36 中的结果 。



1.39 设 22 与问题 1.38 中的相同 。把每一行看作是一个二进制数 ,并且设
D= { we 2 z *
l u;上 一 行 表 示 的 数 大 于 下 一 行 表 示 的 数 }
例如 ,
oirinrinro
0 0 0
6 D ,但是
0|
0
- -
厂0 1 厂 11 厂 0
0
证明 D 是正则的 。
1.40 设 22 与问题 1.38 中的相同 。把上 、 下行都看作是 0 和 1 的字符串 ,并且设
E= { W ^ 丨加的下一行是上一行的反转}

证明 不是正则的 。
^ 22
1.41 设队 = 是《 的 整 数 倍 }。 证 明 :对 每 一 个 语 言 艮 是 正 则 的 。
1.42 设 C„ = {:
| 且是 n 的 整 数 倍 }。证 明 : 对 每 一 个 语 言 C„ 是正则的 。
r x 是一个二进制数 ,
1.43 一台全路径 NFA ( all - NFA )
M 是一个 5 元组 (Q,2,心% ,F)。 如果 M 对:c 6 2 * 的每一个可能
的计算都结束在 F 中的状态 ,则 M 接受:r 。注意 ,相反地 ,普通 NFA 只需有一个计算结束在接
受状态 ,就接受这个字符串 。 证明 :全路径 NFA 识别正则语言类 。
1.44 定理 1.28 中的构造表明 ,每一个 GNFA 都等价于一个只含两个状态的 GNFA。对 DFA ,有相
反 的 现 象 。证 明 : 对 每 一 个 々
〉 1 ,都 有 语 言 能 被 一 个 々 个 状 态 的 DFA 识别 ,但不
能被只有々一 1 个状态的 DFA 识别 。
1.45 如果存在字符串 z 使得 :V,则称字符串工是字符串:y 的前缀 ( prefix)。如果:c 是:V 的前缀且
则称 x 是:y 的真前缀 ( proper prefix )。下面每小题定义一个语言 A 上的运算 。 证明 :正
则语言类在每个运算下封闭 。
Aa. iVOP £FJX( A )= { w 6 A|i£;

^
任一真前缀都不是 A 的元素 }
b. NO£:XTf:iVD( A )= U 6 Ak 不是 A 中任何字符串的真前缀 }
A 1.46 参见练习 1.24 中给出的有穷状态转换器的非形式化定义 。证明不存在对每一个输人 都能输出

1.47 设:
的 FST,其中输人和输出字母表为 { 0 ,
1 }。
r 和 y 是两个字符串 ,L 是一个语言 。 如果存在字符串 z,使得 xz 和% 中恰好有一个是 L 的
^
成员 ,则称:r 和 y 是用 / 可区分的 ;否则 ,对每一个字符串
■ 和 :yz 要么都是 、 要么都不是
L 的成员 ,则称工和:V 是用 L 不可区分的 。如果 x 和 3;是用 L 不可区分的 ,记作工三0。证明
是一个等价关系 。
1.48 Myhill - Nerode 定理 。参见问题 1.47 , 设 L 是一个语言 ,X 是一个字符串集合 。如果 X 中的任意
两个不同的字符串都是用 L 可区分的 ,则称 X 是用 L 两两可区分的 。定义 L 的指数为用 L 两两
可区分的集合中的元素个数的最大值 。L 的指数可能是有穷的或无穷的 。
a. 证明 :如果 L 被一台有々个状态的 DFA 识别 ,则 L 的指数不超过是 。
b. 证明 :如果 L 的指数是一个有穷数々,则它被一台有々个状态的 DFA 识别 。
c. 由此得到 :L 是正则的当且仅当它有有穷的指数 。而且 ,它的指数是识别它的最小 DFA 的
大小。
1.49 考察语言 F ={ a* ly ck
| !,
),6>0 ,
并且若 i’= l ,
贝lj j = k } 。
a. 证明 F 不是正则的 。
b. 用泵引理说明 F 是一个正则语言 。 即对于一个给定的栗长度 p ,F 满足泵引理的三个条件 。
c. 解释为什么 (a ) 和 ( b) 与泵引理不矛盾。
1.50 泵引理指出 ,对每一个正则语言都有一个泵长度 /> ,使得对于该语言中每一个字符串 ,如果它的
长度等于或大于 A 就 能 够 被 抽 取 。如 果 是 语 言 A 的 泵 长 度 ,则 任 意 的 也 是 A 的 泵 长
56 第一部分自动机与语言

度 。A 的 最 小 泵 长 度 是 A 的 泵 长 度 的 最 小 值 。例 如 ,如 果 A = 则 最 小 泵 长 度 等 于 2。理 由
如 下 :A 中 长 度 为 1 的 字 符 串 s = 0 不 能 被 抽 取 ,而 A 中 任 何 长 度 大 于 等 于 2 的 字 符 串 都 含 有 1 ,
把 它 划 分 成 x = 0 , y = l , z 为 其 余 部 分 ,从 而 能 够 被 抽 取 。对 于 下 述 语 言 ,给 出 最 小 泵 长 度 ,
并 加 以 证 明。
Aa. 0001 * A b. 0 * 1 * c.0 0 1 U 0 * 1 #

Ad.0 * 1 + 0 + 1 * U 1 0 1 #
e.( 0 1 ) * f.£
g.1 0 1 0 1
* * *
h.1 0( 1 1 0 ) 0
* *
i.1 0 1 1

1.51 证 明 下 述 语 言 不 是 正 则 的 。证 明 可 以 使 用 泵 引 理 和 正 则 语 言 类 在 并 、交 、补 运 算 下 封 闭 的 性 质。
a.< 0 nlm 0n \ m ,n

^
0) Ab. { 0m 1|" m n)
^
-
c.{ w { 0 ,1 } 不 是 一 个 回 文 } e d.{ vutiv|iv ,t :
{ 0 ,1 } }

^
|
'
# *

1 . 5 2 设 以 及
Y={ 扣
| 对k O y X i 61 * 且 时 Xi ,-W = X \ # X2 # # }
证 明 :Y 不 是 正 则 的 。
^ ^ Xj » ••

1.53 设 2={ 0,
1} 以 及
中子串 01 和子串 10 的出现次数相等}
由 于 1 0 1 含 有 一 个 0 1 和 一 个 1 0 ,因 此 1 0 1 GD。而 1 0 1 0 含 有 两 个 1 0 和 一 个 0 1 ,所 以 1 0 1 0 $ D。
证 明 :D 是 正 则 语 言。
1.54 b }。对 每 一 个 々>1 ,设
设 2={ a , G 是 由 所 有 从 右 端 起 第 々 个 位 置 是 a 的 串 组 成 的 语 言。这 样
分 别 用 状 态 图 和 形 式 化 描 述 的 方 法 描 述 识 别 G 的 有 A + 1 个 状 态 的 NFA 。
1 . 5 5 考 虑 问 题 1 . 5 4 中 定 义 的 语 言 G 。证 明 对 每 一 个 h 没 有 状 态 数 小 于 V 的 DFA 识 别 Q 。
1 . 5 6 设 2={ a,
b}。对 每 一 个 >1,设 Q 是 由 所 有 最 后 々 个 符 号 中 至 少 含 一 个 a 的 串 组 成 的 语 言。这 样

1.57
Dk =r
^
。分 别 用 状 态 图 和 形 式 化 描 述 的 方 法 描 述 识 别 A 且 最 多 有 々+1 个 状 态 的 DFA。
a. 设 A 是 无 穷 正 则 语 言。证 明 :A 能 够 被 拆 分 成 两 个 不 相 交 的 无 穷 的 正 则 子 集 。
b. 设 B 和 D 是 两 个 语 言 。如 果 并 且 D 无 穷 地 包 含 所 有 不 在 B 中 的 串 ,则 记 作 B d D。 证
明 :如 果 B 和 D 是 两 个 正 则 语 言 且 B 廷 D ,那 么 可 以 找 到 一 个 正 则 语 言 C,使 得 B d C (i D。
1.58 设 N 是 识 别 某 语 言 A 的 一 台 含 々 个 状 态 的 NFA 。
a. 证 明 :如 果 A 非 空 ,则 A 含 有 的 串 的 长 度 最 大 为 々。
b. 通 过 举 例 说 明 :如 果 将 U ) 中 的 两 处 A 替 换 为 则 (a ) 不 一 定 为 真 。
c. 证 明 :如 果 A 非 空 ,则 A 含 有 的 串 的 长 度 最 大 为
d. 证 明 (c ) 中 给 岀 的 边 界 是 相 当 紧 密 的 。即 对 每 一 个 I 证 明 NFA 识 别 语 言 Aa ,其中冗是非
空的并且 &中 最 短 的 成 员 串 的 长 度 是 々 的 指 数 。与 (c ) 中 的 边 界 非 常 接 近 。
*
1.59 证 明 :对 每 一 个《>0 , 语 言 艮 都 存 在 ,其 中
a. Bn 被 含 有 72 个 状 态 的 NFA 识 别 。


b. 对 正 则 语 言 A ,如 果 艮 =為 1) … UAo 那 么 至 少 有 一 个 A, 需 要 含 有 指 数 级 个 数 状 态 的 DFA。
1.60 同 态 ( homomorphism ) 是 从 一 个 字 符 集 经 过 另 一 个 字 符 集 到 字 符 串 的 函 数 /:2 厂 。定 义
/( u0 = /( i )/( u;2 )… /(叫) 将 / 扩 展 为 在 字 符 串 上 的 操 作 ,其 中 W = ZUl U )2 叫 并 且 如, 2。

^
进 一 步 ,对 任 意 语 言 A ,定 义 /( A )={ /( w| eA } 将 / 扩 展 为 对 语 言 的 操 作 。
) i£;

a. 通 过 形 式 构 造 证 明 :正 则 语 言 类 在 同 态 下 封 闭 。换 言 之 ,给 定 一 个 识 别 B 的 DFA M 和 同 态
/,构 造 一 个 识 别 /( B ) 的 有 穷 自 动 机 AT 。考 虑 你 构 造 的 机 器 AT ,是 否 在 所 有 情 况 下 它 都 是
一 个 DFA ?

回 文 ( palindrome ) 是 顺 着 读 和 倒 着 读 都 一 样 的 字 符 串。
第J 章 正 则 语 言 57

b. 通过一个例子证明 :非正则语言类在同态下不封闭 。
1. 6 1 设语言 A 的旋转闭包 ( rotational closure ) 为 i?C( A )={;: :r v 6
y r| : 。
a. 证明 :对任何语言 A ,R C ( A ) = R C ( R C ( A ) ) 0

b. 证明 :正则语言类在旋转闭包下封闭 。
1. 6 2 设 2={ 0 ,
1,+ ,= } 以及
A D D= { x= y \~ z \ x , y , z 是二进制整数 ,
~
并且工是:y 与 z 的和 }
证明 ADD 不是正则的 。
•1 . 6 3 若 A 是一个自然数的集合 ,々是大于 1 的自然数 ,令

^
5
“。
焱)= { 1;是 A 中某个数以々为底的表示}
这里不允许数的表示以 0 开头 例如 ,B2 ( 彳 3 ,5 })= { 11 , B3 ({ 3 ,5 })= { 10,
101 > , 12 }。给出一个
集合 A ,使得 B2( A ) 是 正 则 的 ,而 B3( A ) 不是正则的 ,并加以证明 。
•1 . 6 4 若 A 是任一语言
| -
,令 A 是 A 中字符串的前半段组成的集合 ,即
| A - = {:
| ,:
r 对 于 某 个 :y||c =
| :
y 且
|

+-
证明 :如果 A 是正则的 ,那么 A 也是正则的 。
,令 A _ 是 A 中所有字符串删去中间的三分之一后得到的字符串组成的集
* 1.65 若 A 是任一语言|
+
合 ,即
| | A - = U 2:| 对 于 某 个 :y ,U
| =|:
y|=
| z 且 xyz
|
^ A)
证明 :如果 A 是 正 则 的 ,那 么 不 一 定 是 正 则 的。
*
1 . 6 6 设 M =( Q ,2,心% ,
F) 是 一 个 DFA 并 且 M 的 状 态 称 为 它 的 “ 家”。M 和 A 的 同 步 序 列 ( syn -
chronizing sequence ) 为 串 5, 其中对每一个 Q, s )= /i 。( 这里已经把 5 扩展成串,
5( g ,
因 此 祝 心 5 ) 等 于 当 M 从状态 g 开始 ,读人输人 5 的结束状态 。 ) 如果对某个状态 /1 ,M 有一个同
步序列 ,那么称 M 是 可 同 步 的 ( synchronizable )。证明 :如果 M 是一台 I状 态 的 可 同 步 的
D F A , 那么它有一个长度最大为々3 的同步序列 。试试增大这个边界 。
1 . 6 7 对 语 言 A 和 语 言 B ,定 义 运 算 如 下 :
A avoids B = 并且 B 中的任何字符串都不是 A 的子串}
证 明 :正 则 语 言 类 在 运 算 下 封 闭 。
1.68 1 },
设 2= { 0 ,
a. 若 彡1 并 且 1/ 6 2 * }。证明 :A 是正则的 。
b. 若 3={ 0々1 0叫々彡1 并 且 }。证 明 :B 不是正则的 。

^
设 从 和 純 是 分 别 包 含 々i 和 心 个 状 态 的 两 个 DFA ,设 U )。

^
1.69 UMDUUiV
a. 证明 :如果 [/关 0 ,那么 L;
包含长度小于 maxU! ,h ) 的 字 符 串 。
; ;
b. 证明 :如果 L 关:T ,那么 L 不包含长度小于幻 h 的字符串 。
1.70 l,
设 2={ 0 , C= U # :
:tU , rR #:ck 6 { 0,
l } * }。证 明 :C 是上下文无关语言 (CFL )。
a. 设 5= { 1 | 1 } * ,并且对々>1 ,:
{ 0, y 含有至少々个 1 }。证明 : B 是正则语言 。

~~ ^
1.71
b. 设 0= { 1 | 1 } * ,并且对々>1 ,j 含有至多々个 1 > 。证明 :C 不是正则语言。

^
3 { 0,
*
1.72 传统切牌方法将一副纸牌随意分成两部分 ,交换后再重新组合成一副牌 。更复杂点的方法被称为
Scame 切牌 ,首先将一副牌分成 3 部分 ,重新组合时将中间那部分放在最上面 。受 Scame 切牌
启发 ,定义一种对语言的操作 。对语言 A ,设 CT7T( A )={ y:| :
o 6 A }。 :
^
rZ

a. 给出一个语言 B 满足 CLTT( B )关 CL/KCL;


丁( J3 ))。

b. 证明正则语言类在 CUT 操作下封闭 。

^^
1.73 1 },\
设 2= { 0 , = { 功 功|加€2 * 并且比的长度为々
a. 证明无论々取何值 ,所有状态数少于 V 的 DFA 都不能识别 WW* 。
b. 描述一个状态更少的能识别 WWA ( WW 的补集 ) 的 NFA 。 ,
58 第一部分自动机与语言

习题选解
1.1 .
对 ⑽ : a.% ; b. { Q 2 } i c 9i ,
%,%, 9i , 9i ; d. 不 接 受 ;e. 不 接 受 。
对 M2 : a.qx ;b.{ ,g4 };C. qx yqx , qx , q2 f q A ; d. 接 受 ;e. 接 受 。
1.2 Mi =({ % ,
g2 ,
<? },
3 { a,
b },
汐1 ,
%,{ <?2 })
M2 =({ l ,
g2 ,
g3 ,% },{a,b },
办,%, {% ,g4 })
转移函数分别为:

汐1 b §2 b
9l 9i 92
9i 92
% 94
93 93
93 92
% 92 9i % 93 94

1.4 b. 语 言 I 含 有 正 好 2 个 a} 和 语 言 1 含 有 至 少 2 个 b } 的 DFA 如 下 所 示:

^ ^

a,b

6
使 用 自 动 机 的 交 运 算 构 造 出 如 下 DFA:

b b b b

b b b b

-
b b b
虽 然 问 题 并 没 有 要 求 简 化 DFA ,但 可 以 合 并 某 些 状 态 ,得 到 :

00

b b b

O OM >
^
a,b
b b b

b b b
d. 语 言 含 有 偶 数 个 a } 和 语 言 { W
| W 中 每 个 a 后 都 跟 有 至 少 一 个 b } 的 DFA 如 下 所 示:

a,b

b
使 用 自 动 机 的 交 运 算 构 造 出 如 下 DFA :

b
bCO b

b b
b
第J 章 正 则 语 言 59

虽 然 问 题 并 没 有 要 求 简 化 DFA ,但 可 以 合 并 某 些 状 态 ,得 到:

1.5 a. 左 边 的 DFA 识 别 { 1 |1;


含 有 子 串 吐 }。右 边 的 DFA 识 别 它 的 补 : |w 不 含 有 子 串 ab }。

^ b
b
a, b
a,

b. 如 下 DFA 识 别 { it;丨 w 含 有 子 串 baba } 。

b a,
b

如 下 DFA 识 别 |w 不 含 有 子 串 baba } 。

b b a,b
b

0
o^o
1.11 设 N = ( Q, %,
2 , 5, F ) 为 任 一 NFA 。 构 造 一 个 只 有 一 个 接 受 状 态 的 NFA i\T ,它 与 iV 接 受 同 样 的
语 言。非 形 式 地 讲 ,M 与 JV 很 相 近 ,但 是 Y 从 相 对 于 iV 是 接 受 状 态 的 状 态 到 新 的 接 受 状 态 g

N =( QU { accept > ,2
, ,
), 其 中 对
eept 上 没 有 新 的 转 移 。形 式 地 讲 ,

^ ^^
有 r 转 移 。状 态 0 { 9accept }

每 一 个 gGQ 和‘
d l q, 如果 a e 或 g $F
d’(q ,
a )=
a)
d ( q ,a ) U {
^
如 果 a= e 或

5'( gae,
并 且 对 每 一 个 么, ,a ) = 0 o
^ accept
^


1.23 证 明 “当 且 仅 当” 的 两 个 方 向 :
( ) 假 设 B = B + ,证 明


由 于 对 所 有 语 言 成 立 ,因 此 如 果 5= 3+ ,那 么
( ) 假设 证 明 B = B+ 。
由 于 对 所 有 语 言 有 B Q B+ ,所 以 只 需 要 证 明 如 果 那 么 比 二 心 心 … 心 ,其 中 每
一 个 并 且 々>1。因 为 A , 因 而 有 m2 e B。 类 似 地 ,由 于 m2 在 B
中 并 且:
r 3 也 在 B 中 ,因 而 有 m2:r3 6 B。以 此 类 推, 因 此 wGB ,于 是 可 以 得 到 结

后半部分的论证可以用如下的归纳证明形式化地描述 :
假设
60 第一部分自动机与语言

B , 那 么 J:

^
断 言 :对 每 一 个 々>1 ,如 果 i i ,… ,Xk : I… x+ G B。
归 纳 基 础 :当 々= 1 时 ,陈 述 显 然 成 立 。
归 纳 步 骤 :对 每 一 个 々>1 ,假 设 断 言 在 々 时 成 立 。证 明 々 1 时 也 成 立 。 +

1.29
如 果 XI ,••• ,工k , + 1 e B , 那 么 根 据 归 纳 假 设:r K "
因此心

SAi
A+ &


的一个成员并且
是 正
5

比 />
GB , 有 工 厂.• x k x k + \ G 肌 但 BBGB ,
这 样 就 证 明 了 归 纳 步 骤 和 断 言 。该 断 言 指 出 ,如 果 那 么 B d
的。设 户 是 泵 引 理 给 出 的 泵 长 度 。选 择 s 为
更 长 ,泵 引 理 保 证 5 可 以 被 划 分 成 3 片 ,S=
串 —

jcyz , 其 中 对 任 意
于 S

^^
0 ,串 : 在 焱!中 。考 虑 下 面 两 种 可 能 性 :

1. 串 y 仅 由 0 组 成 ,仅 由 1 组 成 ,或 者 仅 由 2 组 成 。 在 这 些 情 况 下 ,串 工3 0 将不会有等数董
的 0 ,1 和 2。 因 此 xyyz 不 是 A i 的 成 员 ,矛 盾 。
2. 串:y 由 不 止 一 种 符 号 组 成 。在 这 种 情 况 下 ,串 : 将 含 有 次 序 不 定 的 0 ,1 或 2 。因 此 ocyyz
^
^
T3 0

不 是 A 的 成 员 ,矛 盾。
两 种 可 能 性 得 到 的 都 是 矛 盾 。因 此 ,A! 不 是 正 则 的 。
为 串 a2\ 由 于 5 是 A 3

^
c. 假 设 A 3 = { a2”|n O } 是 正 则 的 。设 /> 是 泵 引 理 给 出 的 泵 长 度 。选 择 6

的 一 个 成 员 并 且 5 比 /> 更 长 ,泵 引 理 保 证 s 可 以 被 划 分 成 3 片 ,s = xyz , 满 足 泵 引 理 的 三 个
条 件。
第 三 个 条 件 说 明 丨1 3;丨 <户。此 外 p<2 P , 可 见 |: H + l:
y|<2匕 因 此 U3 0 |= k 3; y l < 2P +
2 * = 2〃+ 1 。第 二 个 条 件 要 求 b l >0 , 于 是 这 样 的 长 度 不 可 能 是 2 的
某 次 方 。因 此 不 是 A 3 的 成 员 ,矛 盾 。从 而 ,戊 不 是 正 则 的 。
^

^^ ^ _
^ —^
1.34 设 DFAMB O J, , !
, ) 和 DFAMC =( QC ,
2, % F c) 分 别 识 别
( C, , B 和 C。 按 如 下 方 式
^C 的 N F A M%= ( Q,
构造识别 2,A% ,F)。为 了 确 定 其 输 人 切 是 否 在 B C 中 ,机 器 M 要 检 査
w G B , 并 且 并 行 、 非 确 定 地 猜 测 和 w 含 有 同 样 个 数 1 的 串 y 并且检查 : 6( :

.
1 Q= QB X Qc 。
2 对 和 定 义
'
0) ,
{ ( d B ( g, r) } 如 果 a=0
8(.( q' j r ) j d)= < { C 8Q( 1) 9 SQ ( r » 1) )} 如 果 fl =l

3. —( <7g ,
4.F = FB XFC
9c )。
O

.{( g《

^
cO ,0 ))} 如果

1.45 2,心% ,
a. 设 M=( Q, F ) 是 识 别 A 的 一 台 D F A ,其 中 A 是 某 正 则 语 言。按 如 下 方 式 构 造 识 别
,
NOPREFIX ( A ) 的 M' = ( Q\ l i d\ q0\ F ):
l.Q
^Qo { d( r ,a )} 如 果 r芒F
_
2. M 定义 y( r ,a )
0 如 果 r6 F
3. — %。

4.F = F。
1.46 时输出加尺 。 考 虑 输 入 串 00 和 01。对 于 输 人 00 , 丁 必 定 输
假 设 相 反 :存 在 某 个 FSTT 在输人 «; ■

出 0 0 , 对 于 输 入 0 1 ,了 必 定 输 出 1 0。在 这 两 种 情 况 下 ,输 人 的 第 一 位 都 是 0 , 但 输 出 的 第 一 位 却
不 一 样 。对 于 FST 来 说 是 不 可 能 这 样 操 作 的 ,因 为 FST 在 读 入 第 二 位 输 入 之 前 就 要 产 生 第 一 位 输
出 。因 此 不 存 在 这 样 的 FST。
1.48 用 反 证 法 证 明 该 断 言 。令 M 为 一 识 别 L 的 f 状 态 D F A 。假 设 相 反 :L 的 指 数 大 于 这 就 意 味
着 某 个 元 素 个 数 大 于 々 的 集 合 X 能 够 被 L 两 两 区 分。由 于 M 有 々 个 状 态 ,根 据 鸽 巢 原 理 ,X
含 有 两 个 不 同 的 串:r 和:y ,其中汉% ,2:
)= 扒 9 ,
3/ )。 这里 M % ,
: 。
r) 是 M从起始状态 g 出发在
*

第J 章 正 则 语 言 61

读 人 输 入 串 I 后 所 在 的 状 态 。那 么 ,对 任 意 串 6 2 * ,d( qQ ,
:cz )= d( qQ ,=
yz )。因 而 n 和:yz 要
么 都 在 L 中 ,要 么 都 不 在 L 中 。 但 这 样 r 和 3;不 再 被 L 区 分 ,与 假 设 的 X 被 L 两 两 区 分 矛 盾 。
*

b. 设 久 ={ 51 " ,
& } 被 L 两 两 区 分 。构 造 识 别 L 的 有 々 个 状 态 的 DFA M = ( Q,2,心 % ,F )。设
Q ~
i Qi
于 5) G X ,

^
yQk } 并 且 定 义 占 为 A ,其 中
**

Sj 三L Si
( 关 系 的 定 义 见 问 题 1 . 4 7 )。注 意 对

否 则 ,XLkfl 可 能 含 有 々+1 个 元 素 并 且 被 L 两 两 区 分 ,这 会 与 假 设 L 的
指 数 为 々 相 矛 盾 。设 尸= { qt I S i e L } , 起 始 状 态 而 为 I ,这 样 构 造 M 使 得 对 任 一 状
_
9
— —
态 q i ,{ 5 I 5( QQ S ) Q - } { 5 | S L S i } 因 此 M 识 别 L 。
0

c. 假 设 L 是 正 则 的 ,并 且 令 々 是 识 別 L 的 DFA 的 状 态 数。那 么 根 据 (a ) 可 知 L 的 指 数 的 最 大 值 为
k 。相 反 ,若 L 的 指 数 为 I 那 么 根 据 ( b) 可 知 它 被 有 々 个 状 态 的 DFA 识 别 ,因 而 是 正 则 的 。 为
了 证 明 L 的 指 数 是 接 受 它 的 最 小 DFA 的 大 小,假 设 L 的 指 数 恰 好 是 h 那 么,根 据 ( b ),存 在 一

-
个 接 受 L 的 々 状 态 DFA 。 这 是 最 小 的 DFA ,因 为 如 果 还 有 更 小 的 ,就 可 以 根 据 ( a ) 证 明 L 的
指 数 小 于 々。
1.50 a. 最 小 的 泵 长 度 为 4。串 0 0 0 在 语 言 中 但 不 能 被 抽 取 ,因 而 这 个 语 言 的 泵 长 度 不 是 3。如 果 5 的 长

r yZ ,其 中 x 是 0 0 0 , y 是 第 一 个 1 ,z 是 其
度 为 4 或 更 长 ,则 它 包 含 1 在 其 中 。通 过 将 s 划 分 为 : :
后 的 所 有 符 号 ,可 以 满 足 泵 引 理 的 三 个 条 件 。
b. 最 小 的 泵 长 度 为 1 。由 于 串 e 在 语 言 中 并 且 不 能 被 抽 取 ,因 而 泵 长 度 不 可 能 是 0。语 言 中 的 每 一
个 非 空 串 都 能 被 划 分 为 ocyzy 其 中 :
T 是 , 是 第 一 个 字 符 ,Z 是 剩 下 的 部 分 。该 划 分 满 足 泵 引

理的三个条件。
^
d. 最 小 泵 长 度 为 3。由 于 串 1 1 在 语 言 中 并 且 不 能 被 抽 取 ,因 而 泵 长 度 不 可 能 是 2 。设 s 是 在 语 言
中 长 度 至 少 为 3 的 串 。 如 果 s 由(T P O + P 生 成 ,并 且 5 以 0 或 1 1 开 始 ,写 作 s = x y z , 其 中
x=e ,:
y 是 第 一 个 符 号 ,z 是 5 的 余 下 部 分 。如 果 s 由 (T 1+ 0 + 1 * 生 成 ,并 且 > 以 1 0 开 始 ,写
作 s = xyz , 其 中 :
r=10, 是 下 一 个 符 号 ,z 是 s 的 余 下 部 分。按 这 种 方 式 划 分 5 可 以 证 明 它 能

1.51 b. 设 关
^
幻。可 以 观 察 到 S P10 * 1 *

够 被 抽 取 。如 果 s 由 1 0 1 生 成 ,可 以 将 其 写 成:r yZ,其 中 x = l ,y = 0 , z 是 5 的 余 下 部 分。这
种 划 分 给 出 了 抽 取 s 的 一 个 途 径。
*

々彡0 }。若 B 是 正 则 的 ,那 么 S 和 B f l O *

^
1 也 是 正 则 的 。 但 是 已 知 { 0klk \ k
*
0 } 不 是 正 则 的 ,因 而 B 不 是 正 则 的 。

_
另 一 种 选 择 ,直 接 用 泵 引 理 证 明 B 是 非 正 则 的 ,但 这 样 做 需 要 一 定 的 技 巧 。 假 设 B = {(T 1叫

^
m n ) 是 正 则 的 。令 为 泵 引 理 给 出 的 泵 长 度 。可 以 观 察 到 P! 不 出 现 在 从 1 到 A 的 所 有 整 数
中 ,其 中 户!= M f l )( /> 2 h" l 。串 s = 并且 UI 彡 户。这 样 泵 引 理 指 出 s 可 以
被 划 分 为 工:yz , 这 里 1= 0。 ,其 中 并 且
, y = 0b , z = 0c \ p p
- + 6 + c = 户。 设 / 为 串
^
a
其 中 户! /6。那 么 y = o々!,从 而 y+ = o6+ w , 并 且
1
。这 就 给 出
= 0 +印+ />! 乐 B ,矛 盾 。
5’ 户
第 2 章|
Introduction to the Theory of Computation , 3 e

上下文无关文法

上一章介绍了有穷自动机和正则表达式这两种不同但等价的描述语言方法 。虽然它们
能描述许多语言 ,但还有一些简单的语言不能用它们描述 ,如 { o”r h>o }。
本章介绍一种能力更强的描述语言数学模型 ,上 下 文 无 关 文 法 (context-free grammar ),
它能够描述某些应用广泛的具有递归结构特征的语言 。
在研究自然语言时 ,人们引人了上下文无关文法 。 例如 ,名词短语可以出现在动词短
语中 ,反之 ,动词短语也可以出现在名词短语中 ,因此在名词 、 动词 、 介词以及它们的短
语之间的关系中存在着自然的递归 ,上下文无关文法有助于整理并理解这些关系 。
上下文无关文法在程序设计语言的规范化及编译中有重要应用。程序设计语言的文法
犹如外语语法参考书 ,设计人员在编写程序设计语言的编译器和解释器时 ,常需先获取该
语言的文法 。 大多数编译器和解释器都包含一个语法分析器 ( parser ), 它在生成编译代码
或解释程序执行前 ,提取出程序的语义 。上下文无关文法使得构造语法分析器的工作变得
容易 ,某些工具甚至能根据文法自动地生成语法分析器 。
与上下文无关文法相关的语言集合称为上下文无关语言 ( context- free language )。它
包括所有的正则语言以及许多其他语言类 。本章将给出上下文无关文法的形式化定义 ,并
研究上下文无关语言的性质。 此外 ,还 将 介 绍 识 别 上 下 文 无 关 语 言 的 机 器 下 推 自 动 机
( pushdown automata ), 它使我们能够进一步地了解上下文无关文法的能力 。

2. 1 上下文无关文法概述

——
下面给出一个上下文无关文法的示例 ,称其为 G1 :
A 0A 1
A^ B
B #
一 个 文 法 由 一 组 替 换 规 则 ( substitution rule ) 组成 ,替 换 规 则 又 称 为 产 生 式 ( pro-
duction )。 每条规则占一行 ,由一个符号和一个字符串构成 ,符号和字符串之间用箭头隔
开 。符号称为变元 ( variable ), 字 符 串 由 变 元 和 另 一 种 称 为 终 结 符 ( terminal ) 的 符 号 组
成 。变元常用大写字母表示 ,终结符类似于输人字符 ,常用小写字母 、 数字或特殊符号表
示 。一个变元被指定为起始变元 ( start variable ) , 通常它出现在第一条规则的左边 。在上
述示例中 ,文法 G 有 3 条 规 则 ,A 和 B 是变元 ,其中 A 是 起 始 变 元 ,0 、 1 和 # 是终
结 符。
'
按照以下方法 ,能够根据文法生成其所描述的语言的每一个字符串。
1. 写下起始变元 。它是第一条规则左边的变元 ,除非另有指定 。
2. 取一个已写下的变元 ,并找到以该变元开始的规则 ,把这个变元替换成规则右边
的字符串。
3. 重复步骤 2 , 直到写下的字符串没有变元为止 。
第之章上下文无关文法 63

例如 ,文法 G 生成字符串 000 # 111。获取一个字符串的替换序列称为派生 ( derivation ) 0

文 法 Gi 生成字符串 000 # 111 的派生过程为


A => 0 A 1 =>00A 11 000Alll =z>000Blll
iz>
=>000 # 111
可 用 语 法 分 析 树 ( parse tree ) 更 加 形 象 地 描 绘 这 一 派 生 过 程 。 A

-用 上 述 方 式 生 成 的 所 有 字 符 串 构 成 该 文 法 的 语 言 ( lan
图 2 1 给出了 G 的一棵语法分析树 。 A

- A
guage of the grammar )。 用 L( Gi ) 表 示 文 法 Gi 的 语 言 ,可 以 A
看 出 能 够 用 上 下 文 无 关 文 法 生 成 的
B
语 言 称 为 上 下 文 无 关 语 言 ( CFL )。 为 方 便 起 见 ,在 描 述 一 个

- — —
if
上 下 文 无 关 文 法 时 ,对 左 边 变 元 相 同 的 规 则 采 用 缩 写 的 形 式 ,
比 如 ,A 0A1 和 A B 缩写成一行 A 0 A1|B , 符 号 “
-
图2 1 在文法 G 中关于
000 # 111 的语法分析树
表示 “ 或”。

— ——
下面是另一个上下文无关文法 (G2 ) 的 示 例 ,文法描述了一个英语片断 :
〈 句 子 > 〈 名词短语 〈
〉 动词短语 〉
〈 名词短语 〉〈 复合名词 〉
〈I 复合名词 〈
〉介词短语 〉

———
〈 动词短语 〉〈 复合动词 〉
〈I 复合动词 〈
〉介词短语 〉
〈 复合名词 〉
〈 介词短语 〉〈 介词 〉

——
〉名词 〉
〈 复合名词 〉〈 冠词 〈
1 动词 〈
〈 复合动词 〉〈 动词 > 〈 〉名词短语 〉
〈 冠词 〉 a|the
|girl丨flower
〈 名词 〉 boy


〈 动词 〉 |
^ touches |
likes sees
〈 介词 〉 with
文 法 G2 包含 10 个 变 元 (写 在 尖 括 号 内 的 词 汇)、 27 个终结符 ( 标准的英文字母加上
空格符 ) 和 18 条 规 则 。下 面 是 L( G2 ) 中 的 3 个 字 符 串 :
a boy sees
the boy sees a flower
a girl with a flower likes the boy
这些字符串都可以由文法 G2 派生出来 ,下面是第一个字符串的派生 :
〈 动词短语 〉
〈 名词短语 〉
〈 句子 〉1
〈 复合名词 〉
1 〈 动词短语 〉

=> < 冠词 〉〈 名词 〉
〈 动词短语 〉

=> a〈 名词 〉〈 动词短语 〉
=> a boy〈 动 词 短 语 〉
=> a boy〈 复 合 动 词 〉
=> a boy〈 动 词 〉
=> a boy sees
2. 1 . 1 上下文无关文法的形式化定义
下面将上下文无关文法 (CFG ) 的概念形式化。
64 第一部分自动机与语言

: Ji
4 上下文无关文法 ( context- free grammar ) 是 一 个 4 元 组 (VM R ,
S),且 _
1.V 是一个有穷集合 ,称为变元集 ( variables ) .
2.2 是 一 个 与 V 不相交的有穷集合 ,称为终结符集 ( terminals )。
3.尺是一个有穷规则集 ( rules ) , 每 条 规 则 由 一 个 变 元 和 一 个 由 变 元 及 终 结 符 组 成 的
字 符 串 构 成。
4.S G V 是起始变元 。
设 U ,V 和 w 是由变元及终结符构成的字符串 ,A
成 ( yield ) UWV ,记

其中々>0 ,则称 w 派生 ( derive!


, 记作 M
);

=
u >w i
果 ,或者存在序列
=> 2 => •••=> “ =>
W 是

Ai;。该 文 法 的 语 言 是
—V
w 是文法的一条规则 ,称
Ml

|
…,
, M2 ,

S
Uk ,使 得

0
MAI 生

在 文 法 Gi 中 ,V = { A ,
B },2 = { 0 ,
1,# } ,S = A ,
i? 是上面提到的示例中给出的 3 条规
则 。在 文 法 G2 中 ,

V = {〈 句子 〉 ,
〈 名词短语 〉 ,
〈 动词短语 〉

〈 介词短语 〉 ,
〈 复合名词 〉 ,
〈 复合动词 〉
〈 冠词 〉,
〈 名词 〉,
〈 动词 〉,〈 介词 〉}
2 = { a ,b ,
c,…,
z,
“ ”},符 号 “ ” 表 示 空 白 ,它 放 在 每 个 单 词 a 、 boy 等 的 后 面 ,将 单 词
分开 。
在描述一个文法时 ,通常只写出它的规则 。 岀 现 在 规 则 左 边 的 所 有 符 号 都 是 变 元 ,其
余的符号都是终结符 ,按 照 惯 例 ,起始变元是第一条规则左边的变元 。

2 . 1 .2 上下文无关文法举例

考虑文法 G3 = ( { S } ,{ a, _R ,S),其中规则集尺为 :
b} ,
S-^aSb | SS | e
该文法生成 abab ,aaabbb , aababb 等字符串 。如果把 a 看 作 左 括 号 “ (”,把 b 看作右括
号 “)”,可以看出 L( G3 ) 是所有正常嵌套的括号字符串构成的语言 。 注 意 规 则 右 部 可 能
是空串 £ o
考虑文法 G4 = ( V ,
2,R ,
〈 EXPR > ),其 中 V = 〈 ,TERM 〉
{ EXPR > 〈 , FAC-

TOR ) } , 2 = U ,+ ,
X, (,

——
)},规 则 尺 为 :
〈 EXPR > 〈 EXPR 〉+〈 TFRM〉 |〈 TERM 〉


< TERM ( TERM ) X FACTOR ) | ( FACTOR )
) (

〈 FACTOR 〉 ( 〈 EXPR > ) | a


文 法 G4 可以生成字符串 a + aXa 和 ( a + a ) Xa 0 它们的语法分析树在图 2 2 中给出 。 -
编译程序把用程序设计语言编写的代码翻译成另一种更适合机器执行的代码 。 编译程
序提取被编译代码的语义 ,这 一 过 程 称 为 语 法 分 析 ( parsing )。 在关于该程序设计语言的
上下文无关文法中 ,编译代码的意思可以用代码的语法分析树进行表达 。上下文无关语言
的算法将在后面的定理 7.U 和 问 题 7.22 中讨论分析 。
文 法 G4 描述程序设计语言中涉及算术表达式的一个片断 。 观 察 图 2 2 中 的 语 法 分 析 -
树 如 何 对 运 算 进 行 “分 组 ”。关 于 a + aXa 的 语 法 分 析 树 把 运 算 符 X 连 同 它 的 运 算 对 象
( 后 2 个 a ) 作为运算符 + 的一个运算对象 ,而在关于 (a + a ) Xa 的语法分析树中 ,分组方
第之章上下文无关文法 65

< EXPR
\
>
( TERM )
< EXPR > ( TERM )
/
< EXPR > ( FACTOR ) ( FACTOR )
〈 TERM 〉
( TERM )
< EXPRX( TERM )


( TERM )
( FACTOR ) ( FACTOR )
( TERM )
( FACTOR ) 〈 FACTOR 〉

'
FACTOR
( a +
\a
图 2- 2 关于字符串a + a X a 和 (a + a ) X a 的语法分析树
式 正 好 相 反 。这 种 分 组 方 式 符 合 标 准 的 乘 法 优 先 于 加 法 和 用 括 号 打 破 这 种 优 先 的 规 定 ,文
法 G4 的 设 计 体 现 了 这 种 优 先 关 系 。 *

2 . 1 .3 设计上下文无关文法
与 在 1 . 1 节 中 讨 论 有 穷 自 动 机 的 设 计 一 样 ,设 计 上 下 文 无 关 文 法 需 要 创 造 力 。因 为 读
者 更 习 惯 为 指 定 的 任 务 给 一 台 机 器 编 程 ,而 不 是 用 文 法 去 描 述 语 言 ,所 以 设 计 上 下 文 无 关
文 法 比 设 计 有 穷 自 动 机 更 加 棘 手 。当 你 面 对 构 造 一 个 CFG 的 问 题 时 ,可 以 单 独 使 用 或 混
合 使 用 下 述 技 巧。
首 先 ,化 繁 为 简 。解 决 几 个 较 简 单 的 问 题 常 常 比 解 决 一 个 复 杂 的 问 题 容 易 ,许 多 CFL
是 由 几 个 较 简 单 的 CFL 合 并 成 的 。 如 果 你 要 为 一 个 CFL 构 造 CFG ,而 这 个 CFL 可 以 分
成 几 个 较 简 单 的 部 分 ,那 么 就 把 它 分 成 几 部 分 ,并 且 分 别 构 造 每 一 部 分 的 文 法 。这 几 个 文


法 能 够 很 容 易 地 合 并 在 一 起 ,构 造 出 原 先 那 个 语 言 的 文 法 ,我 们 需 要 做 的 只 是 把 它 们 的 规
则 都 放 在 一 起 ,再 加 入 新 的 规 则 S &|S2|…|Sn 其 中 S Sz ,
…,S& 是 各 个 文 法 的 起 始
变 元。
例 如 ,为 得 到 语 言 { 0”1叫 rz>0 } U { l”0” U>0 } 的 文 法 ,先 构 造 语 言 { 0”l ”
|n>0 }
^
的文法
Si — OSi 11 e

—^
和 语 言 { 1 0 |77
W W
0} 的文法
S2 1S2 0|e
Si s , 得 到 所 求 的 文 法^
~

然后加上规则 S |2


:

Si |s2
Si OSil | e
S 2 ^ I S2 O | e ~

其 次 ,利 用 正 则 。 如 果 一 个 语 言 碰 巧 是 正 则 的 ,可 先 构 造 它 的 DFA ,再 构 造 它 的


CFG 就 容 易 了。通 过 下 述 方 法 可 以 把 任 何 一 台 DFA 转 换 成 等 价 的 CFG: 对 于 DFA 的 每
a )=々 是 DFA 中 的 一 个 转 移 ,则 把 规 则 亿
一 个 状 态 % ,指 定 一 个 变 元 尺 。如 果 5( i ,
aRj 加 入 CFG;如 果 % 是 DFA 的 接 受 状 态 ,则 把 规 则 Rt ^ e 加 入 CFG。设 g 是 DFA 的 。
起 始 状 态 ,则 取 私 作 为 CFG 的 起 始 变 元 。 可 以 验 证 所 得 到 的 CFG 生 成 的 语 言 与 DFA 识
别 的 语 言 相 同。
66 第一部分自动机与语言

再次 ,考察子串 。 某些上下文无关语言中的字符串有两个 “相互联系” 的子串 ,为了


检查这两个子串中的一个是否正好对应于另一个 ,识别这种语言的机器需要记住其中一个
子串的信息 ,而这个信息是无界的 。 例如 ,在语言 { 0 1 « U>0 } 中就岀现这种情况 , 为
^
以使用 R

了检查字符串中 0 的个数是否等于 1 的个数 ,机器需要记住 0 的个数 。对于这种情况 ,可
uRv 形式的规则 ,它产生的字符串中包含〃的部分对应包含 I;
最后 ,利用递归 。在更复杂的语言中 ,字符串可能包含一定的结构 ,而这种结构又递
归地作为另一种 (或者同一种) 结构的一部分出现 。例 2.3 生成算术表达式的文法中就有
的部分 。

这种情况 ,每次出现符号 a ,就会递归地出现一个用括号括起来的完整的算术表达式来替


换 。 为了得到这样的结果 ,把生成这种结构的变元放在规则中这种结构对应可能出现递归
的地方 。

2 . 1 .4 歧义性
有时在一个文法中能够用几种不同的方式产生岀同一个字符串 ,这样的字符串有几棵
不同的语法分析树 ,对应几个不同的含义 。 这样的结果对于某些应用可能是不希望见到
的 ,例如 ,对于程序设计语言 ,一个程序应该只有唯一的解释 。
如果文法以不同的方式产生同一个字符串 ,则称文法歧义地产生这个字符串。 如果一
个文法歧义地产生某个字符串 ,则称这个文法是歧义的 。例如 ,对于文法 G5 :

〈 EXPRHEXPR 〉〈 EXPR〉 +
〈 EXPR〉X < EXPR ) 丨(〈 EXPR 〉)|a
这个文法歧义地产生字符串 a + aXa 。图 2 3 给出它的两棵不同的语法分析树 。 -
< EXPR > ( EXPR )

< EXPR > \ < EXPR) < EXPR > >

( EXPR ) (EXPR ) 〈EXPR〉〈EXPR〉

图 2- 3 字 符 串 a + a X a 在 文 法 G5 中 的 两 棵 语 法 分 析 树

这个文法没有把握住通常的优先级关系 ,可能把 + 放在了 X 的前面 ,也可能反过来


把 X 放在了 + 的前面。而前面提到的文法 G 4 能产生相同的语言 ,但其产生的每一个字符
串只有一棵唯一的语法分析树 。因此 ,G4 是非歧义的 ,而 G5 是歧义的 。
本节幵始部分给出的文法 G2 是歧义文法的另一个例子 。 句子 “ the girl touches the
boy with the flower” 有两个不同的派生 。在练习 2.8 中要求给出它的两棵语法分析树 ,
并且观察用这两种方式读这个句子时其表达的含义之间的关系 。
现在把歧义性的概念形式化 ,一个文法歧义地产生一个字符串的意思是指 :该字符串
有两棵不同的语法分析树 ,而不是两种不同的派生 ,两种不同的派生可能仅仅是替换变元
的次序不同 ,而不是整个结构的不同 。为了专注于结构 ,定义一种以固定次序替换变元的
派生类型 ,对于文法 G 中的一个字符串加的派生 ,如果在每一步都是替换最左边剩下的
变元 ,则 称 这 个 派 生 是 最 左 派 生 ( leftmost derivation ) 在 前 面 定 义 2.1 中给岀的派生是
0

一个最左派生 。
如果字符串 w 在上下文无关文法 G 中有两个或两个以上不同的最左派
生 ,则 称 G 歧 义 地 ( ambiguously ) 产 生 字 符 串 w ,如 果 文 法 G 歧 义 地 产 生 某 个 字 符 串 ,
第/ 章 上 下 文 无 关 文 法 67

则 称 G 是 歧 义 的 ( ambiguous )。
有 时 对 于 一 个 歧 义 文 法 能 够 找 到 一 个 产 生 相 同 语 言 的 非 歧 义 文 法 。但 是 ,某 些 上 下 文
无 关 语 言 只 能 用 歧 义 文 法 产 生 ,称 这 样 的 语 言 为 固 有 歧 义 的 ( inherently ambiguous )。问
题 2.4 1 要 求 证 明 语 言 U =)或)= 幻 是 固 有 歧 义 的 。
2. 1 . 5 乔姆斯基范式
在 使 用 上 下 文 无 关 文 法 时 ,简 化 的 形 式 往 往 更 为 方 便 ,一 种 最 简 单 、 最 有 用 的 形 式 称
为 乔 姆 斯 基 范 式 。在 第 4 章 和 第 7 章 中 ,当 设 计 使 用 上 下 文 无 关 文 法 的 算 法 时 ,将 会 发 现
乔 姆 斯 基 范 式 的 用 途。
@0 0© 称 一 个 上 下 文 无 关 文 法 为 乔 姆 斯 基 范 式 ( Chomsky normal form ),如 果
它的每一个规则具有如下形式:


A BC
A-^ a


其 中 , 是 任 意 的 终 结 符 ,A 、 B 和 C 是 任 意 的 变 元 ,且 B 和 C 不 能 是 起 始 变 元 。 此 外 ,

允许规则 S ,其 中 S 是 起 始 变 元 。
任 一 上 下 文 无 关 语 言 都 可 以 用 一 个 乔 姆 斯 基 范 式 的 上 下 文 无 关 文 法 产 生。
证 明 思 路 可 以 将 任 一 上 下 文 无 关 文 法 G 转 换 成 乔 姆 斯 基 范 式 ,转 换 时 分 几 个 阶 段 把

— —
不 符 合 要 求 的 规 则 替 换 成 等 价 的 符 合 要 求 的 规 则 。首 先 ,添 加 一 个 新 的 起 始 变 元 ,然 后 ,
删除所有形如 A e的 规 则 ,再 删 除 所 有 形 如 A B 的 单 一 规 则 。在 删 除 时 ,要 对 文 法

-—
做 适 当 的 弥 补 ,以 确 保 仍 然 产 生 相 同 的 语 言。最 后 ,把 所 有 留 下 来 的 规 则 转 换 成 适 当 的
形 式。
证 明 首 先 ,添 加 一 个 新 的 起 始 变 元 SQ 和 规 则 S0 S , 其 中 S 是 原 来 的 起 始 变 元。
这样可以保证起始变元不出现在规则的右边。


第 二 阶 段 ,考 虑 所 有 的 e 规 则 。删 除 一 条 e 规 则 A e ,这 里 A 不 是 起 始 变 元 ,然 后 对
在 规 则 右 边 出 现 的 每 一 个 A ,删 去 这 个 A 后 得 到 一 条 新 的 规 则 。换 言 之 ,如 果 R 是

―— —— —
一 条 规 则 ,其 中 和 是 变 元 和 终 结 符 的 字 符 串 ,则 添 加 规 则 。对 A 的 每 一 次 出 现

^
M ⑽


都 如 此 进 行 ,因 而 对 于 规 则 尺 要添加 i? MATW 和 UVZV 。 如 果

有 规 则 i? A ,则 要 添 加 i? e ,除 非 前 面 已 经 删 除 过 规 则 R e 。重 复 进 行 上 述 步 骤 ,直 至


删 除 所 有 不 包 括 起 始 变 元 的 e 规 则。

——
第 三 阶 段 ,处 理 所 有 的 单 一 规 则 。删 除 一 条 单 一 规 则 A B , 然 后 ,只 要 有 一 条 规 则


B u ,就 要 添 加 规 则 A w ,除 非 是 已 在 前 面 被 删 除 的 单 一 规 则 。 和 前 面 一 样 ,1 是
变 元 和 终 结 符 的 字 符 串 。重 复 上 述 步 骤 ,直 至 删 除 所 有 的 单 一 规 则 。
^
最 后 ,把 所 有 留 下 的 规 则 转 换 成 适 当 的 形 式 。把 每 一 条 规 则 替 换 成 规 则
A ^ U \ A\ , A\ — A2 A2 M3 A3 , , Ak -2 ^ U k -\ U k 其 中 々>3 , 每 一 个 w 是 一 个 变 元 或 终
~ 鲁 參 參

结 符 ,A 是 新 的 变 元。用 新 变 元 L7, 替 换 上 面 规 则 中 的 终 结 符 ,并 增 加 规 则 认 ■ 10

dBD 设 G6 是 下 述 CFG ,用 刚 才 给 出 的 转 换 过 程 把 它 转 换 成 乔 姆 斯 基 范 式 。下 面
用 一 系 列 文 法 规 则 说 明 转 换 的 步 骤 ,其 中 用 黑 体 写 的 规 则 是 新 添 加 进 来 的 规 则 ,用 带 阴 影
的 字 写 的 规 则 是 刚 刚 删 掉 的 规 则。
1. 原 先 的 CFG G6 在 左 边 给 出 。运 用 第 一 步 引 入 新 起 始 变 元 后 得 到 的 结 果 在 右 边 显 示 。
68 第一部分自动机与语言

— — S ASA | aB
A B|S
ASA | aB
A -* B \ S
SQ
S
S

- —
B —^ b|£


B b|e
^
2. 左边给岀删除 e 规 则 后 的 结 果 ,右 边 给 出 删 除 A e 后的结果 。


S0 S S0 S
S ASA aB a| | S^ASA | aB | a | 5A | A5|S

—— —
A-^ B \ S \ s A B|S k


B b|e B^ b
3a. 左边给出删除单一规则 S S 后的结果 ,右边给出删除 So S 后的结果 。


S0 S S 0 -^ S \ A S A \ B \ a \ S A \ A S^
S-^ASA | aE | a | SA | AS|S S^ ASA \ aB \ a \ SA\ AS
A-^ B \ S A JB | S

— —
B-^ b B b

— ——
3 b. 删除单一规则 A B 和 A S。
S0 -^ ASA | aB | a | SA | AS S0 a SA | AS
ASA|aB||

— —
S ASA | aB | a | SA | AS S ASA|aB|a|SA | AS
A B\ S \ b A-^ S \ b \ A S A \ ^B \ ^ \ S A \ A S
b B b
4. 添 加 新 的 变 元 和 规 则 ,把 留 下 的 所 有 规 则 转 换 成 合 适 的 形 式 。最 后 得 到 的 符 合 乔

S0
— —— — — — — —
姆 斯 基 范 式 的 文 法 等 价 于 G6 。( 按 照 定 理 2.6 证 明 中 的 转 换 过 程 ,应 把 S
AAi 和 A! SA; 把 S
ASA 替 换 成 S AA 2 和 A 2 SA; 把 A ASA 替 换 成 A
AA 3 和 A 3 SA 。其 中 AH A 2 和 A 3 是 新 引 入 的 变 元 ,这 里 作 了 化 简 ,把 A:,A 2 和 A 3
合并成一个变元并将这些规则以 U a 表示。 译者注 )

。 ASA 替 换 成

S0 AAi|LTB|a | SA | AS
S AAi|; t B | a|SA|AS
A b | AAi|l/B | a|SA|AS ——
-
^

2.2 下推自动机
Ai
U^

B —^ b
SA

本节介绍一种称为下推自动机 ( pushdown automata ) 的计算模型 ,它很像非确定型


有穷自动机 ,但是它有一个称为桟 (stack ) 的额外设备 。栈在控制器的有限存储量之外提
供了附加的存储 ,使得下推自动机能够识别某些非正则语言。
下推自动机在能力上与上下文无关文法等价 。因此 ,在证明一个语言是上下文无关的
时候 ,有两种选择 :可以给出生成它的上下文无关文法 ,或者给出识别它的下推自动机 。
某些语言用文法生成器描述要容易些 ,另一些用自动机识别器描述更容易 。
-
图 2 4 是一台有穷自动机的示意图 ,控制器表示状态和转移函数 ,带子存放输入字符
弟2 章 上 下 文 无 关 文 法 69

串 ,箭 头 表 示 输 人 头 位 置 ,它 指 向 下 一 个 要 读 的 输 入 符 号。
如 果 在 此 基 础 上 加 一 个 栈 ,我 们 得 到 一 台 下 推 自 动 机 的 示 意 图 ,如 图 2 5 所 示 。 -
状态
控制器 a b b 输人

状态 找
控制器 a a b b 输人

图 2- 4
— 台有穷自动机的示意图 -
图2 5
— 台下推自动机的示意图

下 推 自 动 机 ( PDA ) 能 够 把 符 号 写 到 栈 上 并 在 随 后 读 取 它 ,向 栈 中 写 入 一 个 符 号 将 把
栈 中 其 他 的 所 有 符 号 “下 推”。在 任 何 时 刻 ,可 以 读 和 删 去 栈 顶 的 符 号 ,其 余 的 符 号 向 上
移 动 。向 栈 写 一 个 符 号 ,常 常 称 为 推 入 ( pushing ) 这 个 符 号 ,而 删 除 一 个 符 号 称 为 弹 出
它 。需 要 注 意 的 是 ,对 栈 的 所 有 访 问 ,无 论 读 写 ,都 只 能 在 栈 顶 进 行 ,换 言
( popping )

之 ,栈 是 一 个 “先 进 后 岀” 的 存 储 设 备 。如 果 把 某 个 信 息 写 到 栈 上 ,然 后 又 把 另 外 一 些 信
息 写 到 栈 上 ,那 么 前 面 写 的 信 息 变 成 不 可 访 问 的 ,一 直 到 在 其 后 面 写 人 的 信 息 全 部 被 删 除
为 止。
可 以 用 自 助 餐 厅 服 务 台 上 的 盘 子 来 解 释 栈 ,一 叠 盘 子 放 在 弹 簧 上 ,把 一 个 新 盘 子 放 在
这 叠 盘 子 的 顶 上 时 ,它 下 面 的 盘 子 依 次 向 下 移 动 ,下 推 自 动 机 的 栈 就 像 一 叠 盘 子 ,每 个 盘
子 上 写 着 一 个 符 号。
栈 的 作 用 体 现 在 它 能 保 存 无 限 的 信 息 量 。有 穷 自 动 机 ( DFA ) 不 能 用 它 的 有 限 存 储 保
存 大 数 据 量 的 字 符 串 ,所 以 它 不 能 识 别 语 言 { 0 1叫〃>0 } ,而 PDA 可 以 用 栈 保 存 它 看 见
的 0 的 个 数 ,从 而 能 够 识 别 这 个 语 言 ,因 此 ,栈 的 无 界 性 使 得 PDA 能 够 保 存 大 小 没 有 限
制 的 数 。下 面 非 形 式 化 地 描 述 关 于 语 言 { 0”1叫 n>0 } 的 PDA 如 何 工 作 :
读 取 输 入 串 的 符 号 ,每 读 一 个 0 , 把 它 推 入 栈 ,一 旦 看 见 1 之 后 ,每 读 一 个 1 ,把 一
个 0 弹 出 栈 ,当 栈 中 的 0 被 清 空 时 恰 好 读 完 输 入 串 ,则 接 受 这 个 输 入 。 如 果 在 还 有 1 没 有
读 的 时 候 栈 已 变 空 ,或 者 在 栈 中 还 有 0 的 时 候 1 已 经 读 完 了 ;或 者 0 出 现 在 1 的 后 面 ,则
拒 绝 这 个 输 入。
下 推 自 动 机 可 以 是 非 确 定 型 的 ,确 定 型 下 推 自 动 机 与 非 确 定 型 下 推 自 动 机 在 语 言 识 别
能 力 上 不 相 同 。在 2 . 4 节 ,我 们 将 看 到 一 些 非 确 定 型 下 推 自 动 机 能 识 别 但 确 定 型 下 推 自 动
机 不 能 识 别 的 语 言 。我 们 将 在 例 2 . 1 0 和 例 2 . 1 1 给 出 需 要 非 确 定 型 自 动 机 才 能 识 别 的 语
言。确 定 型 有 穷 自 动 机 与 非 确 定 型 有 穷 自 动 机 能 识 别 相 同 的 语 言 ,但 对 于 下 推 自 动 机 却 有
区 别 。由 于 非 确 定 型 下 推 自 动 机 等 价 于 上 下 文 无 关 文 法 ,所 以 我 们 集 中 讨 论 非 确 定 型 下 推
自 动 机。

2.2. 1 下推自动机的形式化定义
除 栈 之 外 ,下 推 自 动 机 的 形 式 化 定 义 类 似 于 有 穷 自 动 机 。 栈 是 一 个 存 放 符 号 的 设 备 ,
这 些 符 号 取 自 某 个 字 母 表 。机 器 对 于 它 的 输 人 和 栈 ,可 以 使 用 不 同 的 字 母 表 ,因 此 需 要 同
时 指 定 一 个 输 人 字 母 表 2 和 一 个 栈 字 母 表 r。
任 何 自 动 机 的 形 式 化 定 义 的 核 心 都 是 转 移 函 数 ,因 为 要 用 它 描 述 自 动 机 的 动 作 。 给 定
re
= rUU },转 移 函 数 的 定 义 域 为 QX 2 exre
。于 是 ,在 当 前 状 态 下 ,下 一
70 第一部分自动机与语言

个读到的输入符号和栈顶的符号决定了下推自动机的下一个动作 。这两个符号都可以是 ,
使机器能够在不读输入符号或者不读栈中符号的情况下做动作 。
关于转移函数的值域 ,需要考虑在特定情形下允许自动机做什么 。 它能够进入某个新
的状态并可能在栈顶写入一个符号 。通过返回 Q 的 一 个 成 员 和 的 一 个 成 员 ,即 Q X A
的一个成员 ,函数 5 可以指出这个动作 。由于在这个模型中允许非确定性 ,所以可能有若
干个合法的下一个动作 ,转移函数通过返回 Q x r e 的一个子集 ,即 p( Q x r e ) 的 一 个 成 员
来体现转移动作的非确定性 。 所有这些子集合并在一起 ,得到转移函数 5 的形式为
xre
_
Q x i£ -^ P ( Q x r£ ) o

2,
下 推 自 动 机 ( pushdown automaton ) 是 6 元 组 ( Q , 5, ,
T, F ),这 里
Q, r
2, 和 F 都 是 有 穷 集 合 ,并 且
1.Q 是 状 态 集 。
2 . 2 是 输 入 字 母 表。
3.r 是 栈 字 母 表 。
A . 8:Q X I e X r e^ P ( Q X r e ) 是 转 移 函 数 。
5.g0 6 Q 是 起 始 状 态 。
6.FGQ 是 接 受 状 态 集 。
一台下推自动机 M=( Q,
2,r,5,
%,F) 的计算过程如下 :它接受输人 tt,
,如果能够
把 写 成 VO — UUi ,这里每一个叫d ,并且存在状态序列 ro * n ,
… ,厂讲 6 Q 和

-
1V 2 •••

字符串序列 50 ,5!, ,5w e r *


满 足 下 述 3 个 条 件:
. 0 =% 且
1「 5() = ,该条件表示 M 从起始状态和空栈开始 。
2. 对于 = 0 , m — 1 ,有 ( r t + 1 ,

^
…, b ) 65( n ,
叫 +1 ,
a ),其中 b:

^
Si = at ^ Si ->r \ = bt ,
a, 1\
和〖 er 该条件说明 M 在每一步都完全按照当时的状态 、 栈顶符号和下一个输入符号
动作 。 '
3. 该条件说明在输人结束时出现一个接受状态 。
则 字 符 串 & 是 M 在计算的接受分支中的栈内容序列 。

-
2 . 2. 2 下推自动机举例

F 面是前面描述的识别语言 {0 P U>0 } 的 P D A 的 形 式 化 定 义 。令 =
( Q ,2 , r , ,9l ,F ) , 其 中

^ Q—{ ,
2= { 0 ,
92 ,
1}
93 ,

r= { o , $ }

%}
%}

5 由下表给岀 ,表中空白项表示 0 。
输入 o
栈 0 $ 0 $ 0 $
9i {( % ,$ )}

92 {( <?2 ,
0 )} {( 93 ,
e )}
93 {( % ,)} { ( qA » e ) }
94
_
系夕章上下文无关文法 71

- -


也可以用状态图描述 PDA ,如图 2 - 6 和图 2 7 、 图 2 8 所示 。这种图类似于描述有穷
自动机的状态图 ,但要做一些修改 ,使得它能说明 PDA 在从一个状态转移到另一个状态
时如何使用栈 。 用 “ a ,b c” 表示当机器从输人中读到 a 时
可以用 c 替换栈顶的符号 6 。a 、 6 和 c 中的任何一个都可以是
0 如 果 a 是 e ,则机器做这个转移 ,而不读取输入中的任何符
0
号 。如果 6 是 e ,则机器做这个转移 ,而不读栈中的任何符号 ,
也不从栈中弹岀任何符号 。 如果 c 是 e ,则机器做这个转移 ,
而不在栈中写任何符号 。
PDA 的形式化定义没有提供检验空栈的直接手段 。 这台 图 2 - 6 识 别 { O n l n |n O ) ^

PDA 开始把一个特殊符号 $ 放人栈中 ,就能够起到检验空
栈的作用 ,当机器再次看见 $ 时 ,就知道栈实际上已经空了。今后 ,在 PDA 的非形式化
的 PDAM! 的 状 态 图

描述中用这种方法判断空栈 。
类似地 ,PDA 不能直接检验是否到达输人的末端 ,对于这台 PDA ,只有当它位于输
入的末端时 ,接受状态才起作用 , 这就能够起到同样的效果 。 于是 ,从现在起 ,假设
PDA 能够检验是否到达输入的末端 ,并且可以用这种方式实现 。
这个例子给出一台识别下述语言的 PDA M2 :
{ a ' b j ck \ i , j ,
々>0 且 i = j 或 f =々}
非形式化地表示 ,识别该语言的 PDA 先读 a ,并且把 a 推入栈 。当读完 a 时 ,机器把它们
全部放到栈中 ,以便能够把它们与 b 或 c 进行匹配 。 由于机器不知道下面 a 是与 b 匹配还
是与 c 匹配 ,需要想点办法 ,在这里迟早要用到非确定性 。
利用非确定性 ,这台 PDA 可以猜想 a 是与 b 匹配还是与 c 匹配 ,如图 2 - 7 所示 。设
想机器有两个非确定性的分支 ,每一种可能的猜想是一个分支 。如果有一个匹配成功 ,则
对应的分支接受 ,从而整个机器接受 。问题 2.27 要求证明非确定性是用 PDA 识别这个语
言所不可缺少的 。

C,$~
《3 >

e, e—►$
e, $
H ^ 5

图 2- 7 PDA M2 的 状 态 图 ,M2 识 别 且 纟=) 或 ;


=々}

给出一台识别语言 { vuw l e { o ,i } #
} 的 P D A M3 。注 意 表 示 倒 写 的
VU 。 这台
PDA 的非形式化描述和状态图如下 :
^
开始时 ,把读到的符号推入栈中 ,在每一步非确定性地猜想已经到达字符串的中点 ,
然后变成把读到的每一个符号弹岀栈 ,检查在输入中和在栈顶读到的符号是否一样 。如果
它们总是一样的 ,并且当输人结束时栈同时被清空 ,则接受 ;否则拒绝 。
72 第一部分自动机与语言

这台机器的状态图如图 2 8 所示 。 -
问题 2.28 证明识别这个语言需要一台非确定型 PDA。

2 . 2. 3 与上下文无关文法的等价性
本节证明上下文无关文法与下推自动机在能力上是等
价的 ,它们都能够描述上下文无关语言类 。下面要说明如
何把任意一个上下文无关文法转换成能识别相同语言的下
推自动机 ,以及反过来把任意一台下推自动机转换成产生
相同语言的上下文无关文法 。由前面的定义可知上下文无 图2 8- P D A M3 的 状 态 图 ,

关语言是能用上下文无关文法描述的语言 ,因此本节的目
识别 < Ue { o ,i > * }

标是证明下述定理 。
織胁册4 一 个 语 言 是 上 下 文 无 关 的 ,当 且 仅 当 存 在 一 台 下 推 自 动 机 识 别 它 。
和通常对待 “当且仅当” 型定理一样 ,有两个方向要证明 ,在本定理中 ,这两个方向
都是很有意思的 ,首先证明比较容易的从左到右的方向 。
tetljjiiili 如 果 一 个 语 言 是 上 下 文 无 关 的 ,则 存 在 一 台 下 推 自 动 机 识 别 它 。
证 明 思 路 设 A 是一个 CFL,根据定义 ,存在一个 CFG G 产生它 。我们要说明如何
把 G 转换成一台等价的 PDA P。
通过确定是否存在关于输人 w 的派生 ,当 G 产生 w 时 ,PDA P 接受这个输人 。记得
派生就是当文法产生一个字符串时所做的替换序列 ,派生的每一步产生一个变元和终结符
的中间字符串 (intermediate string )。设计 P ,以确定是否有一系列使用 G 的规则替换 ,
能够从起始变元导出 uu 0

检验是否有关于 w 的派生的困难在于判断要做的替换 ,PDA 的非确定性使得它能够


猜想出正确的替换序列 ,在派生的每一步 ,非确定地选择关于某个变元的一条规则 ,并且
对这个变元做替换 。
PDA P 开始时把起始变元写入它的栈 ,一个接一个地做替换 ,经过一系列的中间字
符串 ,最终它可能到达一个仅含有终结符的字符串 ,这表示它用文法 G 派生出一个字符
串 。 如果这个字符串与它接收到的输人相同 ,则 P 接受它 。
在 PDA 上实现上述策略还需要再想点办法 ,需要知道当 PDA 步一步地进行时 ,它
如何存储中间字符串。直接使用栈存储每一个中间字符串是一个诱人的想法 ,但是 ,这个

想法是行不通的 ,因为 PDA 必须找到在字符串中的变元并且对它作替换 ,但 PDA 只能够
访问栈顶符号 ,它可能是一个终结符 ,而不是变元 。解决这个问题的方法是在栈中只保存
中间字符串的一部分 :中间字符串中从第一个变元开始的所有符号 。第一个变元前面的终
结 符 都 恰 好 与 输 人 串 中 的 符 号 匹 配 。图 2 9 给 出 - 控制器
PDA P。 A

P 的非形式描述如下 : A
1. 把标记符 $ 和起始变元放人栈中。
$
2. 重复下述步骤 : 0 1 A 1 A 0

a. 如果栈顶是变元 A ,则非确定地选择一个关于 图 2- 9 P 表示中间字符串


A 的规则 ,并且把 A 替换成这条规则右边的 01 A 1 A 0 的 方 式
第夕章上下文无关文法 73

字 符 串。
b. 如 果 栈 顶 是 终 结 符 a ,则 读 取 下 一 个 输 人 符 号 ,并 且 把 它 与 a 进 行 比 较 。如 果 它 们
匹 配 ,则 重 复 ,如 果 它 们 不 匹 配 ,则 这 个 非 确 定 性 分 支 拒 绝 。
c. 如 果 栈 顶 是 符 号 $ ,则 进 入 接 受 状 态 ,如 果 此 刻 输 入 已 全 部 读 完 ,则 接 受 这 个 输
入 串。
2,
证 明 下 面 形 式 化 地 给 出 下 推 自 动 机 P =( Q , r,d ,gstavF) 的 构 造 细 节 。为 使 构 造
更 清 楚 一 些 ,采 用 一 种 缩 写 记 号 表 示 转 移 函 数 ,用 这 种 记 号 方 式 ,机 器 能 够 一 步 把 一 个 字
符 串 写 人 栈 内 。同 时 引 人 附 加 的 状 态 ,实 现 每 次 写 入 这 个 字 符 串 的 一 个 符 号 ,从 而 模 拟 出
一 次 写 入 字 符 串 的 动 作 。在 下 述 形 式 构 造 中 实 现 了 这 样 的 模 拟 。
设 9 和 r 是 PDA 的 状 态 ,a 属 于 2e ,s 属 于 re 。我 们 要 求 PDA 读 a 并 且 弹 出 5 时,
从 g 到 r ,而 且 要 它 同 时 把 整 个 字 符 串 W 推 入 栈 。可 以 如 下 完 成 这 个 动 作 :引 入 新
的状态 % ,
•• ,
力一 1 ,并 且 令 转 移 函 数 如 下 :

,,) { (
_包含(9 I

^ 2 > W/
— l )}
S( Q 2 ^ = { ( q3 9 u i - 2 ) }

— i ,£ ,£ ) {( ,
Wi ) }
使 用 记 号 表 示 当 g 是 P 的 状 态 ,a 是 下 一 个 输 人 符 号 以 及 s 是 栈 顶
符 号 时 ,PDA P 能 够 读 a 和 弹 出 5 , 然 后 把 字 符 串 w 推 人

——
q l a, s—^ z
-
栈 和 转 移 到 状 态 r 。图 2 1 0 形 象 地 描 述 了 这 个 动 作 的
© A
实 现。 a , s^ xyz => e,e y
P 的 状 态 集 Q = { 9start ,Ql。


。,9accept } UE , 这 里 E 是 实
现 刚 才 描 述 的 缩 写 所 需 要 的 状 态 集 合 ,开 始 状 态 为 qstari , e,e x
只有一个接受状态 ga pt 。

^
转 移 函 数 定 义 如 下 。从 初 始 化 栈 开 始 ,把 符 号 $ 和 5 图 2 - io 缩写 ( m : )e
推 人 栈 ,实 现 步 骤 1 的 非 形 式 描 述 是 : ( gstart , a,
diq , s) 的 实 现
^
^
e
然 后 进 行 步 骤 2 主 循 环 中 的 转 移。
首 先 ,处 理 情 况 (a ),这 时 栈 顶 是 一 个 变 元。令
中 的 一 条 规 则 }。
其 次 ,处 理 情 况 ( b ),这 时 栈 顶 是 一 个 终 结 符 。令
最 后 ,处 理 情 况 ( c ), 这 时 栈 顶 是 空 栈 标 记 符 $ 。令 (?( glcK p ,
e ,$ )= { ( gaccept ,
e) } o )

-
图 2 1 1 给 出 了 P 的 状 态 图。 m
利 用 在 引 理 2.1 3 中 开 发 的 过 程 ,
e,E— S$
把 下 述 CFG G 转 换 成 一 台 PDA Pi
^

S aTb | b -
0

,A ^W
£
— 对于规则 > VV

^
^
loop

T Ta | e
a,a — 对于终结符 a

-
转 移 函 数 如 图 2 1 2 所 示。 ■

下 面 证 明 定 理 2 . 1 2 的 反 方 向 。对 于 正 方 向 我
们 给 出 一 个 把 CFG 转 换 成 PDA 的 过 程 ,主 要 思 想 图 2- 1 1 P 的状态图
74 第一部分自动机与语言

— 0 0

^^
e, S >b
0 , a

^ loop

e, $ — —
e, 5 ►b

b, b —

-
图 2 12 & 的状态图

是设计自动机 ,使得它模拟文法 。现在要给出一个以相反方式进行的过程 : 把 PDA 转换


成 CFG ,设计模拟自动机的文法 。这项工作更具挑战性 ,“ 程序设计” 一台自动机比 “ 程
序设计” 一个文法容易 。
如 果 一 个 语 言 被 一 台 下 推 自 动 机 识 别 ,则 它 是 上 下 文 无 关 的 。
证 明 思 路 现 有 一 台 PDA P ,要构造一个 CFG G ,它产生 P 接受的所有字符串 。换
言之 ,如果一个字符串能使 P 从它的起始状态转移到一个接受状态 ,则 G 应该产生这个
字符串。
为了获得这个结果 ,我们设计一个能做更多事情的文法 。对于 P 的每一对状态 p 和
q , 文法有一个变元 A 。它产生所有能够把 P 从 户 和 空 栈 一 块 带 到 g 和空栈的字符串。
~
可以看出不管栈的内容在状态 P 时是什么 ,这样的字符串也能够把 P 从 p 带到 并且保
持栈的内容在状态 g 和在状态

1. 有唯一的接受状态 gaccept
/>
首先 ,为了简化工作 ,对 P 作轻微修改 ,使其具有以下三个特点 :
时一样 。

°
^
2. 在接受之前清空栈 。
3. 每一个转移把一个符号推人栈 (推入动作 ),或者把一个符号弹出栈 ( 弹出动作 ),
但不同时做这两个动作 。
使 P 具有特点 1 和特点 2 较容易 ,使 P 具有特点 3 就要把每一个同时弹出和推入的转
移替换成两个转移 ,中间要经过一个新的状态 ;把每一个既不弹出也不推入的转移替换成
两个转移 ,先推入任意一个栈符号 ,然后再把它弹岀 。
要设计 G ,使 得 产 生 把 P 从 p 带到 g 并且以空栈开始和结束的所有字符串 ,必须
了解 P 对这样的字符串如何运行 。对于任何一个这样的字符串:r ,因为 P 的每一个动作或
者是推入或者是弹出 ,但是对空栈不能弹出 ,所以 P 对:r 的第一个动作一定是推入 。类似
地 ,因为在结束时找是空的 ,所以对的最后一 个动作一 定是弹出 。 *

在 P 对:r 的计算过程中可能出现两种情况 :仅在计算的开始和结束时 ,栈可能是空


的 ;或者除开始和结束时之外 ,在计算中的某个地方 ,栈变成空的 。 如果是前一种情况 ,
最后弹出的符号一定就是开始时推人的那个符号 。用规则 A d b 模拟前一种情况 ,
其中 a 是在做第一个动作时读到的输入符号 ,6 是在做最后一个动作时读到的输入符号 ,r
是跟在 P 后面的状态 ,s 是 的 前 一 个 状 态 。用 规 则 模 拟 后 一 种 情 况 ,其 中 r
第夕 章 上 下 文 无 关 文 法 75

是栈在计算中间变成空的时候的状态 。
i:,
证明设 P = ( Q, 。
r ,(5,g ,{ gaccept }),要构造 G。G 的变元集是 { A p J g G Q },起
始变元是 A % ,%c 。 下面三点描述了 G 的规则:
1. 对每一个 /> ,g,
cepl

r, Q, 和a, wer
6 2e ,如果 3( /? ,
a, e
e ) 包 含 0, S,
M ) 且 3( 、 6 ,W )
^
——
6

包含 ( q ,
e ),则把规则 aAri 6 放人 G 中 。
2. 对 每 一 个 把 规 则 A內 AprA 放 入 G 中 。
3. 最 后 ,对 每 一 个 / 把 规 则 Ap/ e 放入 G 中 。 )

-
可以从图 2 13 和图 2 - 14 获得一些关于这个构造的直觉 。

栈髙度
一 由 产 生
/

输入串
>

产生
由儿, 由<产生

图 2- 1 3 对 应 规 则 的 PDA 计 算

栈髙度
-一 由 产 生
输入串

由 产 生

图 2- 1 4 对应规则 AN ^ aAnb 6<J PDA 计 算

下 面 证 明 产 生:r 当且仅当:r 能够把 P 从状态户和空栈一块带到状态 g 和空栈 ,从


而证明上述构造是正确的 。 把当且仅当条件中的每一方向作为一个单独的断言。
如果 A 勿 产 生:r ,则 x 能 够 把 P 从 户 和 空 栈 一 块 带 到 g 和 空 栈 。
通 过 对 从 到 x 的派生步数进行归纳来证明这个断言 。
归纳基础派生只有一步 。


只有一步的派生一定使用一条右端不含变元的规则 。在 G 中右端不出现变元的规则只
能是 AM e 。显然 ,输人 e 把 P 从 f 和空栈带到户和空栈 ,从而证明了归纳基础 。
归 纳 步 骤 假 设 断 言 对 长 度 不 超 过 6 的 派 生 成 立 ,其 中 下 面 证 明 断 言 对 长 度 为
々+ 1 的派生也成立 。
假设 A r 使用々+ 1 步 。 该派生的第一步是 A内 =>a A 劝或
4: ,分别处理
这两种情况 。 ~
对于第一种情况 ,根据:r 中由 Ar5 产生的部分),有:r = a ,因为 Ar54 y 使用々步 ,
>
76 第一部分自动机与语言

根据归纳假设 ,P 能够从 r 和 空 栈 一 块 转 移 到 5 和 空 钱 。 因 为 aA 幼 是 G 的 一 条 规
则 ,故对某个栈符号 G ,S( p 9 a ,e ) 包 含 ( r,M ) 和 5( 5 ,6,M ) 包 含 ( q,e )。于是 ,如 果 P
从 状 态 和 空 栈 开 始 ,那么在读到 a 后 ,它 能 够 转 移 到 状 态 r,并且把 w 推 入 栈 顶 。 然 后
读把它带到 并 且 在 栈 中 留 下 心 接 着 在 读 到 6 后 ,它 能 够 转 移 到 & 并 且 把 a 弹 出

^
栈。因 此 ,I 能够把 P 从 p 和空栈带到 g 和 空 栈 。
对于第二种情况 ,根据:r 中 由 和 Aq 分别产生的部分 3/ 和 有:r =3 。因为
和 都 不 超 过 々 步 ,根 据 归 纳 假 设 ,J 能够把 P 从 P 带到 r ,z 能够把 P 从 r 带到心
并且在派生的开始和结束时都是空栈 。因 此 ,i 能 够 把 P 从 和 空 栈 带 到 g 和 空 栈 。这就
^
完成了归纳步骤 。
隱 如 果: _
和 空 栈 带 到 <7 和 空 栈 ,则 八 內 产 生:r 。
c 能 够 把 P 从 />
通 过 对 输 入:r ,P 从 /> 和空栈到 9 和空栈的计算步数作归纳 ,来证明这个断言 。
归 纳 基 础 计 算 有 0 步。


如果计算有 0 步 ,则 它 开 始 和 结 束 在 同 一 个 状 态 ,比 如 说 是 因 此 ,我 们 要 证 明

^
App x 0 在 0 步内 ,P 无法读入任何字符 ,故 :
r = e 。 根 据 G 的 构 造 ,它有规则焱沖 e,
这就证明了归纳基础 。
归 纳 步 骤 假 设 断 言 对 长 度 不 超 过 々 的 计 算 成 立 ,其中々>0 , 要证明断言对长度为
+
々 1 的计算也成立 。
+
假设 P 有一个计算 ,在々 1 步 内 x 把 /> 连 同 空 栈 一 块 带 到 g ,或 者 仅 在 计 算 的 开 始
和结束时栈是空的 ,或者在其他某个地方栈也变成空的 。
对于第一种情况 ,第一步推入栈的符号一定和最后一步弹出栈的符号相同 ,把 这 个 符
号 称 为 心 设 a 是第一步读的输入符号 ,6 是 最 后 一 步 读 的 输 入 符 号 ,r 是 第 一 步 后 的 状
e ) 包 含 ( r ,w ) 且 5( S ,
态 ,5 是最后一步之前的状态 ,那么 ,d i p ,a , 6,M ) 包 含 (g ,
e ),从
而在 G 中有规则 A p a A n b。

*
令 jy

根 据 归 纳 假 设 有 从 而 ,A
^
及 栈 底 的 符 号 心 从 而 P 能够在输人

4x ^
于 r 的计算中删去第一步和最后一步 ,故 关 于 y 的 计 算 有 U + 1 ) — 2 =
>
^
是1 中不包括 <2 和 6 在内的部分 ,即:r = a 3 ,输人:y 能够把 P 从 r 带 到 s 而不触
上 连 同 空 栈 一 块 从 r 转 移 到 5 。由 于 已 经 从 原 来 关
1 步 ,于 是 ,

^
0

对于第二种情况 ,设 r 是 关 于 x 的计算中除开始和结束之外栈变成空的时候的状态 ,
于 是 ,计 算 从 到 r 和从 r 到 g 的部分都不超过々步 ,记 为计算前一部分读的输入 ,z

^^
为 后 一 部 分 读 的 输 人 ,根 据 归 纳 假 设 有 和 八 4 。 由 于 G 中有规则 A A ,
~
^^
^
故 Apq >x , 证毕 。
这就完成了引理 2.15 和定理 2.12 的 证 明 。 毽 上下文
无关语言
刚 才 证 明 了 下 推 自 动 机 识 别 上 下 文 无 关 语 言 类 ,这 个 证 明 使
我们能够给出正则语言和上下文无关语言的关系 ,如 图 2 15 。因 - 正则
为每一个正则语言都可以用有穷自动机识别 ,而 每 一 台 有 穷 自 动 语言
机 都 自 动 地 是 一 台 下 推 自 动 机 ,所 以 只 要 不 考 虑 它 的 栈 ,每 一 个
正则语言也是一个上下文无关的语言 。 图 2- 1 5 正则语言与上下
Ci SD 每一个正则语言都是上下文无关的。 文无关语言的关系
襄夕章上下文无关文法 77

2.3 非上下文无关语言
本节提出一项技术 ,可以用来证明某些语言不是上下文无关的 。在 1.4 节中介绍了泵
引 理 ,用来证明某些语言不是正则的 ,本节对上下文无关语言给岀类似的泵引理 ,它 指 出
每一个上下文无关语言都有一个特殊的值 ,称为泵长度 ( pumping length ),使得这个语言
中的所有长度等于或大于这个值的字符串都能够被 “抽取 ”,这一次抽取的意思要复杂一
点 ,它是指字符串能被划分成 5 段 ,其中第 2 段和第 4 段 可 以 同 时 重 复 任 意 多 次 ,并 且 所
得到的字符串仍然在这个语言中。

关于上下文无关语言的泵引理

( 关 于 上 下 文 无 关 语 言 的 泵 引 理) 如 果 A 是 上 下 文 无 关 语 言 ,则 存 在 数
P ( 泵长度),使得 A 中 任 何 一 个 长 度 不 小 于 的 字 符 串 5 都 能 被 划 分 成 5 段 s= 且
满足下述条件:
1. 对 于 每 一 个
2. I v y | > 0 ;
^ ^ G A;
uv y

3. I
i 或:
当 s 被划分成 MXAryz 时 ,条 件 2 保证 ; y 不是空串 ,否则定理自动成立 ,但毫无意
、:
义 。条件 3 保证 I; r 和 三 段 在 一 起 的 长 度 不 超 过 /> ,这 个 技 术 性 条 件 在 证 明 某 些 语 言
不是上下文无关语言时有用。
^
证 明 思 路 设 A 是 CFL ,G 是 产 生 A 的 CFG 。要 证 明 A 中任何足够长的字符串 6 都
能够被抽取 ,并且抽取后的字符串仍在 A 中 。
设 s 是 A 中 一 个 很 长 的 字 符 串 ( 后 面 将 明 确 给 出 “很 长” 的 意 思 )。由 于 s 在 A 中 ,
它 可 以 用 G 派生出来 ,从 而 有 一 棵 语 法 分 析 树 。由 于 s 很 长 ,5 的 语 法 分 析 树 一 定 很 高 ,
也 就 是 说 ,这 棵 语 法 分 析 树 一 定 有 一 条 很 长 的 从 树 根 的 起 始 变 元 到 树 叶 上 的 终 结 符 的 路
径 。根据鸽巢原理 ,在这条长路径上一定有某个变元 R 重 复 出 现 。正 如 图 2 16 所 示 ,这 -
种重复使得我们可以用第一次出现的尺下面的子树代替第二次岀现的尺下面的子树 ,并
且仍得到一棵合法的语法分析树 。由 此 ,可以像图中表示的那样 ,把 s 切 成 5 段 u v x y z ,
重复第 2 段和第 4 段 ,得到的字符串仍在 A 中 。换言之 ,对任意的

V /\V z
v x y
图 2 - 16 语法分析树上的外科手术

下面转到获得泵引理中全部 3 个条件的细节上来 ,还要说明如何计算泵长度户。


证 明 设 G 是关于 C F L A 的 一 个 CFG ,令 6 是规则右边符号数的最大值 ( 假 设 大 于
等于 2 )。在 G 的任一棵语法分析树中 ,一 个 结 点 最 多 有 6 个 儿 子 ,换言之 ,离 起 始 变 元 1
步最多有 6 片树叶 ;离起始变元不超过 2 步最多有 62 片树叶 ;离起始变元不超过 A 步 最 多
78 第一部分自动机与语言


有 bh 片 树 叶 。因 此 ,如 果 语 法 分 析 树 的 高 度 不 超 过 /z ,则 它 产 生 的 字 符 串 的 长 度 不 超 过
b
+
/l l
反 之 ,如 果 一 个 产 生 的 字 符 串 长 度 不 小 于 炉
O
+ 1 ,则 生 成 它 的 每 个 语 法 树 高 度 至 少 为
p=b

^^
设 G 中 变 元 的 数 目 为|V|。令 泵 长 度 9 则 A 中任一长度不小于 p 的字符
串 s 的 语 法 分 析 树 的 高 度 不 小 于|V
| 1 ,这 是 因 为 + + + 1。
为说明如何抽取 设 r 是 s 的 一 棵 语 法 分 析 树 ,如 果 s 有 若 干 语 法 分 析 树 ,取 r 是

的 长 度 不 小 于 IVI ^
结 点 数 最 少 的 语 法 分 析 树 ,由 于 r 的 高 度 不 小 于
| V|+ 1 ,从 而 从 根 节 点 出 发 的 最 长 路 径
+ 1 并 包 含|V|+ 2 个 结 点 ,其 中 一 个 结 点 为 终 结 符 ,其 他 为 变 元 。因
此 该 路 径 至 少 有 IVI + 1 个 变 元 ,因 为 只 有 树 叶 是 终 结 符 ,故 这 条 最 长 的 路 径 上 至 少 有

_
IVI + 1 个 变 元 ,而 G 只 有|V|个 变 元 ,故 有 某 个 变 元 尺 在 这 条 路 径 上 不 只 出 现 一 次 。
|+ 1 个 变 元 中 重 复 出 现 的 变 元 。
为 了 后 面 的 方 便 ,选 取 R 为 这 条 路 径 上 在 最 下 面 的|V
-
按 照 图 2 16 把 A 划 分 成 在 每 一 个 尺 的 下 面 有 一 棵 子 树 ,它 产 生 s 的 一 部 分。上
面 的 i? 有 一 棵 较 大 的 子 树 ,产 生 vscy; F 面 的 尺 有 一 棵 较 小 的 子 树 ,恰 好 产 生:r。 这 两 棵 树
由 同 一 个 变 元 产 生 ,因 而 可 以 相 互 替 换 ,并 且 仍 得 到 一 棵 有 效 的 语 法 分 析 树。对 于 每 一 个
C>1,用较大的子树反复替换较小的子树以给出字符串 wzAryz 的 语 法 分 析 树,用 较 小 的 子 树
替 换 较 大 的 子 树 以 产 生 字 符 串 这 就 证 实 了 引 理 中 的 条 件 1 ,下面转到条件 2 和条件 3。
为了得到条件 2 , 必须保证 t 或
; 不 都 是 e 。如 果 它 们 都 是 e ,则 用 较 小 的 子 树 替 换 较

、 ^
大 的 子 树 得 到 的 语 法 分 析 树 的 结 点 比 r 少 ,并 且 仍 然 能 够 产 生 .s 。但 这 是 不 可 能 的 ,因 为
我 们 已 经 选 取 r 为 . 的 结 点 数 最 少 的 语 法 分 析 树 ,这 也 是 为 什 么 要 这 样 选 取 r 的 原 因 。
为 了 得 到 条 件 3 , 必 须 保 证 的 长 度 不 超 过 p ,在 s 的 语 法 分 析 树 中 ,上 面 的 尺
产 生 我 们 选 取 尺 使 得 它 的 两 次 出 现 都 落 在 所 在 路 径 的 最 下 面 的 I V|+ 1 个 变 元 中 ,
而 这 条 路 径 又 选 取 的 是 语 法 分 析 树 中 的 最 长 路 径 ,因 此 R 产 生 的 子 树 的 高 度 不 超 过
| +
V| 1。这 么 高 的 树 只 能 产 生 长 度 不 超 过 6 + 1 = 户的字符串 。

关 于 用 泵 引 理 证 明 语 言 不 是 上 下 文 无 关 的 提 示 ,请 复 习 例 1.38 , 在 那 里 讨 论 了 用 关 于
正 则 语 言 的 泵 引 理 证 明 非 正 则 性 的 有 关 问 题。
t愚屬> 用泵引理证明语言

^
B = { anbncn \ rj 0}
不 是 上 下 文 无 关 的。
假 设 B 是 CFL,要 得 出 矛 盾 的 结 果 。令
存 在 。选 取 字 符 串 s=
p是B 的 泵 长 度 ,根 据 泵 引 理 ,这 个
显 然 ,s 属 于 B 且 长 度 不 小 于 泵 引 理 称 5
p
能够被抽取
—,

但 是 我 们 证 明 这 是 不 可 能 的 ,换 言 之 ,我 们 证 明 不 管 怎 么 把 s 划 分 成 uvxyz ,总 要 违 反 泵
引 理 中 的 一 个 条 件。
首 先 ,条 件 2 规 定 I;
或者 不 是 空 串 ,然 后 根 据 子 串 和 是否含有一种以上的符
号 ,考 虑 下 述 两 种 情 况 :
1. 当 I;和 ^
都 只 含 有 一 种 符 号 时 ,a 和 b 或 b 和 c 不 会 都 在
^ ^p 中 ,同 样 也 不 会 都 在 y
中 ,这 时 字 符 串
引 理 的 条 件 1 ,矛 盾 。
2. 当 或者
^ ㈣
2 不 可 能 含 有 个 数 相 同 的 a 、 b 和 c。因 此 ,它 不 属 于 B ,这 违 反 泵

含 有 一 种 以 上 符 号 时, 可 能 含 有 个 数 相 同 的 3 种 符 号 ,但 是 这

^ ^
些 符 号 的 次 序 不 可 能 正 确 。因 此 它 不 属 于 B ,矛 盾 。
系夕章上下文无关文法 79

这两种情况必有一个发生 ,因为这两种情况都产生矛盾 ,故矛盾是不可避免的 ,因


J CFX 错误 ,于是 ,得证 B 不是 CFL。
此 ,假设 B 是 ii

令 用 泵 引 理 证 明 c 不是 CFL。该语言很像例
2.20 中的语言 B ,但证明它不是上下文无关语言要复杂一些 。
假设 C 是 CFL ,要得出矛盾。令 p 是泵引理给出的泵长度 ,使用前面使用过的字符
串. 但 是 这 次 必 须 既 “抽 进 ” 又 “抽 出 ”。令 并 且 再 次 考 虑 例 2.20
中出现的两种情况 。
1. 和 都仅含一种符号 。注意在前面情况 1 中使用的理由不再适用 ,这是因为 C 的

^ ^
字符串中 a 、 b 、 c 的个数不必相等 ,而只需是非降序的 。我们必须更仔细地分析这种情况
才能证明 s 不可能被抽取 。 注意到由于 和 都只含一种符号 ,a 、 b 和 c 中有一种不岀现

^

^
中 。 根据哪个符号不出现 ,把这种情况进一步分成 3 种子情况 :
a. a 不 出 现 。 用抽出得到字符串
的个数或者 c 的个数比 s 的少,因此 ,它不属于 C,矛盾 。
^ ^ ,它含有 a 的个数与 5 的相同 ,但是 b

b. b 不 出 现 。由于 1; 和 5 不都是空串 ,a 或 c 必出现在 ;z 或:


y 中 。 如果 a 出现 ,则字
符串 u v x y l z 中 a 比 b 多 ,从而不属于 C。 如果 c 出现 ,则字符串 Mi/iyz 中 b 比
2

c 多 ,从而也不属于 C。 不管是哪种情况 ,都有矛盾 。


C. c 不 出 现 。则字符串 wWiy Z 中 a 或 b 比 c 多 ,从而不属于 C,矛盾。
2. 或:y 含有一种以上符号 。 wVxyz 中的符号不能以正确的方式排列 ,因而它不可
能属于 C,矛盾 。
^
于是 ,得证 s 不可能被抽取 ,违反泵引理 ,从而 C 不是上下文无关的 。 *
■0© 6 { 0,
1 } },用泵引理证明 D 不是 CFL。( 假设 D 是 CFL 并
令 |加
VUVU
*

得岀矛盾的结论 ,令是泵引理给出的泵长度 。 )
这次选取字符串 s 不那么明显 。可以取字符串 M 10 N ,它是 D 的成员且长度大于户 ,
因此好像是一个好的候选对象 ,但是 ,按如下划分 s ,它就能够被抽取 ,因而不符合我们
的需要 。

_ ^
0
2
000… 000 0 0 000… 0001

再试试 s 的其他取法 ,字符串 OP \ POP \ P 直观上看比前一个字符串更多地抓住了语言


D 的 “本质”,事实上 ,可以证明确实如此 ,证明如下 。
要证明字符串 5 = 不能够被抽取 ,用泵引理中的条件 3 限制划分 s 的方式 。
条件 3 称 ,将 6 :
划分成 s = u v x y z , 其中|n y|</? ,5 能被抽取 。

wi;
首先 ,子串 iAr

ry 2:时 ,1 移到后一半的第一个位置 ,因此


2:

y
— 定横跨 s 的中点 , 否则 ,如 果 位 于 s 的前一半 , 把 .s 抽成
的形式 。 类似地 ,wz;2:cy z 不可能是 ZVVU

如果 urj 位于 s 的后一半 ,把 s 抽 成 时,0 移 到 前 一 半 的 最 后 一 个 位 置 ,因 此


u v2 x y 2 2: 也不可能是 WW 的形式 。
但 是 ,如 果 子 串 横 跨 s 的中点 ,把 s 往外抽成 U X Z y 它形如 0〃ll(yiN 其中 f 和)不

可能都等于这个字符串不是 的 形式 。于是 ,s 不能够被抽取 ,从而 D 不是 CFI

2.4 确定型上下文无关语言
回想一下 ,确定型有穷自动机和非确定型有穷自动机具有等价的语言识别能力 。相
80 第一部分自动机与语言

反 ,非确定型下推自动机比确定型下推自动机具有更强的能力 。我们将看到 ,一些不能由


确定型 PDA 识别的上下文无关语言 ,需要用非确定型 PDA 来识别 。能被确定型下推自动
机 ( DPDA ) 识别的语言称为确定型上下文无关语言 ( DCFL )。它是上下文无关语言的一
个子类 ,并与许多实际应用相关 ,例如 :程序设计语言编译器中语法分析器的设计 ,因为
通常来说 ,与 CFL 相比 ,语法分析的问题对 DCFL 更加容易 。 本节将简要地概述这一重
要又迷人的主题 。
在 DPDA 的定义中 ,我们遵循了确定性的基本准则 : 在计算的每一步 ,根据其转移函
数 ,DPDA 最多只有一种继续的方式 。 定义 DPDA 比定义 DFA 更复杂 ,这是因为 DPDA
可能在不弹出一个栈符号的情况下读人一个输入符号 ,反之亦然 。 相应地 ,DPDA 的转移
函数中允许 r 转移 ,尽管这在 DFA 中是被禁止的 。r 转移有两种形式 :e 输入转移 (Hn -
put move ) 对应于 3( g ,
e,
:stack move ) 对应于§( g ,
r ),er 栈转移 (e a,e )。也可以在一次转
~

移中把这两种形式结合起来 ,对应于扒心 e ,e )。如果一台 DPDA 能够在某种情况下做 r 转


移 ,那么在这种情况下涉及处理非 e 符号的转移是被禁止的 ,否则可能出现多个合法的计
算分支的情况 ,进而导致非确定型的行为 。形式化定义如下 :
r 确定型下推自动机 ( deterministic pushdown automaton ) 是 一 个 6 元 组
其中 o ,2,r 和 F 都是有穷集合 ,并且
1.Q 是状态集 ,
2.2 是输入字母表 ,
3. r 是栈字母表 ,
H Q X2
5.%
exre
是起始状态 ,
— ( oxre ) U {0} 是转移函数 ,

6. 是接受状态集 。
转移函数 5 必须满足如下条件 :
给定任意一组 g Q, 和
5( g ,
a,: 3( g ,
c ), a,e ),
5( g ,
e,x )和 d( q ,
e,e)
中有且仅有一个不是0 。
30 形式的单次转移 ,或输出 0 来指示不做任何动作 。 举
转移函数可能输出一个 ( r ,
一个例子来说明这些可能性 。 假设转移函数为 5 的一个 DPDA M 位于状态 g ,下一个输入
符号是 栈顶符号是:r 。如果 5( g ,
a,:r )= ( r ,
3;),那么 M 读入 a ,从栈中弹出:r ,进人状
态 r ,并且将 y 压入栈 。抑或 ,若扒 g ,
a,
:r )= 0 ,那么当 M 位于状态 g 时 ,没有读入 a 并
弹出 x 对应的转移 。这种情况下 ,3 的条件要求 3( g , e,
e ),S i q ,
a, oc ),8( q ,e ,e ) 之 一 非
空 ,然后 M 作相应转移 。5 的条件避免了 DPDA 在同样的情况下执行两种不同的动作
( 例如 :若 5( g ,
a, e )关 0 就会发生这种情形 ),从而确保了确定型行为 。当
x )关 0 且 5( 心 a ,
栈非空时 ,DPDA 在任何状况下都只有一个合法的转移 。 若栈为空 ,只有当转移函数指明
一个弹出 e 的转移时 ,DPDA 才能转移 。否则 ,DPDA 没有合法的转移 ,拒绝 ,同时不再
读取剩余的输入 。
DPDA 接受的方式与 PDA 相同 。如果 DPDA 在读入输入字符串的最后一个符号后进
入接受状态 ,则接受这个字符串 。其他任何情况下 ,则拒绝这个字符串 。 两种情况下会产
生拒绝 :其一 ,DPDA 读入了全部输入 ,但最后没有进入接受状态 ;其二 ,DPDA 没有成
襄章上下文无关文法 81

功地读完整个输人字符串。当 DPDA 尝试弹岀一个空栈 ,或者当 DPDA 在某个位置后不


再读人任何输入而是执行无尽的 r 输入转移序列时第二种情况就可能出现 。
DPDA 的语言称为确定型上下文无关语言 (deterministic context free language )。 -
iBEI 例 2.9 中 的 语 言 是 一 个 DCFL。通过在一个不可能被接受的
“死” 状态中添加缺失状态 、 输人符号和栈符号组合的转移 ,可以容易地将该语言的 PDA
Mx 修改为一台 DPDA。
例 2 .10 和例 2 .11 给岀的 C F L W b V l D j X) 且 f = j 或 和 { vuwn \ vue
{ 0,
1} *
} 都不是 DCFL。 问题 2 . 27 和问题 2 .28 说明了非确定性是识别这些语言的必
要条件 。 ®
有关 DPDA 的讨论自然地倾向于技术性 ,尽管本书尽最大努力强调其实现背后的主要
思想 ,但本节内容的难度仍大于前面章节 。本节内容并不影响对本书后续内容的理解 ,因
此如有必要可以跳过本节 。
接下来 ,我们介绍一个可以简化后续讨论的技术性引理 。前文介绍过 ,当不能成功读
人全部输人字符串时 ,DPDA 拒绝输人 。 但是 ,这类 DPDA 会引入一些杂乱的情况 。 所
幸 ,下面的引理表明我们可以通过转换 DPDA 来避免这种不方便的情况 。
DPDA 。
任何一台 DPDA 都有一台能够读完整个输入字符串的等价
证明思路当一台 DPDA 试图弹岀一个空栈或者执行无尽的 输入转移序列时 ,它可
能不能读入整个输入串 。我们称第一种情况为 hanging ,第二种情况为 looping。用一个特
殊符号初始化栈可以解决 hanging 问题 。 如果这个符号在输入末端之前被弹出栈 ,那么
^
DPDA 读完剩下的输入并拒绝 。通过识别 looping 情况发生 ( 即不再有输入符号被读入),
并重新对 DPDA 编程使其读入并拒绝输入 ,可以解决 looping 问题 。我们还必须调整这些
修改来满足在输入的最后一个符号发生 hanging 或者 looping 的情况 。 如果 DPDA 在读人
最后一个符号之后进人接受状态 ,那么修改后的 DPDA 接受而不是拒绝输入 。
证明设 P =( Q , 2 U, %, F ) 是 一 台 DPDA 。首先 ,增加一个新的起始状态 an 、
一个额外的接受状态 9accept 、 一个新状态 \ejeet ,以及其他新状态 。对所有 rGQ,
以及:c ,JGA 实施如下修改 。
首先 ,修改 P 使其一旦进人接受状态 ,就停留在接受状态直至读入下一个输入符号 。
对 每 一 个 增 加 一 个 新 的 接 受 状 态 ga ,并且若 5( 心 e , x )=( r , 30 , 则置§( ga x )=
( r a J y ) 如果
0 则修改 5 使得 《( qse ,: :
* )==( ra ,jy )。对每一个 Q 和 a 6 r,若 5( g ,a,
:r )=( r, ,
30 则 置 5Qa ,a ,x )=( r ,30 。设圹是新 、旧接受状态的集合 。
接下来 ,通过用一个新的特殊栈符号 $ 初始化栈来修改 P , 使其在尝试弹岀空栈时拒
绝 。 如果 P 随后在非接受状态探测到 $ , 则进入 14& 并且扫描输入到末端 。如果 P 在接
受状态探测到 $ ,则进入 9accept 。若还有输入处于未读状态 ,P 进入 eieet 并且扫描输入到
c 6 r 和 5((? ,

^
^
末端 。形式化地 ,置 8( q e )=( % ,$ )。对 : a,:c )关 0 ,若 q F',则置
S i q ^ a ,$ )=( reject 5 若 g 6〆,则置 5((? , a ,$ ) F ( gac , e )。M a G 2 置 5 ( greject ,
a,
e )= reject
^
^ 以及占( 9accept ,a ,e )=( greject ,
最后 ,修改 P 使其拒绝 ,避免在输入末端之前执行无尽的 r 输入转移序列。对每一个
geQ 和:rer,当 P 从状态 g 开始且:rer 是栈顶元素时 ,如果 P 不再弹出 :
不再读人任何输入符号 ,则称 ( q,
e )。

工 ) 为 looping 状况 。 如果 P 在随后的转移中进入接受状
r 以下的符号也
82 第一部分自动机与语言

态 ,则称 looping 状 况 是 接 受 的 ,否 则 是 拒 绝 的 。 如果 ( q ,
:c ) 是接受的 looping 状况 ,置
8( q ^ e , x ) = Cqaccept ,
e ),若 ( q ,
s c ) 是拒绝的 looping 状况 ,置 5( g,
e,
:c )=( greieet ,
e )。
为简便起见 ,在后面的讨论中我们假设 DPDA 读人全部的输人 。

2.4 . 1 DCFL 的性质


本小节将探究 DCFL 类的封闭性和非封闭性 ,并由此说明 CFL 不是 DCFL。
DCFL 类 在 补 运 算 下 封 闭 。
证 明 思 路 将 一 台 DFA 的接受状态和非接受状态进行交换 , 得到一台识别语言补集
的新 DFA ,因此证明正则语言类在补运算下封闭 。同样的方法适用于 DPDA ,但有一个
问题 。在输入字符串的末端 ,DPDA 进入转移序列的接受和非接受状态都可能接受输入 。
这种情况下 ,交换接受和非接受状态仍然会接受 。
通过修改 DPDA 限制接受的出现 ,可以解决这个问题 。对输入的每一个符号 ,只有当
修改后的 DPDA 将要读入下一个符号时 ,该 DPDA 才能够进入一个接受状态 。换言之 ,
只有读入状态 (总是读入输人符号的状态 ) 才可能是接受状态 。因此 ,只有在这些读人状
态中交换接受状态和非接受状态 ,才能转换 DPDA 的输出 。
证 明 首 先 按 照 引 理 2.25 的证明中的描述修改 P ,令机器 ( Q,
2,r,
(? , ,
% F) 为 修 改
结果 。 这个机器总是读人全部输入字符串。此外 ,一旦进入一个接受状态 ,它停留在接受
状态直到它读入下一个输入符号。
为了实现证明思路 ,我们需要识别读入状态 。如果 DPDA 在状态 g 读人一个输人符号
a 而 没 有 弹 栈 (即 扒 乒0 ),那 么 认 定 g 为一个读入状态 。 然而 ,如果 DPDA 读
人 a 并且弹栈 ,那么根据弹出的符号决定读入操作 ,因此将这一步一分为二 :弹出和接下
来 的 读 人 。对 和 xer,如果 5( ? ,a ,x )=( r ,30 , 那么增加一个新状态 t 并且修改 5
(

使得 e ),d( q x ,a ,e )=( r y y ) 认定 t 为一个读入状态 。状态 L 从不弹栈 ,


, = 0 .

所以它的动作与栈内容无关。如果 gGF,认定 为一个接受状态 。最后 ,从所有非读人


状态中移除接受状态的认定 。修改后的 DPDA 等价于 P ,但是对每个输人符号 ,当 DPDA
将要读入下一个符号时 ,它最多进入一个接受状态 。

补集 。
^
现在 ,对认定为接受的读入状态进行转换 ( 为非接受 )。 修改后的 DPDA 识别语言

此定理说明一些 CFL 并不是 DCFL。若 CFL 的补不是一个 CFL ,那么该 CFL 也不是
DCFL。 因 此 , 或 其中 是一个 CFL 但不是一个 DCFL。
否则 ,A 若是一个 CFL ,问题 2.30 的结果会错误地认为互门 1)* 0: = { 3吒 叫 72>0 } 是

^
*

上下文无关的 。
问题 2.23 要求证明在其他常见的运算如并 、 交 、 星和逆下 DCFL 类是不封闭的 。
为了简化讨论 ,偶尔我们会考虑将一个特定的标记符号 H 添加到输入字符串的末尾 ,
将其称为输入结束标记 (endmarked input )。我们将 H 添加到 DPDA 的输入字母表 。在下
一个定理中可以看到 ,添加输入结束标记不会改变 DPDA 的能力 。 然而 ,在设计 DPDA
时考虑输人结束标记 ,可以获知输入字符串的结束信息 ,从而简化设计难度 。对任意语言
A ,我们用结束标记语言 AH 来 表 示 字 符 串 的 集 合 ,其 中 wGA 。
A 是 DCFL 当 且 仅 当 A爿 是 DCFL。
第之章上下文无关文法 83


到,H
证明思路证明该定理的充分性比较容易 。 令 DPDAP 识别 A 。 DPDA
读人 ,从而识别 AH 。此时 ,如果在前一个符号中 P 已经进入接受状态 ,那么〆
模拟 P 直

接 受。 不 再 读 人 H 之后的任何符号。


为了证明定理的必要性 ,令 DPDAP 识 别 并 且 构 造 一 个 识 别 A 的 DPDA P'。因
为〆读入其输人 ,因此它模拟 P。在读入每一个输人符号之前 , 判定若该符号为 ,p

^
是否接受 。若是 , 进人一个接受状态 。注意 ,P 可能在读人 H 之后进行栈操作 ,因此读
入 H 之后需要根据栈的内容来判定 P 是否接受 。 当然 ,尸 不能在任一个输入符号时弹出

/

整个栈 ,因此〆必须在不弹出栈的情况下判定 P 在读入 H 之后的动作 。 替代方案是 在

^
栈中存储额外的信息从而允许 / 立刻判定 P 是否接受 。这个信息表明了从哪个状态开始
P 最终会接受 ,同时 ( 可能) 进行栈操作 ,但不再读入任何输入 。
证明我们只给出必要性证明的细节 。 正如证明思路所述 ,令 DPDAP = ( Q,2U
r,

^
< H }, 5 ,% ,
F ) 识 别 /H 并且构造一台 DPDA = 识别 A 。首先 ,
修改 P 使得它的每次转移都仅执行下述操作之一 : 读人一个输入符号 ;将一个符号压人
栈 ;从栈中弹出一个符号 。通过引入新状态很容易实现这些修改 。


〆模拟 P ,同时维持一个栈内容的拷贝并交错存储栈的额外信息 。 每当 压入一个 P
。,
的栈符号 , 随之压入一个代表 P 状态子集的符号 。因此 ,置严 = 厂卩( 0)。 的栈中 r
的成员与P( Q) 的 成 员 交 错 存 储 。如 果 是 栈 顶 符 号 ,那 么 从 尺 的 任 一 状 态 开 始


p ,P 最终会接受并且不再读人更多输入 。


初始 , 将状态集合尺 0 压人栈 ,私包含的任一状态 g 满足 : 当 P 从 g 开始并且栈为

转移 , 首先弹出并拋弃栈顶符号所代表的状态集合 ,接下来 ,
空 ,P 最终将会接受并且不再读人任何输人符号 。那么 开始模拟 P 。为了模拟一个弹岀
再次弹栈从而得到 P 在



当前应该弹出的符号 ,并根据该符号判定 P 的下一次转移 。模拟一个压人转移 5( g ,
P 在从状态 g 到状态 r 的过程中压入:r ,具体操作如下 。 首先 , 检查栈顶的状态
e,e )=

集合 R ,然后 压入了 ,得到集合 S。S 满足若 gGF 或者 5( g ,


e, e ) 且 仏 贝h
x )=( r ,


GS。换句话说 ,状态集合 S 要么立即接受 ,要么在弹出 :


r 后会进人 i? 中的一个状态 。最
后 , 通过检查栈顶集合 i? 并且当尺时进入一个接受状态来模拟一个读入转移 5( 心


e )=( r ,e ) 0 如果在进人这个状态时 , 位于输入字符串的最后 ,那么会接受这个输入 。
如果 不是在输人字符串的最后 ,那么它将继续模拟 P ,那么这个接受状态也必定会记录
P 的状态 。因此 ,我们创建这个状态作为 P 原始状态的第二个拷贝 ,将它标记为 , 的一
个接受状态 。 ■

2 . 4.2 确定型上下文无关文法
这一节定义了确定型上下文无关文法 ,它对应于确定型下推自动机 。我们将说明若把
关注限于结束标记语言 (该语言中所有字符串都以 H 终止),则这两个模型具有等价的能
力 。相比于正则表达式和有穷自动机 ,或者 CFG 和 PDA ,这些生成模型和识别模型在不
需要结束标记的情况下就能准确描述同一类语言 ,因此确定型上下文无关文法和确定型下
推自动机之间的对应关系并不强大 。然而 ,对于 DPDA 和 DCFG ,结束标记是必需的 ,否
则等价关系就不再成立 。
在确定型自动机中 ,计算过程的每一步决定了下一步 。自动机不能对如何向前推进做
出选择 ,因为在任何节点上都只有一种向前推进的可能性 。 为了用文法来定义确定性 ,观
84 第一部分自动机与语言

察发现自动机中的计算对应于文法中的派生 。在一个确定型文法中 ,如下文所述 ,派生是


被约束的 。
CFG 中的派生开始于起始变元 ,根据文法规则得到一系列替换并按 “自顶向下 ” 的
方式推进 ,直至派生得到一个终结符串。为了定义 DCFG ,我们采用 “ 自底向上 ” 的方
式 ,开始于一个终结符串 ,并反向派生 ,通过一系列归约步骤 ( reduce step ) 直至得到起
始变元 。每个归约步骤是一个反向替换 ,规则右边的终结符串和变元被其左边的相应变元
所替换 。被替换的串称为归约串 ( reducing string )。我们将整个反向派生过程称为一次归
约 ( reduction )。确定型 CFG 则由具备确定性质的归约来定义 。
更为形式化地 ,如果 w 和 u 分别是变元串和终结符串 ,用 表示从 W 经过一个归
约步骤得到 换句话说 ,u \-^ v 与 含 义 相 同。一 个 从 U 到 V 的 归 约 (reduction from
u to v ) 是一个序列

我们称 M 可归约 (reducible) 到 w ,记作 M 若有幻 ㈡ 那 么 一 个 从 U 开 始 的


归约 (reduction from w ) 表示一个从 M 开始至起始变元的归约。 在一个最左归约 ( left-
most reduction ) 中 ,每一个归约串只在其他所有归约串完全在其左边后才归约。仔细想
一下 ,可以看出最左归约即是反向的最右派生 。
这里可以看岀 CFG 确定性所包含的思想 。对以 S 为起始变元的 CFG ,串 m 属于其语
言 ,w 的最左归约为 :
VU —
= U\ I > M 2
首先 ,规定每一个 ⑷ 决定下一个归约步骤 W Z+1 。因此 W 决定了整个最左归约 。 这个规定
只是表明文法是无歧义的 。为了得到确定性 ,我们还需更进一步。对每一个 I y 其下一个
归约步骤必须由 A 的前缀唯一确定 ,且此前缀从头开始并且包含了归约步骤中的归约串
h o 换句话说 , 的最左归约步骤并不依赖于 中其归约串右边的符号 。

^
引入术语能帮助我们更准确地描述思路 。令 w 是属于 CFG 语言 G 的一个字符串 ,令
岀现在 w 的最左归约中。在归约步骤 A 中 ,称规则 T-Wi 被反向运用。 这意味着 ^
^
可以记作 U i = x h y , + 1 = x T y , 其中 /i 是归约串 ,:
是 的一部分并出现在 h 右侧 。如图 2 17 所示 。
r是 的一部分并出现在 /1 左侧 ,:y

-
x\ ••• X j h i ••• y i \->xi ••• X j T y i ••• yi = Ui+\


图 2 17 - 的扩展图示

我 们 将 /i 和它的归约规则丁 △ 称 作 ⑷ 的 一 个 句 柄 ( handle )。换句话说 ,出现在


w e L(G ) 最左归约中的串 的一个句柄是 的归约串以及在归约中 的归约规则 。有

^
些情况下 ,当不需关注归约规则时 ,句柄仅指代归约串。称在 L( G ) 中某字符串的最左归
约中出现的串为有效串 (valid string )。我们只定义有效串的句柄 。
如果文法有歧义 ,一个有效串可能有多个句柄 。无歧义的文法仅由一个语法树产生字
^
符串 ,因此 ,其最左归约 、 句柄都是唯一的。在这种情况下 ,称为有效串的唯一句柄 。
若 在一个句柄之后 ,观察 的 一 部 分 因 为 归 约 在 最 左 边 ,所 以 总是一个终

^
⑷ A
结符组成的串。否则 , 应包含一个变元符号 ,且该变元符号仅从前一个归约步骤中产

约了句柄 。 ^
生 ,该归约步骤的归约串完全位于 A 的右边 。但是 ,最左归约应该已经在更早的步骤中归
第之章上下文无关文法 85

考虑文法 G1 :
R^ S \ T
S aSb|ab
T aTbblabb ^
^
它的语言是 BUC,其中 B = { awbm|m>l },C = { amb2叫 m>l }。在这个串 aaabbbG L( G )
的最左归约中 ,我们将每一步的句柄标注了下划线 :
aaabbb h aaSbb

aSb i > S \-^>R

^ ^-
h

相似地 ,串 aaabbbbbb 的一个最左归约为 :


aaabbbbbb i—>aaTbbbb h aTbbh > T \- R -
^
^
在这两个例子中 ,所展现的最左归约恰巧是唯一可能的归约 ;但是在其他可能出现多个归
约的文法中 ,我们必须使用一个最左归约来定义句柄 。 注意 ,aaabbb 和 aaabbbbbb 的句
柄是不同的 ,尽管这两个串最初始的部分一致 。接下来我们将会在定义 DCFG 时简要地讨
论这一细节 。
一台 PDA 通过它的非确定性来识别 L( Gi ), 从而猜测它的输入是否在 B 中或在 C
中 。 那么 ,在它将 a 的句柄压入栈中后 ,它弹出 a 的句柄并且将每一个与 b 或者 bb 分别
匹配 。问题 2.2 5 要 求 证 明 不 是 一 个 DCFL。 如果尝试令一台 DPDA 识别这种语
言 ,会发现机器不能预先知道输入是否在 B 中或在 C 中 ,因此它并不知道如何将 a 的句柄
与 b 的句柄匹配 。将这个文法与文法 G2 比较 :


R 1S \ 2T
S aSb|ab
T aTbb|abb
^
^
G2 中第一个输入符号提供了这个信息 。我们对 DCFG 的定义必须包含 G2 但排除 G 。 黴

令 G3 为如下文法 :
S- TH
T ^T T
( ) \e

^
这个文法阐明了几个要点 。第一 ,它产生一个结束标记语言 。稍后我们在证明 DPDA 和
DCFG 的等价性时 ,会着重关注结束标记语言。第二 ,e 句柄可能出现在归约中 ,就像在
串 OOH 的最左归约中短下划线表示的那样 :
( )( H TOOH T( T)( )H TOH T( T)H S m

^ ^ ^ ^
H h h H ㈠

因为句柄决定归约 ,所以在定义 DCFG 的过程中句柄扮演着重要的角色 。 一旦我们知


道一个串的句柄 ,我们就知道了下一个归约步骤 。为了使接下来的定义有意义 ,牢记我们
的目标 :我们力图定义 DCFG 使得它可以与 DPDA 相对应 。我们通过展示如何将 DCFG
转换成等价的 DPDA 来建立这个对应关系 ,反之亦然 。 为了使这个转换有效 ,DPDA 需
要寻找句柄 ,从而寻找到归约。但是找到一个句柄可能有技巧性 。看起来我们需要知道一
个串的下一个归约步骤从而识别它的句柄 ,但是 DPDA 不需要预先知道归约 。我们通过限
制在 DCFG 中的句柄来解决这个问题 ,从而使得 DPDA 能够更为容易地找到句柄 。
为了更好地说明定义 ,考虑某些串有多个句柄的歧义性文法 。 选择一个特定的句柄可
能需要预先知道哪棵语法树派生了这个串 ,以及那些对于 DPDA
我们发现 DCFG 是非歧义性的 ,因此句柄是独一无二的 。 然而 ,
— 定是无法获得的信息 。
只有独一无二的句柄对定
86 第一部分自动机与语言

义 DCFG 来说是不够的 ,就如同文法 Gi 在例 2.28 中展示的那样 。


为什么拥有独一无二的句柄不能说明我们有一个 DCFG ? 检查 G! 中的句柄能明显地
看到答案 。 如果 weB ,则句柄是 ab; 然 而 如 果 wGC ,则句柄是 abb 。 虽然 w 决定了会
出现哪种情况 ,但是确定句柄为 ab 还是 abb 还需要检查所有的 VU ,并且当一台 DPDA 需
要选择句柄的时候 ,它还没有读完整个输入 。
为了定义对应于 DPDA 的 DCFG ,我们对句柄施加一个更为严格的要求 。一个有效串
的初始部分 (从头开始并包括它的句柄 ) 必须足以决定句柄 。因此 ,如果我们在从左到右
读入一个有效串时 ,只要读入句柄就可以知道我们获得了它 。为识别句柄 ,我们不需要读
入该句柄之外的东西 。 回忆一下一个有效串的未读部分只包括终结符 ,因为这个有效串已
经通过一个初始终结符串的一个最左归约得到了 ,而未读的部分还没有处理 。因此 ,在每
一 个 有 效 串: ) 中 & 是 独 一 无 二 的 句 柄 时 ,我 们 说 /i 是有效串 1= 妯3;的一个强
制句柄 ( forced handle )。
确定型 匕 下 文 无 关 文 法 ( deterministic context- free grammar ) 是 能 够 让
每 一 个 有 效 串 都 有 一 个 强 制 句 柄 的 上 下 文 无 关 文 法。
为了简洁 ,我们假定在整个关于确定型上下文无关文法的部分中 ,CFG 的起始变元
不出现在任何规则的右边 ,在文法中每一个变元出现在该文法语言的某个串的一个归约
中 ,即文法不包含无用的变元 。
虽然我们关于 DCFG 的定义在数学上是很精确的 ,但是它并不能提供任何明确的方式
去判定一个 CFG 是否是确定性的 。下一步我们将会给出一个准确实现这个目的的过程 ,
称之为 DK- 测试 。当我们展示如何将 DCFG 转换成 DPDA 时 ,我们也将使用 DK- 测试的
构造方法使得 DPDA 可以发现句柄 。
DK- 测试依赖于一个简单但令人惊讶的事实 。对任意 CFG G 我们能够构造一个可以
识别句柄的关联 DFADK 。特别地 ,如果满足以下条件 ,DK 接受它的输人
1. 2:是某个有效串 1=0 的前缀 ;
2. % 以 的一个句柄作为结束 。

^
此外 ,DK 的每一个接受状态表明 (一组 ) 相关联的归约规则 。 在一个一般性的 CFG 中 ,
,可能会运用多个归约规则 。但是在一个 DCFG 中 ,如我们看到的那
根据扩展 z 的有效 z;
样 ,每一个接受状态对应于一个确定的归约规则 。
在形式化提出 DK 并列举它的性质之后 ,我们会描述 DK- 测试 。 计划是这样的 ,在一个
DCFG 中 ,所有的句柄都是强制的 。 因此如果 g 个以 z 为前缀并且以 的一个句柄为
结尾的有效串,那么这个句柄是独一无二的 ,且它也是所有有效串 $ 的句柄 。 基于这些性
质,每一个 DK 的接受状态一定与某个单一句柄相关联 ,因此与某个实际的归约规则相关
联 。 此外 ,接受状态必须不能拥有一个向外的路径 ,该路径在读人 2 中的一个串之后可以 *
^
得到一个接受状态 。否则 ,w 的句柄不会是独一无二的或者句柄会依赖于 7。在 DK- 测试
中,我们构造 DK ,如果所有 G 的接受状态都有这些性质 ,则推断出 G 是确定性的 。
为了构造 DFADK ,我们将会构造一个等价的 N F A K ,通过在定理 1.19 中介绍的子
集构造将 K 转换成 D K © 。为了理解 K , 首先考虑一个能完成更简单任务的 N F A J 。它接

名字 DK 是对 “确定性 K ” ( deterministic K ) 的简化 ,同时 DK 也代表最早提出这个思路的人 Donald Knuth 。


襄彡章上下文无关文法 87

受每一个以任何规则的右边作为结束的输人串。构造 J 是很简单的 。/ 会猜测哪个规则适


用 ,也能猜测从何处开始将输入与规则的右边相匹配 。随着匹配输人 ,J 通过已经选好的
规则右边来追踪它的进程 。 我们用在这个规则的对应位置放置句点的方式来表示这个进
程 ,称其为加点规则 ( dotted rule ), 在其他一些资料中也称作项 ( item )。 因此对每个在


右边有々个符号的规则 B ^ U l u 2 ••• U k ,我们得到々+ 1 个加点规贝IJ :
J3 •


B —► wi . U 2

B U \ U 2 …• U k
B —►Wl U 2 ••• U k *


每一个加点规则都对应于 J 的 一 个 状 态。我 们 用 一 个 方 框 来 表 示 状 态 和 相 关 联
的加点规则 B 接 受 状 态 IIB A 对应于完整规则 ( completed rule ), 即以句点作
为结束 。对每一个规则 B ,我 们 为 添 加 一 个 单 独 的 由 所 有 符 号 的 自 循 环 构 成 的
起始状态以及一个 e- 转移 。 因此如果在输入的最后成功完成匹配 ,那么 J 接受 。如果出现
一个错误的匹配或者最后的匹配没有正好出现在输入的末尾 ,那么 J 的这个计算分支会
拒绝 。
NFA K 以相似但更为简捷的操作选择匹配规则 。只有可能的归约规则才会被允许。


如同 / ,它的状态对应于所有的加点规则 。它有一个特殊的起始状态 ,该状态对所有包含
起始变元 Si 的 规 则 来 说 ,都 有 到 匕 的 e- 转移 。在其每一个计算分支中 ,K 将一个
可能的归约规则与输人的某个子串相匹配 。 如果规则的右边包含变元 ,K 会不确定性地转
到某个扩展该变元的规则 。引理 2.31 形式化地展现了该思路 。我们首先详细地描述 K 。
- 转移 。对每一个终结符或

——
转换过程在两种情况下岀现 : 移动转移 ( shift move ) 和
者变元 a 会 出 现 移 动 转 移 ,对 每 个 规 则 有
^

[B— u a. v
对所有规则 B -^ uCv fn C r 会岀现 e 转移: -
av
^ B

B^ u. Cv [C • r

接受状态是所有对应于一个完整规则的 j] o 接受状态没有向外的转换并且写成两个
方框的形式 。
下一个引理以及它的推论证明了 K 接受所有以串 z 的某个有效扩展的句柄作为结束的
串 % 因 为 K 是非确定性的 ,所以我们说它 “可能” 进入一个状态来表示 K 进入了它的


非确定型的某些分支上的状态 。

• K 可 能 进 入 状 态 [T
超 碰編
| 在输入

^

且 xuvy 是 一 个 句 柄 为 MI;、 归 约 规 则 为 T uv 的 有 效 串 。
证明思路 K 通过将一个选定的规则的右边与输入的一部分进行匹配来完成操作 。如
果完全匹配 ,K 接受 。如果规则的右边包含变元 C ,则可能岀现两种情况 。如果下一个输

当 且 仅 当 对 某 些)6 2 * ,z

人符号是 C,那么继续匹配选定的规则 。如果 C 已经被扩展了 ,输入会包含由 C 派生出的


符号 ,所以 K 非确定性地为 C 选择一个替换规则 ,并从这个规则右边的起始位置开始匹
配 。若当前选定规则的右边已经完成匹配 ,则 K 接受 。
88 第一部分自动机与语言

证 明 首 先 我 们 证 明 充 分 性 。假 定 在 加 上 的 K 进 入 [T u.v ) 从 K 的起始状态一直
^
~
0

到 检 查 K 的 路 径 。想 象 该 路 径 如 同 被 r 转 移 间 隔 的 移 动 转 移 的 执 行 过 程 。 移 动


转 移 是 共 享 相 同 规 则 的 状 态 间 的 转 移 ,从 读 入 符 号 向 右 移 动 句 点 的 位 置 。 在 第 f 次 执 行
时 ,规 则 为 S, MlS ,+ 1 % ,此 处 S,+ 1 为 下 一 次 执 行 中 要 扩 展 的 变 元 。倒 数 第 二 次 执 行 的 规


则 是 Si uiTvi ,最 后 一 次 执 行 的 规 则 是 T uv
输 入 2:必 须 与 U \ U 2 ••• U l U = X U 是 等 效 的 ,因 为 串
— 0

和〃是 从 输 入 中 读 入 的 移 动 转 移 符
号 。令 :y’
= Vl
-
, 我 们 发 现:
程 就 如 同 图 2 1 8 中 语 法 树 所 展 示 的 一 样。
为 了 得 到 一 个 有 效 串 ,对
^
可 以 从 G 中 派 生 出 来 ,因 为 上 述 规 则 给 出 的 派 生 过

y中 出 现 的 所 有 变 元 进 行 完 全 扩 展 直 到 每 一 个 变 元 派 生 出 某
个 终 结 符 串 ,将 其 称 为 结 果 串 y。串 是 有 效 的 ,因 为 它 出 现 在 的 一 个 最 左
归 约 中 ,即 通 过 完 全 扩 展: 中 的 全 部 变 元 得 到 的 一 个 终 结 符 串。
-
正如图 2 19 所示, 是 归 约 中 的 句 柄 ,且 它 的 归 约 规 则 是

^^
52
I
C 0
03
:•

-
-
图2 18 派 生 的 语 法 树 图 2 19 - 派 生 带 有 句 柄 仰 的 有 效 串 xuvy 的语法树

现 在 我 们 证 明 引 理 的 必 要 性 。假 定 串 是 一 个 带 有 句 柄 ⑽ 且归约规则为 T
的 有 效 串。证 明 K 在 输 入 xu 上 可 能 进 人 状 态 [T u.v )
^

0

:rt :
y 的 语 法 树 岀 现 在 上 面 的 图 中 。该 语 法 树 以 起 始 变 元 Si 为 根 节 点 ,且 一 定 包 含 变

^
% T, 因 为 T ㈣ 是 归 约 过 程 的 第 一 步 。令 S2 ,… ,Sz 为 如 图 所 示 的 从 5! 到 T 的
路 径 上 的 变 元。注 意 ,在 语 法 树 上 出 现 在 该 路 径 左 侧 的 所 有 变 元 都 是 未 扩 展 的 ,否 则

不 会 是 句 柄。
在 这 棵 语 法 树 上 ,根 据 规 则 每 一 个 Sz 推 导 出 51+ 1 。因 此 对 串 & 和%
来 说 ,文 法 一 定 包 含 下 面 的 规 则 。


——
51 M I S2 *^1

52 U 2 S3 V 2

Si uiTvi
T -
在读入输入 z= ^
时 ,K 包 含 下 述 从 它 的 起 始 状 态 到 状 态 的 路 径 。 首 先 ,


K 执 行 一 个 转 移 到 i)
iS2 z; 下 一 步 ,当 读 入 w 的 符 号 ,K 执 行 对 应 的 移 动 转 移

^
• 0

直到其在 w 的 结 尾 进 人 接 下 来 K 执 行 一 个 e 转 移 到 jS 2 - • 在读
第之章上下文无关文法 89

— —
人 后 执 行 移 动 转 移 直 到 其 达 到 以 此 类 推。在 读 入 之 后 K 进 人

^
SI -^ U L T v l ,通 过 一 个 r 转 移 到 [ T • u v ), 并 最 终 在 读 入 M 之 后 进 人[ T . 。
M
H ■

下 面 的 推 论 说 明 了 K 接 受 所 有 以 某 个 有 效 扩 展 得 到 的 一 个 句 柄 为 结 尾 的 串。当 u = h ,
= e 时 ,可 由 引 理 2.3 1 得 到 该 推 论。 ■

驢 翮 嫌 在 输 入 上 K 可能进入接受状态 T [ - h. 当 且 仅 当 z = x h 且 /1 是 遵 循
^
Z

归 约 规 则 T ^h 的 有 效 串 x h y 的 一 个 句 柄。
~

最 后 ,我 们 通 过 使 用 定 理 1.19 证 明 中 构 造 的 子 集 ,并 删 除 所 有 从 起 始 状 态 无 法 达 到
的 状 态 ,将 NFAK 转 换 成 DFADK 。 每 一 个 DK 的 状 态 包 含 一 个 或 多 个 加 点 规 则 。 每 一
个 接 受 状 态 包 含 至 少 一 个 完 整 规 则 。 通 过 指 代 包 含 加 点 规 则 的 状 态 ,可 以 将 引 理 2.3 1 和
推 论 2.32 应 用 于 DK 。

-
现 在 我 们 做 好 了 描 述 DK 测 试 的 准 备 。
从 一 个 CFG G 开 始 ,构 造 关 联 的 DFADK 。通 过 检 查 DK 的 接 受 状 态 ,判 定 G 是 否
是 确 定 性 的 。 DK- 测 试 保 证 每 一 个 接 受 状 态 包 含 :
1. 有 且 仅 有 一 个 完 整 的 规 则 ,
2. 在 所 有 加 点 规 则 中 句 点 不 会 紧 跟 一 个 终 结 符 ,即 对 没 有 形 如 u.a v 的 加
点 规 则。

-
G 通 过 DK 测 试 当 且 仅 当 G 是 一 个 DCFG 0

证 明 思 路 我 们 会 展 示 DK- 测 试 通 过 当 且 仅 当 所 有 的 句 柄 是 强 制 的 。等 价 地 ,测 试 失
败 当 且 仅 当 某 个 句 柄 不 是 强 制 的 。首 先 ,假 定 某 个 有 效 串 有 一 个 非 强 制 的 句 柄 。如 果 我 们
在 这 个 串 上 运 行 DK ,推 论 2.32 说 明 DK 在 句 柄 的 结 尾 进 人 一 个 接 受 状 态 。 因 为 接 受 状
态 有 另 一 个 完 整 的 规 则 或 者 有 一 个 以 终 结 符 开 始 到 达 接 受 状 态 的 向 外 路 径 ,所 以 DK- 测 试
是 失 败 的 。在 后 一 种 情 况 中 ,接 受 状 态 会 包 含 一 个 加 点 规 则 ,在 该 规 则 中 一 个 终 结 符 岀 现
在 句 点 之 后。
-
反 过 来 ,如 果 DK 测 试 失 败 是 因 为 一 个 接 受 状 态 有 两 个 完 整 的 规 则 ,在 这 种 情 况 下 相
关 联 的 串 被 扩 展 成 带 有 不 同 句 柄 的 两 个 有 效 串 。相 似 地 ,如 果 接 受 状 态 有 一 个 完 整 的 规 则
和 一 个 加 点 规 则 ,在 这 个 加 点 规 则 中 ,终 结 符 在 句 点 之 后 ,那 么 应 用 引 理 2.31 能 得 到 带
有 不 同 句 柄 的 两 个 有 效 的 扩 展 。构 造 对 应 于 第 二 个 规 则 的 有 效 扩 展 有 些 棘 手 。
证 明 首 先 来 看 充 分 性 。假 定 G 不 是 确 定 性 的 ,证 明 G 不 能 通 过 DK 测 试 。使 用 有 -
: :
个 非 强 制 句 柄 /i 的 有 效 串 x /i y 。因 此 某 个 有 效 串 x/i / 有 一 个 不 同 的 句 柄 A / /i ,这 里 :y '
是 一 个 终 结 符 串 。我 们 可 以 将:r /iy 写 成:
如 果:c /i = iA ,那 么 归 约 规 则 是 不 同 的 ,因 为 /i 和 A 是 不 相 同 的 句 柄 。因 此 ,输 人 x /i
将 D/C 传 送 给 包 含 两 个 完 整 规 则 的 某 个 状 态 ,违 背 了 DK 测 试 。 -
如 果 i/i 关iA ,其 中 一 个 扩 展 另 一 个 。假 定:c/i 是 iA 的 真 前 缀 。 如 果 是 更 短 的 串 ,
用 5 代 替 / ,该 论 证 和 串 的 互 换 相 同 。令 q 为 D K 在 输 入:r /i 上 进 人 的 状 态 。状 态 g —g 定
是 接 受 的 ,因 为 是 的 一 个 句 柄 。必 有 一 个 从 9 出 发 的 转 移 箭 头 ,因 为 iA 通 过 将
/i

DK 传 送 给 一 个 接 受 状 态 。另 外 ,因 为 / 6 2+ ,这 个 转 移 箭 头 被 一 个 终 结 符 所 标 注 。这
里 是 因 为 iA 扩 展 了 x /i 。因 此 g 包 含 一 个 加 点 规 则 ,在 这 个 规 则 中 一 个 终 结 符 紧 跟
在 句 点 之 后 ,这 违 背 了 DK 测 试 。 -
为 了 证 明 必 要 性 ,假 定 G 在 某 个 接 受 状 态 g 不 能 通 过 DK 测 试 ,通 过 展 示 一 个 非 强 制 -
90 第一部分自动机与语言

的句柄来说明 G 不是确定性的 。因为 g 是接受的 ,它有一个完整的规则 T


个可以将 DK 推导至 g 的串 。 那么对 3 62 有 z =:rA ,这里有效串 r /i y 有带归约规则
:T Zi 的句柄 A 。现在根据 DK- 测试失败的方式 ,考虑两种情况 。
首先 ,认为 g 有 另 一 个 完 整 的 规 则
^ ' 。那 么 某 个 有 效 串 :
r /iy 必定有一个带有归约


: / .。令 z 是一
1


规则 A 的不同句柄 A 。因此 ,/i 不是一个强制句柄 。 •


其次 ,认为 g 包含一个规则 B ,这 里《 6 2。因 为 x /i 将 DK 传 送 给 g ,得 到

xh= xu ,这 里 对 )62 , 是 有 效 的 ,且 有 一 个 带 有 归 约 规 则 B M⑽ 的 句 柄 uav o


*

为了说明 A 是非强制的 ,完全扩展 r 中所有变元得到结果 z/ 6 2 * ,然 后 令 / = 奶3 , 注


意 y’ d 下面的最左归约说明了 :
r /oZ 是一个有效串而 /1 不是句柄 。
xhy — xhav y = xuav y -^ xuavy —>xBy
\ \ h
^S
这里 s 是 起 始 变 元 。 我 们 知 道 是 有 效 的 并 且 通 过 使 用 一 个 最 右 派 生 能 够 得 到
xuav y , 所 以 •rwaz/y 也是有效的 。此外 ,r w a i/ ;
j 的句柄要么位于 z/ 中 (如• 果 要
么就是 wax;( 如果 u = z/ )。任一情况下 ,句柄包括 a 或者在 a 之后 ,而不能是 /i ,因为 /i
全部在 a 之前 。因此 A 不是一个强制句柄 。 ■

当在实际中建立 DFADK 时 ,直接构造会比事先构造 N F A K 更快 。首先在包含起始


变元的所有规则的初始位置加点 ,并且把这些新加点规则放人 DK 的起始状态 。如果在任
一规则中某个句点出现在变元 C 之前 ,将句点置于所有在左边有 C 的规则的初始位置 ,并
在状态中添加这些规则 ,继续这个过程直到不能得到新的加点规则。对出现在句点之后的任
一符号 c,添加一条标记为 c 的边指向一个新状态 ,该状态包含对所有 c 之前的加点规则 ,移
动句点在 c 中位置得到的加点规则 ,并且添加规则来对应句点出现在变元之前时的规则 。

—— -
这里我们说明 DK- 测试对下面的文法是如何失败的 (见图 2 20 )。
S | -
E E+ T|T
T-^ TXa|a

E T
-..
— EH
•E \- -T
T ~* » T x a
T -*- • a
E
5 EH
-
E -* E » \
- -T
> S

- EH .

T
-^. .
--
E E+ T
T Txa
T a .
T /


-
- -T »
£ * E\
T r Xa

E T

T-^ T Xa
.
.
T -» a •

> T -* Tx a

T -^ T x a
.
.
-
图 2 20 一 个 失 败 的 DK- 测 试 例 子

注意左下侧和右上侧第二个这两个有问题的状态 。这两个状态中都有一个接受状态包
含一条加点规则 ,并且在加点规则中一个终结符出现在句点之后 。 ■
襄夕章上下文无关文法 91

件。
T——
一 个 说 明 下 面 文 法 是 DCFG 的 D F A D K ( 见 图 2 2 1 )。
S T-I
T( T ) | e
-
观 察 发 现 所 有 的 接 受 状 态 都 满 足 DK 测 试 的 条
S
T
--..
TH
T(T)
-

-- .
5 TH
T T (T) -
5 TH .

2. 4. 3 DPDA 和 DCFG 的 关 系
本 小 节 中 我 们 将 会 证 明 DPDA 和 DCFG 描 述 相
--. .
T T( T)
T T( T ) -- . .
T T( T )
T T ( T)

同 的 结 束 标 记 语 言 类 。 首 先 ,我 们 将 说 明 如 何 将
DCFG 转 换 成 等 价 的 DPDA 。 这 个 转 换 在 所 有 情 况 下 图 2 21 - — 个 通 过 DK- 测 试 的 例 子

都 能 进 行 。接 着 ,我 们 将 说 明 如 何 实 现 从 DPDA 到 等 价 的 DCFG 的 反 向 转 换 。该 转 换 只
在 结 束 标 记 语 言 中 才 能 进 行 。 我 们 将 等 价 性 限 定 于 结 束 标 记 语 言 ,否 则 模 型 不 等 价 。 我 们
已 经 证 明 了 结 束 标 记 不 会 影 响 DPDA 可 以 识 别 的 语 言 类 ,但 是 它 们 会 影 响 DCFG 产 生 的
语 言 类 。 没 有 结 束 标 记 ,DCFG 只 产 生 DCFL 的 一 个 子 类 它 们 都 是 前 缀 无 关 的 (见 问
题 2.2 2 )。注 意 所 有 的 结 束 标 记 语 言 都 是 前 缀 无 关 的 。
一 个 结 束 标 记 语 言 由 一 个 确 定 型 上 下 文 无 关 文 法 产 生 ,当 且 仅 当 它 是 确
定 型 上 下 文 无 关 的。
我 们 需 要 证 明 充 分 性 和 必 要 性 。首 先 我 们 会 说 明 每 一 个 DCFG 有 一 个 等 价 的 DPDA。
接 下 来 我 们 会 说 明 每 一 个 能 识 别 结 束 标 记 语 言 的 DPDA 都 有 一 个 等 价 的 DCFG。我 们 用 不
同的引理来证明充分性和必要性。
每 一 个 DCFG 都 有 一 个 等 价 的 DPDA 。
证 明 思 路 我 们 说 明 如 何 将 DCFG G 转 换 成 一 个 等 价 的 DPDA P。 P 按 如 下 所 述 使 用
D F A D K 进 行 操 作 。 对 于 从 输 入 中 所 读 取 的 符 号 ,它 模 拟 DK 直 至 DK 接 受 。 如 定 理
2.3 3 的 证 明 所 述 ,DK 的 接 受 状 态 指 明 一 个 特 定 的 加 点 规 则 ,因 为 G 是 确 定 型 的 ,并 且 这
个 规 则 为 扩 展 了 目 前 已 知 输 入 的 有 效 串 确 定 一 个 句 柄 。此 外 ,因 为 G 是 确 定 型 的 ,这 个 句
柄 适 用 于 每 一 个 有 效 扩 展 ,特 别 地 ,如 果 输 入 属 于 L( G),那 么 这 个 句 柄 适 用 于 对 P 的 全
部 输 入 。 所 以 P 能 使 用 这 个 句 柄 为 它 的 输 入 串 确 定 第 一 个 归 约 步 骤 ,尽 管 在 此 时 它 只 是 读
入 了 它 输 入 的 一 部 分。
P 如 何 确 定 第 二 个 和 接 下 来 的 归 约 步 骤? 一 个 思 路 是 在 输 入 串 上 直 接 执 行 归 约 步 骤 ,
然 后 通 过 DK 运 行 修 改 后 的 输 人 ,就 如 同 我 们 之 前 做 的 那 样 。 但 是 输 人 不 能 修 改 或 者 重 新
读 入 ,因 此 这 个 思 路 行 不 通 。另 一 个 思 路 是 将 输 入 拷 贝 到 栈 并 在 栈 上 执 行 归 约 步 骤 ,但 是
这 样 的 话 P 必 须 弹 出 整 个 栈 来 通 过 DK 运 行 修 改 后 的 输 入 ,因 此 修 改 后 的 输 入 对 后 面 的 步
骤 就 不 能 持 续 有 效 了。
这 里 有 一 个 小 技 巧 ,就 是 在 栈 里 存 储 所 有 的 DK 的 状 态 ,而 不 是 存 储 输 入 串 。 每 当 P
读 人 一 个 输 入 符 号 并 模 拟 一 个 在 DK 中 的 转 移 时 ,它 通 过 将 其 压 人 栈 来 记 录 DK 的 状 态 。
当 其 使 用 归 约 规 则 来 执 行 一 个 归 约 步 骤 时 ,它 从 栈 中 弹 出 U|个 状 态 ,展 现 在 读 入 W

之 前 DK 的 状 态 。它 将 DK 重 置 为 该 状 态 ,接 下 来 在 输 入 T 上 模 拟 DK ,并 将 产 生 的 状 态
压 入 栈 。之 后 P 像 之 前 读 取 和 处 理 输 入 符 号 那 样 继 续 进 行 。
当 P 将 起 始 变 元 压 入 栈 时 ,它 已 经 找 到 一 个 输 入 到 起 始 变 元 的 归 约 ,所 以 它 进 入 一 个
92 第一部分自动机与语言

接受状态 。 ■

接下来我们证明定理 2.36 的 必 要 性 。
每一个能识别结束标记语言的 DPDA 都有一个等价的 DCFG 。
证 明 思 路 这 个 证 明 是 对 引 理 2.1 5 中 将 PDA P 转 换 为 等 价 CFG G 的 构 造 过 程 的 修
改 。 这里 P 和 G 是确定型的 ,在 引 理 2.15 的 证 明 思 路 中 ,我 们 改 变 P 来 清 空 它 的 栈 ,
并且当 P 接受时进入一个指定的接受状态 gaccept 。一 个 PDA 不 能 直 接 判 定 其 在 输 人 末 尾
是 什 么 ,所 以 P 使用它的非确定性来猜测其会处于哪种情况 。 我们不希望在构造 DPDA
P 的过程中引入非确定性 。 替代策略是使用一个假设 ,假 设 L( P ) 是结束标记的 。 我们
修改 P 来 清 空 它 的 栈 ,并 且 在 它 已 经 读 入 结 束 标 记 H 之 后 进 人 原 接 受 状 态 之 一 时 进
人 qaccept
接下来我们应用文法构造得到 G 。 简单地应用原始构造于 DPDA 可以产生一个近乎确
定型文法 ,这是因为 CFG 的派生密切对应于 DPDA 的 计 算 过 程 。该 文 法 在 次 要 的 、 可 修
复的方式下不是确定型 。
原 始 构 造 引 入 了 形 如 规 则 ,它 们 可 能 会 引 起 歧 义 。这 些 规 则 包 括 的 情
形 有 :A % 产生一个串 ,该 串 将 P 从 状 态 带 到 状 态 在每个状态的结尾栈都被清空,
以及在中途栈被清空 。替换操作对应于在一处将计算分拆 。但是如果栈多次清空 ,那么会
出现多个分拆 。 每个分拆会产生不同的语法树 ,所以产生的文法是歧义性的 。通过修改文
法使得计算分拆只在栈清空的最后位置发生 ,可以消除歧义 。 用 一 个 出 现 在 歧 义 性 文 法 中
^
的简单但类似的情况来说明 :
S-^ TH
-
T TT|( T ) | e
^


该文法等价于非歧义性的 、 确定型的文法
S-^ TH
T T( T) | e
-
接下来我们通过使用 DK 测 试 来 说 明 修 改 后 的 文 法 是 确 定 型 的 。 文 法 被 设 计 成 模 拟
DPDA。就像引理 2.15 的 证 明 一 样 ,在 P 从一个空栈上的状态 /> 运 行 到 一 个 空 栈 上 的 状
态 g 的 过 程 中 产 生 这 些 串。我们将会使用 P 的确定性来证明 G 的确定性 ,这样我们会
发 现 P 的确定性对于定义 P 在有效串上的计算过程从而来观测它在句柄上的行为是很有
用 的 。然后我们可以使用 P 的确定型行为来说明句柄都是强制的 。
2,
证 明 认 为 P =( Q , r ,J,g , 。
{ gaeeept }) 并构造 G。 起始变元是 A 0
( 。构造过程包

^
*
^ accept

含 如 下 3 个部分 。
1 对每一个 /),
g,r, w 6 r ,以 及
5 6 Q, a,
,如果 5( /> , e) 包 含 ( r ,w ) 且 3( 5 ,6 ,


w )包 含( g ,
e ),那么将规则 Apq -^ aArsb 放 入 G 。
2. 对 每 一 个 将 规 则 A内 A y A q 放 入 G。
3. 对每一个 f G Q,将规则 e 放入 G。
为避免引入歧义我们对构造过程作修改 : 将 类 型 1 和类型 2 规则合并成一个实现相同
效果的单一类型 1 2 规 则 。 -
-

1 2. 对 每 一 个 山K

Q,
w6 r,以 及 a ,662e ,如果 5( r ,a ,e )=(s,w )且
u)= ( q , e , 将规则 A
) 內 A y a A j 放入 G 。
襄夕章上下文无关文法 93

— —
为了看到修改后的文法产生相同的语言 ,考虑原始文法的任一派生 。对每一个由类型 2
规则 AM AyAq 导致的替换 ,我们可以假定 r 是 P 在栈变为空的过程中 (修改断言 2.17 的

..
证明过程来选择 r ) 最右位置时的状态 。那么随后的替换一定是用类型 1 规则 /U aAj

^—
来扩展它的 。 我们可以将这两个替换合并成一个单一类型 1 2 规则 A - ApraA b

..
相反 ,在一个使用修改后文法的派生中 ,如果用类型 2 规则
.
AM AyAq 和紧跟着的
类型 1 规则 A a A b 来代替类型 1 - 2 规则 A A p r a A b 可以得到相同的结果 。

^
现在我们用 DK- 测试来证明 G 是确定型的 。为了实现这一点 ,我们将会通过扩展 P
的输入字母表和转移函数来处理除终结符之外的变元符号 ,从而分析在有效串上 P 如何操
作 。我 们 把 所 有 的 符 号 添 加 到 P 的输人字母表并通过定义 5( 沁
它的转移函数 5。令所有其他的转移包括 A # 为 0 。为了保持 P 的确定性行为 ,如果 P 从
, ^
e )= Q,
e ) 来扩展

输人中读入 A ,那么不允许出现 r 输入转移 。


~
下面的断言适用于在 L( G ) 中 任 一 串 w 的派生 ,例如
A0 = VQ ^>V\ => •••^>Vi => •••=>Vk = rw
^ ^ 9
accept

如 果 P 读 入 包 含 一 个 变 元 A% 的 V i ,那 么 它 正 好 在 读 入 之 前 进 入 状 态 户。

_
使用在 i 上的归纳 ,从 A QQ accep 派生巧的步骤数目来证明 。
^ t

归纳基础: i = 0 o
在这种情况下, 。^
9 ’accept 且 P 从状态 % 开始 ,所以归纳基础正确 。
归纳步骤 :假定断言对 i 成立 ,证明其对 f +1 也成立 。
首 先 考 虑 如 下 情 况, 且 Aw 是在步骤 % => %+ i 中替换的变元 。 归纳假设表
明 P 在它读入:T 之后 ,在读入符号 AM 之 前 进 入 状 态 根 据 G 的构造过程 ,替换规则可
能有两种类型 :
1. Apg -^ A p r a A a b
2.A p p -►e 。
因 此 根 据 选 择 的 规 则 类 型 一A a b 或 者 %+ 1 = 巧。 在 第 一 种 情 况 下 ,当 P
在 % + 1 中读入 A a A d 时 ,我 们 知 道 它 在 状 态 f 开 始 ,因 为 其 刚 刚 读 完 :
r 。随 着 P 在

^
中读人 A a A 功 ,由于替换规则的构造 ,它进入状态 r , 〖 和 g 组成的序列 。 因此 ,
它 正 好 在 读 人 之 前 进 人 状 态 p ,并且正好在读人 Aw 之 前 进 入 状 态 从 而 为 这 两 种 变
元的出现情况建立断言 。断言在 部分的变元出现时成立 ,是因为在 P 读入 6 之后它进入
状态 g 然 后 读 入 串 在 输 入 % 上 ,它 也 在 读 入

^
的 y 部分上是一致的 。显然 ,计算过程在:r 部 分 也 是 一 致 的 。因 此 ,断 言 对 成 立 。在
第二种情况下 ,没有引入新的变元 ,所以我们只需要观察计算过程在 % 与 %+ 1 的 :
r 和y ^
之前进入心所以计算过程在认和

部分上是一致的 。这就证明了断言成立 。
G 能 通 过 DK 测 试 。 -
我们证明每一个 DK 的接受状态都满足 DK 测试的条件 。选择这些接受状态中的一 -
个 。它包含一个完整的规则 R 。这个完整的规则可能有下面两种形式之一 :
1. Apq -^ ApraAstb .
2. App .
^
在这两种情况下 ,我们都需要证明该接受状态不会包含 :
a. 另一个完整的规则 ,
94 第一部分自动机与语言

b. 一 个 含 有 终 结 符 紧 跟 在 句 点 之 后 的 加 点 规 则 。
我 们 分 别 考 虑 这 四 种 情 况 。在 每 一 种 情 况 中 ,我 们 从 考 虑 一 个 串 z 开 始 ,DK 在 z 上
到 达 我 们 所 选 择 的 接 受 状 态。
情况 1a -
尺 是 一 个 完 整 的 类 型 1 2 规 则 。对 这 个 接 受 状 态 的 任 意 一 个 规 则 来 说 ,z 必
定 以 这 个 规 则 中 的 句 点 之 前 的 符 号 作 为 结 束 ,因 为 DK 在 z 上 到 达 该 状 态 。因 此 在 句 点 之
前 的 符 号 在 所 有 这 样 的 规 则 中 一 定 是 一 致 的 。这 些 符 号 在 尺 中 是 功 ,所 以 任 意 其 他
-
类 型 1 2 的 完 整 规 则 的 右 边 一 定 有 相 同 的 符 号 。同 样 左 边 的 变 元 一 定 也 是 一 致 的 ,所 以 规
则 一 定 都 是 相 同 的。
假定接受状态包含 R 和某个类型 3 的完整 6

规 则 T 。h k R 中 我 们 知 道 z 以 A p r a A a b
结 束 。此 外 ,我 们 知 道 P 在 z 的 最 后 弹 栈 ,因 为 根 据 G 的 构 造 过 程 弹 栈 操 作 在 R 的 那 个
位 置 执 行 。根 据 我 们 建 立 DK 的 方 式 ,在 某 个 状 态 的 完 整 e 规 则 一 定 由 一 个 加 点 规 则 推 导
岀 来 ,该 加 点 规 则 驻 留 的 状 态 满 足 :句 点 不 在 一 开 始 的 位 置 且 句 点 之 后 紧 接 着 某 个 变 元 。
(一个例外出现在 DK 的 开 始 状 态 ,这 里 句 点 可 能 出 现 在 规 则 的 开 始 位 置 ,但 是 这 个 接 受
状 态 不 能 是 开 始 状 态 ,因 为 它 包 含 了 一 个 完 整 的 类 型 1 - 2 规 则 。
) 这意味着在 G 中, T 由 :
-
一 个 类 型 1 2 的 加 点 规 则 推 导 得 到 ,在 这 个 规 则 中 句 点 在 第 二 个 变 元 之 前 。根 据 G 的 构 造
过 程 ,一 个 压 栈 操 作 正 好 在 句 点 之 前 出 现 。这 说 明 P 在 z 的 最 后 执 行 了 一 个 压 入 转 移 ,这

与 我 们 之 前 的 论 断 是 矛 盾 的 。 所 以 不 存 在 完 整 r 规 则 T 。 另 一 方 面 ,任 一 类 型 的 第 二 个 完
整 规 则 不 会 出 现 在 这 个 接 受 状 态。
情 况 2a R 是一个完整的 e 规 则- 。我 们 证 明 没 有 另 一 个 完 整 的 r 规 则
能 够 与 R 共 存 。如 果 这 样 的 规 则 存 在 ,那 么 之 前 的 断 言 证 明 在 读 入 z 之 后 P 定在户中 —
且 在 读 入 z 之 后 它 也 一 定 在 g 中。因 此 p = 两 个 完 整 的 r 规 则 是 相 同 的。
情 况 1 b 尺 是 一 个 完 整 的 类 型 1 - 2 规 则 。从 情 况 la 中 ,我 们 知 道 P 在 z 的 最 后 弹 栈 。
: :
假 设 接 受 状 态 也 包 含 一 个 加 点 规 则 T ,在 T 中 一 个 终 结 符 紧 跟 在 句 点 之 后 。从 T 中 我 们
知 道 P 不 能 在 z 的 最 后 弹 栈 。这 个 矛 盾 说 明 这 种 情 况 是 不 会 出 现 的 。
情 况 2 b R 是 一 个 完 整 的 r 规 则 。 假 设 接 受 状 态 也 包 含 一 个 加 点 规 则 丁, 在 T 中 一 :
: -
个 终 结 符 紧 跟 在 句 点 之 后 。 因 为 T 是 类 型 1 2 的 ,所 以 一 个 变 元 符 号 之 后 紧 接 着 句 点 ,
那 么 z 以 这 个 变 元 符 号 作 为 结 束 。 此 外 ,在 P 读 入 z 之 后 ,它 为 读 入 一 个 非 e 输 入 符 号
做 好 了 准 备 ,因 为 一 个 终 结 符 跟 在 句 点 之 后 。 就 如 同 在 情 况 la 中 , 完 整 的 r 规 则 i? 从
-
一 个 类 型 1 2 加 点 规 则 S 中 推 导 得 到 ,在 S 中 句 点 之 后 紧 接 着 第 二 个 变 元 。( 再 一 次 ,
这 个 接 受 状 态 不 能 是 DK 的 开 始 状 态 ,因 为 句 点 不 在 丁 的 开 始 位 置 出 现 。 ) 因此在 S 中

^
某 个 符 号 之 后 紧 接 着 出 现 句 点 ,所 以 z 以 & 作 为 结 束 。 不 论 是 6 2 还 是 & = ,

^
因为 z 以一个变元符号作为结束 , $ 2 所以 S = 因 此 ,在 P 读 入 z 之 后 ,在 它 为 处
理 J 执 行 r 输 人 转 移 之 前 ,它 为 读 入 一 个 e 输 入 做 好 了 准 备 。 在 之 前 我 们 也 证 明 了 P 在
此 刻 为 读 人 一 个 非 e 输 人 符 号 做 好 了 准 备 。 但 是 不 允 许 DPDA 同 时 执 行 r 输 入 转 移 以 及
在 给 定 状 态 和 栈 读 入 一 个 非 e 输 人 符 号 的 转 移 ,所 以 上 述 情 况 不 可 能 出 现 。 因 此 情 况 2 b
不会发生。 ■

2 . 4. 4 语 法 分 析 和 LR( k ) 文 法

确 定 型 上 下 文 无 关 语 言 有 着 重 要 的 实 际 意 义 。它 们 对 于 成 员 关 系 和 语 法 分 析 的 算 法 都
基 于 DPDA ,因 此 这 些 算 法 都 是 高 效 的 ,且 它 们 包 含 了 丰 富 的 涵 盖 大 多 数 编 程 语 言 的 CFL
第之章上下文无关文法 95

类 。 然而 ,DCFG 有时在表达特殊的 DCFL 时不方便 。其关于所有句柄都是强制的要求 ,


对于设计直观的 DCFG 是个障碍 。
幸运的是 ,一个叫作 LR(々) 的宽泛文法类让二者相得益彰 。 它们与 DCFG 非常近似 ,
都允许到 DPDA 的直接转变 。同时它们在很多应用上有足够的表达力 。
LRU ) 文法的算法引入了前瞻性 ( lookahead ) 0 在 DCFG 中 ,所有的句柄都是强制
的 。 一个句柄只依赖于一个包括句柄的有效串上的符号 ,不依赖于在该句柄之后的终结
符 。 在 LR( « 文法中 ,一个句柄可能也依赖于该句柄之后的符号 ,但只依赖于其中的前々
个 。 首字母缩略词 LR(々)表示 :从左到右的输人处理 (Left to right input processing )、 最
右派生 (尽ightmost derivation ) ( 或者等价地 ,最左归约) 和前瞻的土个符号 。
为了使其更为精确 ,令 △ 为有效串 r = 的一个句柄 。 如果 A 对每一个有效串:c /ii
(: rG 满足 》62 *
且 y 和 》在它们前々个符号上是一致的) 来说是独一无二的句柄 ,那么
认为 A 是被前瞻々所强制的 ( forced by lookahead 々)。(如果其中某个串的长度小于々,那
么一致的长度与这个短串的长度相同 。

若 LR ( /O 文法的每一个有效串的句柄都是被前瞻々所强制的 ,那么该
LR(々)文法是上下文无关文法 。
因此 DCFG 与 LR( 0 )文法相同 。我们能够证明对任意一个 I 能将文法 LRU ) 转换
成 DPDA 。我们已经证明 DPDA 与 LR( 0 )文法等价 。因此 LR(々)文法对所有 6 和所有 DC -
FL 的准确描述在能力上是等价的 。 下面的例子说明 ,LR( 1 ) 文法比 DCFG 更为方便描述
特定的语言 。
为了避免烦琐的符号和技术性的细节 ,我们仅展示当々= 1 时如何将 LR(々) 文法转换
成 DPDA。更为一般性的转换过程在本质上与此相同 。
首先 ,我们提出一个为 LR( 1 ) 文法做了修改的 DK 测试的变形 ,我们将其称为前瞻 -
- -
为 1 的 DK 测试 ,或简记为 DKi 测试 。如之前一样 ,我们将构造一个 NFA ,这里称为
Ki , 并将其转换成 DFADK 1 (3 心的每一个状态都有一个加点规则 : 和一个称为前
瞻符号 ( lookahead symbol ) 的终结符 a ,表示成 [ T -^ U . V ]
a 。这 个 状 态 说 明 最 近 已
经读人了串心如果 在 M 之后出现并且 a 在 之后岀现 ,M 可能为句柄 ⑽ 的一部分。

规 则 ,开 始 状 态 有 一 个 到
^
绝大部分的形式化构造工作与之前的相同 。对每一个包括起始变元 Si 和
^
的 e- 转移 。 变换转变 (shift transition ) 在 输 入 工 上
所 有 的

— — —

将 T u. 变为 T ux. ,这里 i 是一个变元符号或者终结符 。对每一个规则

—r ,ET 转 变 ( e~ transition ) 将 T u . Cv \ , 这里

^
C 变为 r b 是能从 中派生
出来的任意终结符串的第一个符号 。如果

和 所 有 的 接 受 状 态 都 是 B ^^ u. ^
派生出 e ,那么添加 6 = 对完整规则
^
令 A 是带前瞻符号 的完整规则 ,i?2 是 带 前 瞻 符 号 化 的 加 点 规 则 。 私 和 私 是
致的 ( consistent ),如果
1. i?2 是完整的且
2. Rz 不是完整的且
^
<21 =(22 ,或
紧跟在句点之后 。
现在我们已经做好准备来描述
态一定不包含任意两个一致的加点规则 。 ^ DKi - 测试 。构造 DFADKh 测试保证每一个接受状
96 第一部分自动机与语言

-
G 通 过 DK 测 试 当 且 仅 当 G 是 一 个 LR( 1 ) 文 法 。

^
证 明 思 路 推 论 2.32 仍 适 用 于 DKh 因 为 我 们 可 以 忽 略 前 瞻 符 号 。

- 测 试 ( 见 图 2 - 2 2 )。 回 忆 在 例

^
这 个 例 子 说 明 了 下 面 的 文 法 通 过 了 DK
-
2.34 中 这 个 文 法 不 能 通 过 DK 测 试 。因 此 它 是 一 个 LR( 1 ) 文 法 的 例 子 而 不 是 一 个 DCFG

——
_
的 例 子。
S
E^ E+ T|T
T TXa|a

S
E ~*~ » E -\-T
a + xH
十H
E

-.
> S a+xH
E E +T +H
> S - ;.£H a + xH
£> T . +H
-.
-
T .Txa X + H
T a X +H
-
E E + .T T - -T »
T -.
T -* .TXa
T a
X
X
+H
+H
E ~^ E \
-
T T. X a X
+H
+H

E
——
T T. Xa
T.
X
+H
+H
-
T a. X +H
-
T Tx . a

T -* Txa .
X

x +H
+H

鷀HEEI
-
图 2 22 通过 DKa - 测试 ■

结 束 标 记 语 言 由 LR(1 )文 法 生 成 当 且 仅 当 它 是 一 个 DCFL。
我 们 已 经 证 明 了 每 一 个 DCFL 都 有 一 个 LR( O ) 文 法 ,因 为 一 个 LR( O ) 文 法 与 一 个
DCFG 相 同 。这 就 证 明 了 定 理 的 必 要 性 。剩 下 的 就 是 下 面 这 个 引 理 ,说 明 了 如 何 将 LR( 1 )
文 法 转 换 成 DPDA 。
每 一 个 LR( 1 ) 文 法 都 有 一 个 等 价 的 DPDA 。
证明思路我们构造 Pi ,一 个 我 们 在 引 理 2.4 5 中 提 到 的 DPDA P 的 修 改 版 本 。 h
读 入 它 的 输 入 并 模 拟 DKh 同 时 使 用 栈 来 记 录 若 所 有 归 约 步 骤 应 用 于 目 前 的 输 人 ,DKi
可 能 进 人 的 状 态 。此 外 ,h 向 前 读 人 1 个 符 号 并 将 这 个 前 瞻 信 息 存 储 到 它 的 有 穷 状 态 存
储 (finite state memory ) 中 。每 当 达 到 一 个 接 受 状 态 ,h 査 询 它 的 前 瞻 来 判 断 是 否
执 行 一 个 归 约 步 骤 ,并 在 有 多 种 可 能 时 判 断 执 行 哪 一 个 步 骤 。因 为 文 法 是 LR( 1 ),所 以 只
有 一 种 选 择。 ■

练习

——
2.1 回忆一下例 2.3 中给出的 CFG G4 。为方便起见 ,用单字母重新命名它的变元如下:
E E+ T| T
T T X F| F
F -* ( E ) \ a
给出下述字符串的语法分析树和派生:
a. a b. a + a c. a + a + a d. ( ( a ) )
襄夕章上下文无关文法 97

2.2 利用语言 A ={
类在交运算下不封闭 。
b. 利用 (a ) 和德
, ” m ,>0 } 和 B = { a”b c |
b”c| 72 m,

摩根律 (定理 0.10 ),证明上下文无关语言类在补运算下不封闭 。


«

-
rz>0 } 以及例 2.20 , 证明上下文无关语言

A 2.3
设上下文无关文法 G:
R
—— XRX \ S
S aTb| bTa
T
X
X T X| X | e
a| b
回答下述问题 :
a.G 的 变 元 是 什 么? b.G 的终结符是什么?
c.G 的 起 始 变 元 是 什 么? d. 给出 L( G ) 中的 3 个字符串 。
e. 给 出 不 在 L( G ) 中 的 3 个 字 符 串 。 f. 是真是假 :T > aba = 0

h. 是真是假 : T o丁。 :

^
g. 是 真 是 假 : T aba 0

i. 是 真 是 假 :丁 $了。 j. 是真是假 :X X X =>aba 0

^
k. 是 真 是 假 :X aba 0 1. 是真是假 :T i x x。
m. 是 真 是 假 :T ;X X X n. 是真是假 :S
o. 用 普 通 的 语 言 描 述 L( G )。
0
^ £o

2.4 设 字 母 表 2 是 { 0 ,1 } , 给 出 产 生 下 述 语 言 的 上 下 文 无 关 文 法 :
Aa. 至 少 包 含 3 个 1 }。
b. 以 相 同 的 符 号 开 始 和 结 束 }。
c. { vu \ vu 的 长 度 为 奇 数 }。
Ad.{ wlw 的 长 度 为 奇 数 且 正 中 间 的 符 号 是 o }。
e.{ t | ,即 是 一 个 回 文 }。

2.5
^
f. 空 集 。
给 出 关 于 练 习 2.4 中 语 言 的 下 推 自 动 机 的 非 形 式 化 描 述 和 状 态 图。
2.6 给出产生下述语言的上下文无关文法:
Aa. 字 母 表 { a ,b } 上 a 多 于 b 的 所 有 字 符 串 组 成 的 集 合 。
b. 语 言 { a”b”|n O } 的 补 集 。
- ^

^
Ac. x \ vu , x < 0 ,
1广且 是 x 的 子 串 }。
d. … 每 一 个: ,且 存 在 z 和 j 使 得:r , = rf }。 *

A 2 . 7 给 出 关 于 练 习 2.6 中 语 言 的 PDA 的 非 形 式 描 述 。
A 2.8 证 明 在 2. 1 节 开 始 部 分 给 出 的 文 法 G2 中 ,字 符 串 “ the girl touches the boy with the flower ” 有 两
个 不 同 的 最 左 派 生 ,叙 述 这 句 话 的 两 个 不 同 的 意 思 。
2.9 给出产生语言
A ={ a lyck
1 _
且 i= j 或;=々}

的上下文无关文法 。你给出的文法是歧义的吗? 为什么?


2.1 0 给出识别练习 2.9 中语言 A 的下推自动机的非形式化描述 。
2.11 用定理 2.12 中给出的过程 ,把练习 2.1 中的 CFG G4 转换成等价的 PDA。
2.12 用定理 2.12 中给出的过程 ,把练习 2.3 中的 CFG G 转换成等价的 PDA。

——
2.13 设文法 G =( V ,
H S),其中 V ={ S,
T, 2={ 0 ,# },尺是下述规则的集合:
L7},
S TTII;
0 #
T 0 T|T|
U -^ 0U 001
用普通的语言描述 L( G )。

^
98 第一部分自动机与语言

b. 证 明 L( G) 不 是 正 则 的 。
2.14 用 定 理 2.6 中 给 岀 的 过 程 ,把 下 述 CFG 转 换 成 等 价 的 乔 姆 斯 基 范 式 文 法 。
A^ BAB \ B \ e
0 0 |e

-
2.15 给 出 一 个 反 例 证 明 下 述 构 造 不 能 证 明 上 下 文 无 关 语 言 类 在 星 号 运 算 下 封 闭 。 设 CFLA 由 CFGG
=( V,2 ,尺 ,
S) 产 生 ,将 G 增 加 一 条 新 规 则 S SS 并 称 其 为 这 个 语 法 可 产 生 语 言 A * 。
2.16 证明上下文无关语言类在并、连接和星号三种正则运算下封闭。
2 . 1 7 先 说 明 如 何 把 正 则 表 达 式 直 接 转 换 成 等 价 的 上 下 文 无 关 文 法 ,然 后 利 用 练 习 2.1 6 的 结 果 ,给
出 每 一 个 正 则 语 言 都 是 上 下 文 无 关 的 另 一 种 证 明。

问题
2.18 考 虑 下 面 的 CFG G:
S

丁 一 aTb
|
SS|T
ab
描 述 L( G) 并 证 明 G 是 歧 义 的 。 给 定 一 个 非 歧 义 文 法 H ,满 足 UH )= UG ),简 要 证 明 H 是
非 歧 义 的。
*
2.19 我 们 定 义 语 言 A 的 旋 转 闭 包 ( rotational closure ) 为 尺C( A )= { jyx
| a A }。证 明 CFL 类 在 旋
转 闭 包 下 是 封 闭 的。
*
2.20 我 们 定 义 语 言 A 的 CUT 为 CUT( A )={:rZU:
y: yZeA }。证 明 CFL 类 在 CUT 下 不 是 封 闭 的。
2.21 证 明 每 一 个 DCFG 是 一 个 非 歧 义 的 CFG。
A *
2.2 2 证 明 每 一 个 DCFG 产 生 一 个 前 缀 无 关 语 言 。
*
2.23 证 明 DCFL 类 在 下 面 的 运 算 下 不 是 封 闭 的 :
并 b. 交 c. 连 接 d. 星 号 e 逆
2.24 设 下 面 的 文 法 为 G:


S-^ TH
T |
TaTb TbTa | e
a. 证 明 L( G )= { uH 丨 说 包 含 相 同 个 数 的 a 和 b }。 通 过 使 用 在 w 的 长 度 上 的 归 纳 法 来 证 明 。
b. 使 用 DK- 测 试 来 证 明 G 是 一 个 DCFG。
c. 描 述 DPDA 识 别 L( G ) 的 过 程 。
2.25 设 例 2, 2 8 中 引 入 的 如 下 文 法 为 G4 。使 用 DK- 测 试 来 证 明 Gi 不 是 一 个 DCFG。
R^ S \ T
S— aSb|ab

T-^ aTbb|abb
*
2.26 SA = UG),Gi 在 问 题 2 . 2 5 中 已 被 定 义 。证 明 A 不 是 一 个 DCFL。( 提 示 :假 设 A 是 一 个
DCFL , 考 虑 它 的 DPDAP 。 修 改 P 使 其 输 人 字 母 表 为 { a ,b ,c }。当 它 第 一 次 进 人 一 个 接 受 状
态 时 ,从 此 时 开 始 其 假 定 输 入 中 的 c 都 是 b。修 改 的 P 能 够 接 受 什 么 语 言?

*
.
2 27 设 3 = { WcM f ,),々>0 且 证 明 B 不 是 一 个 DCFL。
*
.
2 28 设 C ={ | e { 0 ,l } *
> 证 明 C 不 是 一 个 DCFL。(提 示 :假 设 当 某 个 DPDAP 在 其 栈 的 最

^
o

顶 部 的 带 有 符 号 x 的 状 态 《7 开 始 时 ,无 论 P 在 此 时 读 入 了 怎 样 的 输 入 串 ,P 都 不 弹 出 在 x 下 面
的 栈 。在 这 种 情 况 下 ,此 时 P 栈 的 内 容 不 会 影 响 它 接 下 来 的 行 为 ,所 以 P 接 下 来 的 行 为 只 依 赖
于 g 和 x。

*
2.29 如 果 我 们 不 允 许 在 CFG 中 有 e 规 则 ,那 么 可 以 简 化 OK- 测 试 。 在 简 化 后 的 测 试 中 ,我 们 只 需
要 检 查 DK 的 每 一 个 接 受 状 态 是 否 有 一 个 单 一 的 规 则 。证 明 一 个 不 带 r 规 则 的 CFG 能 够 通 过 简
第之章上下文无关文法 99

化 后 的 DK - 测 试 当 且 仅 当 它 是 一 个 DCFG 。

2. 30 a. 设 C 是 上 下 文 无 关 语 言 ,尺 是 正 则 语 言。证 明 语 言 CA 尺 是 上 下 文 无 关 的 。
b. 利 用 U) 证 明 语 言
{ a ,b ,c } * ,

^
A ={ w \ w : 且 含 有 数 目 相 同 的 a 、b 和 c }

-
不 是 上 下 文 无 关 的。
设 有 CFG G:



2.31
S aSb | bY | Ya
Y bYlaYle

^
用 通 常 的 语 言 给 出 L( G ) 的 简 单 描 述 ,并 利 用 这 个 描 述 给 出 L( G ) 的 补 集1 7的 CFG。
.
2 32 设 A / B = { w| 且:r G B} , 证 明 如 果 A 是上下文无关语言且 B 是正则语言 ,则 A / B 是
上下文无关语言 。
*
2.33 b > , 给 出 产 生 所 有 a 的个数是 b 的两倍的字符串的语言的 C F G,并证明其正
对 于 字 母 表 2= { a ,
确性 。
*
.
2 34 S C= U # :
y| :
:r ,y 6{ 0, l } ,且 x 关:y },证明 C 是上下文无关语言。
*

2.35 S D = U: :y e , ? } , 证明 D 是上下文无关语言 。

^
*
y U, { 0 l } ,且 丨 x|=|3|
*
; 但 1:
*
2.36 :
设 £ = { W U 关)且 2洋 证 明 :是 上 下 文 无 关 语 言。
.
2 37 对 任 一 语 言 A ,令 运 算 符 S U F F I X( A )= { |
i;存在串 M ,使 ⑽ G A },证明上下文无关语言类在
SUFFIX 运算下封闭 。
.
2 38
CFG G 将其派生岀来恰好需要 2 rz
_ l 步。
设 G 是 一 个 乔 姆 斯 基 范 式 CFG ,证 明 :对 于 任 一 长 度 为 72 U>1 ) 的 字 符 串 加 € L( G ),通过

2.39 设文法 G =( V ,
H < STMT> ) 如 下 :


*

〉< IF- THEN )|


〈STMT〉〈 ASSIGN| < IF- THEN- ELSE )

— —
condition then < STMT )
( IF-THEN ) —► if

〈 IF- THEN- ELSE〉 if condition then < STMT > else〈 STMT〉
( ASSIGN ) a := 1
X = { if » condition,
then ,
else ,
a: = 1}
V = { < STMT〉 ,IF THEN ) , < IF- THEN- ELSE ) , < ASSIGN )
〈 -
>
G 是 程 序 设 计 语 言 的 一 个 片 断 的 文 法 ,虽 然 看 上 去 很 自 然 ,但 它 是 有 歧 义 的 。
a. 证 明 G 是 歧 义 的 。
b. 给 出 一 个 与 G 产 生 相 同 语 言 的 非 歧 义 文 法 。
*
2.40 给 出 下 列 语 言 的 非 歧 义 CFG:
a. { xH 对 于 w 的 每 一 个 前 缀 ,a 的 个 数 不 小 于 b 的 个 数 }
b. { 切
| u;中 a 的 个 数 和 b 的 个 数 相 等 }
c. 中 a 的 个 数 不 小 于 b}
*
2.41 证 明 练 习 2 . 9 中 的 语 言 A 是 固 有 歧 义 的。
2.42 用泵引理证明下述语言不是上下文无关的:

^
a. { 0nlw 0 nln| 0}
Ab. < # 02 # 03 | w 0 }
0n n n

AC. { v u
^
{ a y b} m , 且 加 是 f 的 子 串 }

*
d. { i
^

^ ^^
… # 4 \ k 2 ,t i :{ a ,b ) * , 且 存 在 i j 使 得
^
2 . 4 3 设 语 言 B 由 { 0 ,1 } 上 具 有 回 文 性 质 的 字 符 串 组 成 且 0 , 1 个 数 相 同 ,证 明 B 不 是 上 下 文 无 关 的 。
2.4 4 对 于 字 母 表 2={ 1 , 2 ,3 ,4 } 上 的 语 言 C = { w e i * 丨 在 加 中 ,
同 },证 明 C 不 是 上 下 文 无 关 语 言。
2 . 4 5 证 明 语 言 厂=
1 与 2 的 个 数 相 同,

|存 在 正 整 数 h 有 i 竽 k j } 不 是 上 下 文 无 关 的 。
3 与 4 的个数相
100 第一部分自动机与语言

.
2 46 考 虑 语 言 B = L( G),其中 G 是练习 2.13 中给出的文法 ,定理 2.19 关于上下文无关语言的泵引
理称存在关于 B 的泵长度 p 。试计算 p 的最小值并验证结果的正确性 。
.
2 47 设 G 是一个含有 6 个变元的乔姆斯基范式 CFG ,证明 :如果 G 派生岀某个字符串时使用了至少
26 步 ,则 UG) 是无穷的 。
.
2 48 试给出一个语言示例 ,它不是上下文无关的 ,但却满足 CFL 关于泵引理的三个条件 。要求给出
证明 (参考问题 1.49 中关于正则语言的类似示例)。
#
.
2 49 证明下述强泵引理 ,要求在划分字符串 5 时 ,;
z 和 y 都非空 。
如果 A 是上下文无关语言 ,则存在一个数 I 使得 A 中任一长度不小于纟的字符串都可以划分
成 5 段 ,5 = u v x y z , 且满足下述条件 :
a. 对每一 个 z 0,ux / x y l z G A ,

^

b.幻尹 且
c. | vxy \
A2 .5 0 ^ k 0

参 照 问 题 1. 31 中关于 perfect shuffle 运算符的定义 ,证明上下文无关语言类在 perfect shuffle 运


算下不封闭 。
2.51 参 照 问 题 1.32 中关于 shuffle 运算符的定义 ,证明上下文无关语言类在 shuffle 运算下不封闭 。
*
.
2 52 对于一个语言中的任一字符串 ,如果串的所有前缀也在这个语言内 ,则称该语言是前封闭的 。
证明 :一个无穷大的前封闭上下文无关语言 C 包含一个无穷大的正则语言子集 。
*
2.53 理解问题 1.45 中关于 NOPREFIX( A ) 及 NOEXTEND( A ) 的定义并证明 :
a. 上下文无关语言类在 NOPREHX 下不封闭 。
b. 上下文无关语言类在 NOEXTEND 下不封闭 。
*
.
2 5 4 对 于 字 母 表 2={ 1 ,# } 上 的 语 言 其 中 々 彡0 , G 1 % 且 当 /关 乃
有々关丨,证明 Y 不是上下文无关语言。
2.5 5

^
对 于 字 符 串 w 和 h 如果二者字符数相等且组成的字符相同 (只是字符在串中的顺序不同 ),则

称 在 此 基 础 上 给 出 SCRAMBLE 定义如下 :对字符串


w} 9 对 语 言 A ,有 SCRAMBLE( A )= U
a. 证明 :给定字母表 2={ 0,
| 存在
1},正则语言 SCRAMBLE 运算后成为上下文无关语言。
,有
zt;

)}。
使 得 KSCRAMBLECu;
)= U U
SCRAMBLE( u; 兰

b. 当字母表包含 3 个或更多符号时会有什么样的结果? 证明你的结果 。


2.5 6 给 定 语 言 A , B ,有 A <OB = U: :
ykeA ,yGB ,且
| :r|=|:
y },证明 :如果 A ,B 是正则语言 ,则
|
AOB 上下文无关 。
} , 证 明 A 不是上下文无关语言。

^^
* 2.57 设八 ={ 咖1 |1 { 0,
1} * 且
| 加 = U
| |
2.58 设 2={ 0 ,
1 },B 为 后 一 半 中 至 少 包 含 一 个 1 的 串 的 集 合 。换 句 话 说 ,B = { u v \ u e i'
2 12 ,
*
丨 *
}。
a. 设计一个能识别 B 的 PDA 。
b. 设计一个能识别 B 的 CFG。
2.59 设 2= { 0 ,
1 },Q 为在三分段中间部分包含一个 1 的所有串的语言 ,C2 为 在 三 分 段 中 间 部 分 包
Cl = { x y z \ x , z e i m , 6 2 12 ,

^
含两个 1 的所有串的语言。所以 *
| x =|z|
|
*
bl >,
C2 =
{ x y z \ x 9 z e i*
a. 证明 Q 是 CFL。

12 * I S * 9 \ x\ = \ z \
^\ \
y } 0

b. 证明 C2 不是 CFL。 ^
习题选解
2.3 a.i? ,X ,S ,T; b.a , b ;
c. R d.G 的三个字符串为 ab , ba , aab ;
e. 不在 G 中的三个字符串为 a , b , e ; f.False ;
第夕章上下文无关文法 101

-
g True;
i.True:
h. False
j.True ;
k. False 1.True;
m.True; n.False
o.L( G) 包含所有不具有回文性质的 a 、 b 串。
2.4 a.S -^ R 1 R 1 R 1 R R-* 0 R|1尺

——
| e

-
0 0S0|0S1|ISO|1S1
d. S |
2.6 a. S ^ TaT

——
T |
TT |
aTb bTa|a | e
了生成的字符串满足 a 的个数不少于 b 的个数 ,S 使得 a 的个数增加 1。
c. S TX
T 0 T0|1 T| 1 nX
X^O X I l X j e
2.7 a. PDA 用栈计算出 a 的个数减去 b 的个数的值 ,当计数为正数时进入接受状态 。具体操作如下 :
PDA 扫描输人 ,如果栈顶为 a 时其读到 b ,则将 a 弹出栈顶 。如果栈顶为 b 时其读到 a ,则将 b
弹出栈顶 。 如果栈顶值与读到的值相同 ,则将读到的字符压人栈 。扫描结束后 ,如果栈顶为 a 则
接受 ,否则拒绝 。
c. PDA 扫描输人并将值压人栈直至其读到字符 # ,如果没有出现 # ,则拒绝 。然后 PDA 在输入上
随机移动 ,并非确定性地在某一时刻停止移动 ,在停止点 ,PDA 将下一个输入字符与栈顶符号
进行比较 ,只要不匹配或者在栈非空的情况下已经完成对输入的扫描 ,则拒绝该分支 。在没结

- -- -
束扫描输入情况下如果栈被清空 ,则 PDA 读取余下的输入并进人接受状态 。
2.8 派 生 过 程 如 下:
〈 句子 〉〈 名词短语〈
〉动词短语 〉
〈 复杂名词〈
〉动词短语 〉


〈 冠词〈
〉名词〈
〉动词短语〉

— —
〉动词短语 >
The〈 名词〈
The girl〈 动词短语 〉

———
The girl〈 复杂动词〈〉介词短语〉
The girl〈 动词〈 〉名词短语〈 〉介词短语 〉
The girl touches〈 名词短语〈
〉介词短语 〉
The girl touches〈复杂名词〈 〉介词短语 〉
The girl touches〈冠词〈 〉名词〈〉介词短语 > -►

— ——
The girl touches the〈 名词〉 -
〈 介词短语 〉 ►

The girl touches the boy〈 介词短语 〉


The girl touches 〉复杂名词〉
the boy〈 介词〈
The girl touches the boy with〈 复杂名词〉


The girl touches the boy with〈 冠词 〈 -►
〉名词 〉
The girl touches the boy with the〈 名词 〉
The girl touches the boy with the flower

— - —
另一种最左派生方法如下 :
〈 句子 〉〈 名词短语〈
〉动词短语 〉

—-
〈 复杂名词〈
〉动词短语〉
〈 冠词〈
〉名词〈
〉动词短语〉
The〈 名词〈
〉动词短语〉
102 第一部分自动机与语言

The girl〈 动词短语 〉


The girl〈 复杂动词 〉
—— —
— —
The girl〈 动词〈
〉名词短语 〉
The girl touches〈 名词短语 〉
The girl touches〈 复杂名词〈
〉介词短语〉

—— —
The girl touches〈 冠词〈 〉介词短语 >
〉名词〈 - ►

The girl touches the〈 名词〈


〉介词短语〉
The girl touches the boy〈 介词短语〉


The girl touches the boy〈 介词〈 〉复杂名词 〉
The girl touches the boy with〈 复杂名词 〉
The girl touches the boy with〈冠词〈
〉名词〉 ► -
The girl touches the boy with the〈 名词 〉
The girl touches the boy with the flower
每个派生对应不同的意思 ,对于第一个派生 ,句子的意思是女孩用花去碰男孩 ;第二个派生表明
当女孩碰男孩时他正拿着花 。
2.22 我们使用反证法证明 。假定 it;和 w 是 L( G ) 中 两 个 不 相 同 的 串 ,这 里 G 是 一 个 DCFG。 二 者 都
是 有 效 串 所 以 二 者 都 有 句 柄 ,且 这 些 句 柄 一 定 一 致 ,因 为 我 们 可 以 写 成 和 1 = 妯3 =
x h y, 这 里 /i 是 w 的 句 柄 。因 此 , 和 的 第 一 个 归 约 步 骤 分 别 产 生 有 效 串 M 和 我 们 继 续
^ ^
^

这个过程直到得到 & 和 S ,这 里 & 是 起 始 变 元 。 然 而 & 并 不 会 出 现 在 任 何 规 则 的 右 边 ,所 以

.
2 30
我们不能归约 SlZ。这就是一个矛盾。
^ , Cfli ,
a 设 C 为上下文无关语言 ,尺为正则语言 ,P 为识别 C 的 PDA,D 为 识 别 尺 的 DFA,Q 为 P 的
状态集 ,C 为 D 的状态集 ,构造一个 PDA 用于识别 ?, 的状态集为 QXQ\ 则〆在
实现 P 的动作的同时还能记录下 D 的状态 。它能且只能接受在状态 q e F p X F D 处 停 机 的 字 符
串 u;
,其中 FP 是 尸 的 接 受 状 态 集 , 是 D 的接受状态集 ,因为 CH 尺 能 被 〆 识 别 ,故 其 为
上下文无关语言。
b. 设 尺 是 正 则 语 言 a * b * c * ,如 果 A 是 CFL,则根据 (a ) 有 Afl 尺也是 CFL,然而对于 Afl =

2.42 .
b 设 3 =
|n>0 },由例 2.20 得证其不是上下文无关语言 ,因此 A 不是上下文无关语言。
{ 0”# 02 ”# 03 叫《彡0 },p 为 泵 长 度 ,对于字符串 s =
不能被抽取 。
我们证明
^
wy z 将 多 于 两 个 # ,如 果 把 s 用 # 分为三段 0〃,02 p , 03 fi ,

^
v 和:y 都不可能包含 # ,否则 :
31 *

则至少有一段不能包含 或:v ,因 此 不 在 B 中 ,否则不能保持三段 o 的个数的比例。


c. 设 0={ 如 #〖|其中 w 是 r 的子串 ,
C:

符串 S = MZ;y2:不能被抽取 。
m,
^ 6 } }。设 p 为 泵 长 度 ,
r 6 U, *
W ,我们证明字

V 和:V 不 能 包 含 # ,否 则 将 不 包 含 # ,从 而 此 字 符 串 不 在 C 中 。如果 u 和:y 都 非 空 并


出 现 在 # 的 左 边 ,则 因 其 # 左 边 字 符 多 于 # 右 边 字 符 而 不 在 c 中 ,对于 V、 y 都在林
的 右 边 ,同 理 有 也 不 在 C 中 。 对于 I :y 中有一个非空的情况 ,则把它们看作都出现
在 枓 的 同 一 边 处 理。
还有一种情况是 I :V 都 非 空 且 出 现 在 # 的 两 边 ,这 种 情 况 下 必 有 r 只包含 a , y 只包含 b ( 由
泵定理条件 3 , 丨 v x y I <P), 从 而 左 边 的 b 多于右边的 b,因此其不在 C 中 。
2.50

^
A ={ 0klk \ k 0 }, B = { a b3 M >0 } , 它们的完全间隔交叉 ( perfect shuffle) 操 作 产 生 的 语 言 0 =
{( 0aP( 0 b)Mlb〃
^ ^
) k>0 h 容易看出 A 和 B 是 CFL , 但 C 不是 CFL,证明如下 :
如果 C 是 CFL,设 /> 为 其 泵 长 度 ,s = ( 0a )M 0 b )Mlb )2 * 。因
的 长 度 大 于 户 且 56 C,有 5 =5

满足泵定理的三个条件 。C 中 的 字 符 串 有 1/ 4 长 度 的 1 , 1/8 长 度 的 a , ocy 2 z 也应该满


足 这 个 性 质 ,因 此 必 然 同 时 包 含 1 和 a , 但 因 为 它 们 被 2 /> 个 字 符 分 开 且|iAr y|<p ,所以这 :
是不可能的 ,从而有 C 不是上下文无关的 。
第二部分
Introduction to the Theory of Computation , 3e

可计算性理论
第 3 章|
Introduction to the Theory of Computation . 3e
丘奇-图灵论题

本 书 第 一 部 分 已 经 给 出 了 计 算 设 备 的 一 些 模 型 。有 穷 自 动 机 能 较 好 地 描 述 存 储 资 源 较
少 的 设 备 ,下 推 自 动 机 虽 然 能 描 述 具 有 无 限 存 储 的 设 备 ,但 其 “后 进 先 出” 的 栈 机 制 使 其
能 力 受 到 限 制 ,还 证 明 了 这 些 模 型 对 于 有 些 非 常 简 单 的 任 务 都 不 能 完 成 。由 于 它 们 过 于 局
限 ,因 此 不 能 作 为 计 算 机 的 通 用 模 型 。

3. 1 图灵机
现 在 介 绍 一 个 能 力 更 强 的 计 算 模 型 ,该 模 型 由 图 灵 ( Alan Turing ) 在 1936 年 提 出 ,
称 为 图 灵 机 (Turing machine )。图 灵 机 与 有 穷 自 动 机 相 似 ,但 它 有 无 限 大 容 量 的 存 储 且
可 以 任 意 访 问 内 部 数 据 。图 灵 机 是 一 种 更 加 精 确 的 通 用 计 算 机 模 型 ,能 模 拟 实 际 计 算 机 的
所 有 计 算 行 为 。然 而 图 灵 机 也 有 不 能 解 的 问 题 ,事 实 上 ,这 些 问 题 已 经 超 出 了 计 算 理 论 的
极 限。
图 灵 机 (图 3 - 1 ) 用 一 个 无 限 长 的 带 子 作 为 无 限 存 储 ,它 有 一 个 读 写 头 ,能 在 带 子 上
读 、 写 和 左 右 移 动 。图 灵 机 开 始 运 作 时 ,带 子 上 只 有 输
控制
入 串 ,其 他 地 方 都 是 空 的 ,如 果 需 要 保 存 信 息 ,它 可 将 ~
a b |
a |
b u u
这 个 信 息 写 在 带 子 上 。 为 了 读 已 经 写 下 的 信 息 ,它 可 将
读写头往回移动到这个信息所在的位置。机器不停地计 图 3- 1 图灵机的示意图

算 ,直 到 产 生 输 出 为 止 。机 器 预 置 了 接 受 和 拒 绝 两 种 状 态 ,如 果 进 入 这 两 种 状 态 ,就 产 生
输 出 接 受 (accept ) 或 拒 绝 ( reject )。如 果 不 能 进 人 任 何 接 受 或 拒 绝 状 态 ,就 继 续 执 行 下
去 ,永 不 停 止 。
下 面 是 有 穷 自 动 机 与 图 灵 机 之 间 的 区 别:
1. 图 灵 机 在 带 子 上 既 能 读 也 能 写 。
2. 图 灵 机 的 读 写 头 既 能 向 左 也 能 向 右 移 动 。
3. 图 灵 机 的 带 子 是 无 限 长 的 。
4. 图 灵 机 进 入 拒 绝 和 接 受 状 态 将 立 即 停 机。

^
考虑图灵机 Mh 它 检 查 语 言 } 的 成 员 关 系 ,即 要 设 计 A ,
使 得 如 果 输 入 是 B 的 成 员 ,它 就 接 受 ,否 则 拒 绝 。 为 更 好 地 理 解 ,假 设 你 自 己 是 ,
想 象 你 正 站 在 由 数 百 万 个 字 符 构 成 的 一 英 里 长 的 一 个 输 入 上 ,你 的 任 务 是 确 定 这 个 输 入 是
否 是 B 的 成 员 ,亦 即 ,确 定 这 个 输 入 是 否 包 含 由 符 号 # 分 开 的 两 个 相 同 的 字 符 串 。 这 个 输
入 太 长 ,你 很 难 全 部 记 住 ,但 允 许 你 在 这 个 输 入 上 来 回 移 动 ,并 可 以 做 记 号 。一 个 简 单 的
解 决 办 法 如 下 : 在 # 两 边 对 应 的 位 置 上 来 回 移 动 ,以 检 查 它 们 是 否 匹 配 ,并 使 用 记 号 来 记
录 对 应 的 位 置。
按 上 述 方 法 设 计 M!,让 读 写 头 在 输 入 串 上 多 次 通 过 ,每 一 次 匹 配 # 两 边 的 一 对 字 符 。
为 了 记 录 哪 些 字 符 已 经 被 检 査 过 ,Mr消 去 所 有 已 检 査 过 的 符 号 。 如 果 最 后 所 有 的 符 号 都
被 消 去 ,意 味 着 匹 配 成 功 ,M! 进 人 接 受 状 态 ;如 果 发 现 一 个 不 匹 配 ,就 进 人 拒 绝 状 态 。
襄 J7 章丘奇 图灵论题 - 105

,
M 的算法如下 :
,
M = “对于输入字符串 i t;
:
1. 在 # 两边对应的位置上来回移动 。 检査这些对应位置是否包含相同的符号 ,
如不是 ,或者没有 # ,则拒绝 。为记录对应的符号 ,消去所有检查过的符号 。
2. 当 # 左边的所有符号都被消去时 ,检查 # 的右边是否还有符号 ,如果是 ,则
拒绝 ,否则接受 。

0 1 1 0 0 0 # 0 1 1 0 0 0
图3 2 是 - Mi 在输入 011000 # 011000 开始之 U

后 ,M! 带子的几个非连续的快照 。 x l l 0 0 0 # 0 1 1 0 0 0 U

对图灵的描述概略地说明了一般图灵机
x l l 0 0 0 # x l l 0 0 0 u
的工作方式 ,这里没有给出其全部细节 。像引入有
穷自动机和下推自动机时所做的那样 ,使用形式化
x l l 0 0 0 # x l l 0 0 0 u ..
描述可以描述图灵机的全部细节 。形式化描述简短 X X 1 0 0 0 # x l l 0 0 0 u ...
地说明图灵机模型的形式化定义中的每个部分 ,实 #
X X X X X X X X X X X X U…
际中 ,为避免过于烦琐 ,很少使用图灵机的形式化 接受
描 述。 图 3- 2 图灵机 Afi 对输人 011000 #
011000 的计算示意图
3. 1 . 1 图灵机的形式化定义

图灵机 ,5 的形式如下 :Q X r
带子方格内包含符号
态 r 。第三个分量 L 或 R

图灵机定义的核心是转移函数心它说明了机器如何从一个格局走到下一格局。 对于

则当 5( g ,
Q X r X { L,
a )=( r ,
6,
R },亦即 ,若机器处于状态心读写头所在的
L ) 时 ,机器写下符号 6 以取代
指出在写带之后 ,读写头是向左 ( L ) 还是向右 ( R )
并进人状
移动 。
2,,
图 灵 机 是 一 个 7 元 组 (Q, 5, g accept 5 9 reject ),其 中 :0 , 2 ,
%,r r 都是
有 穷 集 合 ,并 且
1.Q 是 状 态 集 。
2 . 2 是 输 入 字 母 表 ,不 包 括 特 殊 空 白 符 号 U。


3.r 是 带 子 字 母 表 ,其 中 ,u e r ,
4. : Q X r Q X T X { L ,R } 是 转 移 函 数 。

^-
5.% 是 起 始 状 态。
6.qaccept 6 Q 是 接 受 状 态 。
7 reject 6 Q 是 拒 绝 状 态 ,且 9reject々Uept 。
^
图灵机 M =( Q , 2,r ,5,9() ,7accept reject ) 的计算方式如下 :开始时 ,M 以最左边的
^^
( (

个带子方格接收输人 ZSJ — 叫 奶 … 带 子 的 其 余 部 分 保 持 空 白 ( 即 填 以 空 白 符 ),
读写头从最左边的带子方格开始运行 ,注意 2 不含空白符 ,故出现在带子上的第一个空白
符表示输人的结束。M 开始运行后 ,计算根据转移函数所描述的规则进行 。如果 M 试图
将读写头从带子的最左端再向左移岀 ,即使转移函数指示的是 L ,读写头也停在原地不
动 。计算一直持续到它进人接受或拒绝状态 ,此时停机 。如果二者都不发生 ,则 M 将永
远运行下去 。
图灵机计算过程中 ,当前状态 、 当前带子内容和读写头当前位置组合在一起 ,称为图
灵机的格局 (configuration ),常以特殊方式表示 。对于状态 g 和带子字母表 r 上的两个字
106 第二部分可计算性理论

符串 和 ,以 表 示 如 下 格 局 :当 前 状 态 是 g ,当前带子内容是 ,
MI;读写头的当前位

^^
置是 r 的第一个符号 ,带子上 r 的最后一个符号
以后的符号都是空白符 。 例如 ,101 切701111 表
Q7

示如下格局 : 当前带子内容是 101101111 ,当前 U U U < ...


状态是 % ,读写头当前在第二个 0 上 。图 3 3 示 - 图 3- 3 处 于 格 局 1 0 1 1% 0 1 1 1 1 的 图 灵 机
意了处于这个格局的图灵机 。
对图灵机计算方式进行形式化 ,如果图灵机能合法地从格局
产 生 ( yields ) 格 局 C2 , 这个概念的形式化定义如下 :
G — 步进人 C2 , 则 称 格

^
局(
设 6 和 (:是 r 中的符号 , W 和 U 是 r * 中的字符串 ,% 和 是 状 态 ,则 M叫 户;
I 和

是两个格局 。如果转移函数满足 5( % , g ,
6)=( ; c,L ),则说

^
uaqfiv 产 uq acv
这说明了图灵机左移的情形 ,下面是右移情形 。 如果 5( % ,
6 )=( % ,
c,R ),则说
uaq々v 产 生 uacq ■

当读写头处于格局的两个端点之一时 ,会发生特殊变化 。对于左端点 ,如果转移是向


左 移 动 ,则 格 局 产 生 格 局 ( 因 为 不 允 许 机 器 从 带 子 的 最 左 端 移 岀 );如 果 转 移 是

向右移动 ,这个格局产生 eg/ 。对于右端点 ,格局 wa % 等 价 于 因 为 已 假 设 :在 带


子上没有描述的部分都是空格 。这样 ,就能像以前一样处理了 ,因为此时读写头已不再处
于带子的右端点 。
M 在输入 w 上的起始格局 (start configuration ) 是格局而比,表示机器处于起始状态
q0 J 并且读写头处于带子的最左端位置 。在接受格局 ( accepting configuration ) 里 ,状 态
是 9accept 。在拒绝格局 ( rejecting configuration ) 里 ,状态是 ( ejeet 。接受和拒绝状态都是
停机格局 ( halting configuration ),它们都不再产生新的格局 。因为机器只在接收或拒绝
状态下才停机 ,因此可以等价地将转移函数记为心 Q' x r^Q x r x { L,
掉状态 gaeeept 与状态 tejeet 的 Q。 图灵机 iVf 接受 ( accept ) 输入
Ci , C2 > ••• > Ck 使得 :
^
R },其中 Q' 是去
W ,如果存在格局的序列

1.Ci 是 M 在输入 w 上的起始格局 ;


2. 每一个 Ct 产生 C ,+ 1;
3.Ck 是接受格局 。
M 接受的字符串的集合称为 A1 的 语 言 ( language of M ),或被 M 识别的语言 ( lan -
guage recognizzed by M) , 记 为 L( M) 0

如 果 一 个 语 言 能 被 某 一 图 灵 机 识 别 ,则称该语言是图灵可识别的 (Tur -
ing- recognizable ) e 0

在输人上运行一个图灵机时 ,可能出现三种结果 :接 受 、 拒 绝 或 循 环 。 这 里 循 环
( loop ) 仅仅指机器不停机 ,而不一定是这个词的字面所指的那样 ,永远以同样方式重复
同样的步骤 。循环动作可能是简单的 ,也可能是复杂的 ,但都不会导致停机状态 。
对于一个输人 ,图灵机有两种方式不接受它 :一种是进入拒绝状态而拒绝它 ,另一种
是进入循环 。 有时候 ,很难区分机器是进人了循环还是需要耗费长时间的运行 ,因此 ,我

© 有 些 课 本 称 之 为 递 归 可 枚 举 语 言。
-
第J 章 丘 奇 图灵论题 107

们 更 喜 欢 对 所 有 输 人 都 停 机 的 图 灵 机 ,它 们 永 不 循 环 ,称 这 种 机 器 为 判 定 器 ( decider ) ,
因 为 它 们 总 能 决 定 是 接 受 还 是 拒 绝 。 对 于 可 以 识 别 某 个 语 言 的 判 定 器 ,称 其 判 定 ( decide )
该 语 言。
如 果 一 个 语 言 能 被 某 一 图 灵 机 判 定 ,则 称 它 是 图 灵 可 判 定 的 ( Turing de
cidable ) ,简 称 可 判 定 的 (decidable ) ㊀ 。
-
下 面 给 出 一 些 可 判 定 语 言 的 例 子 ,每 一 个 可 判 定 语 言 都 是 图 灵 可 识 别 的 。在 第 4 章 ,
我 们 将 给 出 一 些 图 灵 可 识 别 但 不 可 判 定 的 语 言 例 子。

3. 1 . 2 图灵机的例子
像 处 理 有 穷 自 动 机 和 下 推 自 动 机 那 样 ,为 了 形 式 化 地 描 述 一 个 特 定 图 灵 机 ,可 以 详 细
指 明 它 的 七 个 部 分。但 除 了 最 小 的 机 器 外 ,这 种 细 节 层 次 的 描 述 对 于 大 多 数 图 灵 机 来 说 是
烦 琐 的 ,所 以 这 里 仅 仅 给 出 较 高 层 次 的 描 述 ,因 为 这 已 经 足 够 精 确 ,并 且 容 易 理 解 得 多。
注 意 ,需 要 记 住 ,每 个 较 高 层 次 的 描 述 实 际 上 只 是 它 的 形 式 化 描 述 的 一 个 速 写 ,只 要 耐 心
和 细 致 ,总 能 形 式 化 地 描 述 本 书 中 每 个 图 灵 机 的 所 有 细 节 。
为 帮 助 你 在 形 式 化 描 述 和 较 高 层 次 描 述 之 间 建 立 联 系 ,在 下 面 两 个 例 子 中 给 岀 状 态
图 。如 果 熟 悉 这 样 的 联 系 ,可 以 忽 略 这 些 图 。
描 述 图 灵 机 M2 , 它 判 定 的 语 言 是 所 有 由 0 组 成 、 长 度 为 2 的 方 幂 的 字 符
串 ,即 焱 = { 02 U>o }。
“对 于 输 人 字 符 串 VU :
1. 从 左 往 右 扫 描 整 个 带 子 ,隔 一 个 字 符 消 去 一 个 0 。
2. 如 果 在 第 1 步 之 后 ,带 子 上 只 剩 下 唯 一 的 一 个 0 , 则 接 受 。
3. 如 果 在 第 1 步 之 后 ,带 子 上 包 含 不 止 一 个 0 , 并 且 0 的 个 数 是 奇 数 ,则 拒 绝 。
4. 读 写 头 返 回 至 带 子 的 最 左 端。
5. 转 到 第 1 步 。

每 重 复 一 次 第 1 步 ,消 去 一 半 个 数 的 0 。由 于 在 第 1 步 中 ,机 器 扫 描 了 整 个 带 子 ,故
它 能 够 知 道 它 看 到 的 0 的 个 数 是 奇 数 还 是 偶 数 。如 果 是 大 于 1 的 奇 数 ,则 输 入 中 所 含 的 0
的 个 数 不 可 能 是 2 的 方 幂 ,此 时 机 器 就 拒 绝 。但 是 ,如 果 看 到 的 0 的 个 数 是 1 ,则 输 人 中
所 含 的 0 的 个 数 肯 定 是 2 的 方 幂 ,此 时 机 器 就 接 受 。
下 面 给 岀 M2 =( Q ,2,r ,5, 9l accept reject ) 的形式化描述:

^
• Q — { ql 9 q 2 9 q3
^
, gaccept ,
• 2={ 0 },
9reject
^ J

• r= { o , x ,u> 0

• 将 5 描 述 成 状 态 图 (见 图 3 - 4 )。


• 开 始 、接 受 和 拒 绝 状 态 分 别 是 % ,(7accept 和 reject °
^
在 这 个 状 态 图 中 ,从 % 向 % 转 移 时 出 现 了 标 记 0 U ,R。它 表 示 :当 状 态 为 % 且 读 写


头 读 0 时,机 器 的 状 态 变 为 % ,在 带 子 上 当 前 位 置 写 下 U,并 向 右 移 动 读 写 头 ,换 句 话 说 ,
S ( q 0 ) = ( q2 ,U ,R ) 在从七到 % 的 转 移 中 ,为 清 晰 起 见 ,使 用 了 简 略 记 法 0 R ,它 表 示:
^ 0

© 在些课本称之为递归语言 。
108 第二部分可计算性理论

当机器正在读 0 且状态为 % 时,向右移动 ,但不改变带子 ,因 此 5(g3 ,0 )=((74 ,0 ,


R )。

0->L
x —>R
A
x—

^
>( 3
0-KJ,
R 0—>x, R
u~>R
x —>R u — 0 R
— 0—>x, R

(
^^ U
«coe

—>R
) %

图 3- 4 图 灵 机 M2 的 状 态 图

机器的开始动作是 :在带子中第一个 0 上写下空白符号 ,这 样 ,在第 4 步 中 ,它将能


发现带子的左端点 。 一般使用更具有提示性的符号 (如 # ) 作为左端点的定界符 ,但这里
使用空白符 ,是为了保持带子字母表的规模较小 ,从而使状态图保持较小规模 。例 3.6 给
岀了发现带子的左端点的另一个方法 。
我们给出这个机器在输入 0000 上运行的例子 ,起 始 格 局 是 % 0000 。下 面 是 机 器 所 进
入的格局序列 ,应先从上到下再从左到右地读这个序列 。
qx 0000 U q 5 xOx U U xq xx U
^
Ug 2000 % U xOxU U xxx U
Ux
U X <74
^0 000
3 U g2 xO x U
U xq 2 O x U
g5 U xxx U
U g2 xxx LI
U x0 xg3 U U xxg3 x U U xq 2 xx U
U x0g5 x U U xxxg3 U U xxq 2 x U
Ux
^50 x U U xx
^ 5 xU U xxxg2 U
U xxx U qac cept

在本节的开头 ,已 给 出 了 图 灵 WMi 的非形式化描述 ,下面给出其形式化描

^ M • QQ,{2v
\ ,r ,
=(
^ ,它判定的语言是 5={
j d q l » <?accept »

gaccept ,
, ,
= greiect },
g8
reject ) 切 # 洲 加6 { 0 ,
1 广 }。

i,
• 2={ o , # }且 r ={ o ,
i,#,
x,u}。
• 用状态图描述 5 ( 见 图 3 - 5 )。
• 开始 、 接受和拒绝状态分别是 % 、心eept 和 。


eet

-
图 3 5 描 绘 了 图 灵 机 的 状 态 图 ,其中 ,对于 % 到自身的转移 ,你能看到标记 0 ,
1 R ,它表示当机器在状态 % 且 读 0 或 1 时 ,保持状态 % 不 动 ,读 写 头 向 右 移 动 。它 不
改变带子上的符号 。
第 1 步由状态 % 到 %实 现 ,第 2 步由其余状态实现。为 简 化 状 态 图 ,没 有 在 图 中 显
示 拒 绝 状 态 ,也 没 有 显 示 到 拒 绝 状 态 的 转 移 。 这 种 转 移 隐 含 地 意 味 着 在 下 列 情 形 下 发 生:
一个状态对某个特殊符号没有向外的转移 。 例 如 ,对 于 状 态 % ,没 有 画 出 由 # 向外的箭
头 ,因 此 ,当状态为 % 且读写头下的符号为 # 时 ,就 进 人 拒 绝 状 态 \ejeet 。对 于 这 些 转 移
-
^
弟 章 丘 奇 图灵论题 109


0,
1
'

图 3- 5

1 L
0,

^
图灵机 iV 的状态图

函数 ,如果读写头向右移 ,机器便进入拒绝状态 。

^^
图灵机 M3 做 一 些 初 等 算 术 ,它 判 定 语 且 ,>1}。
M3 =“对于输入字符串 zu :
1. 从左往右扫描输入 ,确认输入具有形式 a + b+ C+ ,否则拒绝 。
2. 读写头返回到带子的左端点 。
3. 消去一个 a ,并向右扫描直到 b 出现 。在 b 与 c 之间来回移动 ,成对地消去 b
和 c ,直到把所有的 b 都消去 。如果 c 已经全被消去后还有 b ,则拒绝 。
4. 如果还有 a 未消去 ,则恢复所有已消去的 b ,再重复第 3 步 。如果所有的 a 都
已被消去 ,则检査所有的 c 是否都已被消去 。如果是则接受 ,否则拒绝 。

现在仔细检查 M3 的四个步骤 。在第 1 步 ,机器的运行就像有穷自动机一样 ,当读写
头从左往右移动时 ,没有必要去写 ,只要用它的状态来跟踪输入字符串 ,看其是否具有适
当的形式即可 。
步骤 2 似简实妙 。 这个图灵机怎么才能找到输入带子的左端点呢? 找到输入的右端点
是容易的 ,因为输入以空白符终止 。但开始时 ,左端点并没有终止符 ,机器发现其带子左
端点的一种方法是 :当读写头从左端点的符号开始运行时 ,就以某种方式对这个符号作个
标记 ,这样 ,若机器想要它的读写头回到左端点时 ,就可以向左扫描直到发现这个记号 。
例 3.4 说明了这种方法 ,它以空白符作为带子左端点的标记 。
常常利用图灵机模型的定义中提供的条件来发现带子左端点。回忆一下 ,如果机器试
图让其读写头移出带子的左端点 ,它就待在原地不动 ,可利用这个特点来设置左端点探测
器 。 为了探测读写头是否正在左端点上 ,机器可以在当前位置写下一个特殊符号 ,同时在
控制器中记下它取代的符号 ,然后试着让读写头向左移 。如果它还在这个特殊符号上 ,则
这次左移没有成功 ,由此可知 ,读写头肯定在左端点上 ;如果已不在这个特殊符号上 ,而
在另一个不同的符号上 ,则带子上这个位置的左边肯定还有符号 ,这就完成了探测 。在进
一步运行之前 ,必须保证已将那个改变了的符号还原为原来的符号。
对于第 3 、 4 步分别使用不同状态可以直接实现它们 。 ■
110 第二部分可计算性理论

图 灵 机 M4 解 所 谓 的 元 素 区 分 问 题 ( element distinctness problem )。给 出 由


{ 0 , 1 } 组 成 的 字 符 串 系 列 ,字 符 串 之 间 用 符 号 # 隔 开 , 的 任 务 是 :如 果 此 序 列 中 的 所
有 字 符 串 都 不 同 ,则 接 受 。此 语 言 是 :
E= { … # 工/ Uz G { 0 ,
1} ,
*
且 对 任 意 有 Xi Xj}
机 器 M4 将:Ti 与:r2 到:TZ 进 行 比 较 ,然 后 将:T2 与 X3 到 :
^
n 进 行 比 较 ,依 此 类 推 。M4 判 定
这 个 语 言 的 非 形 式 化 描 述 如 下。
M4 =“对 于 输 入 "W :
1. 在 最 左 端 的 带 子 符 号 的 顶 上 做 个 记 号 。如 果 此 带 子 符 号 是 空 白 符 ,则 接 受 。
如 果 此 符 号 是 # ,则 进 行 下 一 步 。否 则 ,拒 绝 。
2. 向 右 扫 描 至 下 一 个 # ,并 在 其 顶 上 做 第 二 个 记 号 。 如 果 在 遇 到 空 白 符 之 前 没
有 遇 到 # ,则 带 子 上 只 有:n ,因 此 接 受 。
3. 通 过 来 回 移 动 ,比 较 做 了 记 号 的 # 的 右 边 的 两 个 字 符 串 ,如 果 它 们 相 等 ,则
拒 绝。
4. 将 两 个 记 号 中 右 边 的 那 个 向 右 移 到 下 一 # 上 。 如 果 在 碰 到 空 白 符 之 前 没 有 遇
到 枯 ,则 将 左 边 的 记 号 向 右 移 到 下 一 个 # 上 ,并 且 将 右 边 记 号 移 到 后 面 的 #
上 。如 果 这 时 右 边 记 号 还 找 不 到 # ,则 所 有 的 字 符 串 都 已 经 比 较 过 了 ,因 而
接 受。
5. 转 到 第 3 步 继 续 执 行 。

M4 阐 述 了 对 带 子 符 号 做 标 记 的 技 术 。在 第 2 步 ,它 在 一 个 符 号 的 顶 上 放 置 了 一 个 记
号 (本 例 中 ,这 个 符 号 是 # )。实 际 上 ,该 机 器 的 带 子 字 母 表 中 有 两 个 不 同 的 符 号 : # 和

合 。“机 器 在 # 顶 上 放 置 了 一 个 记 号 的 含 义 是 :它 将 带 有 点 的 # 写 在 这 个 位 置 。“把
这 个 记 号 去 掉” 的 含 义 是 :机 器 写 下 了 那 个 没 有 点 的 符 号 # 。一 般 说 来 ,可 能 需 要 在 各 种
不 同 的 带 子 符 号 上 做 记 号 ,要 做 到 这 一 点 ,只 要 带 子 字 母 表 中 包 含 这 些 符 号 的 带 点 形 式 即
可。
从 以 上 这 些 例 子 中 可 以 得 出 如 下 结 论 : 描 述 的 语 言 A ,B ,C 和 :都 是 可 判 定 的 。由
于 每 个 可 判 定 语 言 都 是 图 灵 可 识 别 的 ,所 以 这 些 语 言 都 是 图 灵 可 识 别 的 。 而 要 说 明 一 个 语
言 图 灵 可 识 别 但 不 可 判 定 ,则 比 较 困 难 ,将 在 第 4 章 中 介 绍 。

3.2 图灵机的变形
其 他 形 式 的 图 灵 机 还 很 多 ,例 如 含 有 多 个 带 子 的 或 非 确 定 性 的 图 灵 机 ,它 们 被 称 为 图
灵 机 模 型 的 变 形 ( variant ) , 原 来 的 模 型 与 它 所 有 合 理 的 变 形 有 着 同 样 的 能 力 ,也 即 识 别
相 同 的 语 言 类 。本 节 将 描 述 这 些 变 形 并 证 明 它 们 在 识 别 能 力 上 的 等 价 性 。虽 然 它 们 的 定 义
有 了 变 化 ,但 它 们 的 能 力 却 没 有 改 变 ,在 形 式 变 化 中 保 持 不 变 的 性 质 称 为 稳 健 性 ( robust -
ness )。 有 穷 自 动 机 和 下 推 自 动 机 在 某 种 程 度 上 都 是 稳 健 的 模 型 ,但 图 灵 机 更 具 惊 人 的 稳
健 性。
为 说 明 图 灵 机 模 型 的 稳 健 性 ,先 对 转 移 函 数 的 形 式 在 允 许 范 围 内 做 小 改 动 。在 原 来 的
定 义 中 ,转 移 函 数 强 迫 读 写 头 在 每 一 步 之 后 都 要 向 左 或 向 右 移 动 ,不 能 仅 仅 待 着 不 动 ,如
果 允 许 图 灵 机 读 写 头 有 保 持 不 动 的 能 力 ,则 转 移 函 数 应 有 如 下 的 形 式 :5:Q x r
{ L ,R ,S } 0
-
这 个 特 点 能 否 使 图 灵 机 能 够 识 别 更 多 的 语 言 呢? 也 即 能 否 增 强 它 的 识 别 能 力
Qxrx
-
丘奇 图灵论题 111

呢? 当然不能 ,因为我们能将任何具有这个特点的图灵机转变为一个没有这个特点的图灵
机 ,做法是 :用两个转移替代每一个 “待着不动” 的转移 ,第一个是向右移动 ,第二个是
向左返回 。
这个例子包含了证明各种变形图灵机之间等价性的关键 : 为证明两个模型是等价的 ,
只要证明它们能相互模拟即可 。

3. 2. 1 多带图灵机
多带图灵机 ( multitape Turing machine ) 很像普通图灵机 ,只是有多个带子 ,每个带
子都有自己的读写头 ,用于读和写 。开始时 ,输入岀现在第一个带子上 ,其他的带子都是
空白的 。转移函数改为允许多个带子同时进行读 、 写和移动读写头 ,其形式为 :
Q X r k ^ Q X r k X { L ,R ,S } k
d:
此处纟是带子的个数 。表达式
S ( q{ , ••• , ak ) = ^ b\
, ••• > bk ,
L,R ," ,
* L)
指的是 :若机器处于状态 % ,读写头 1 到々所读的符号分别是 到以 ,则机器转移到状
态 q 各读写头分别写下符号卜到并按此式所指示的那样移动每个读写头 。
” 多带图灵机看上去比普通图灵机的能力强 ,但可以证明它们是等价的 。回忆一下 :若
两个机器识别相同的语言 ,则它们是等价的 。
每 个 多 带 图 灵 机 等 价 于 某 一 个 单 带 图 灵 机。
证明将一个多带图灵机 M 转换为一个与之等价的单带图灵机 S ,关键是怎样用 S 来
模 拟 M。
假设 M 有々个带子 ,S 把此 A 个带子的信息都存储在它的唯一带子上 ,并以此来模拟々
个带子的效果。它用一个新的符号 # 作为定界符 ,以分开不同带子的内容 。除了带子内容之
外 ,S 还必须记录每个读写头的位置。为此 ,它在一个符号的顶上加个点 ,以此来标记读写
头在其带子上的位置 ,S 把它们想象为虚拟带子和虚拟读写头。像以前一样 ,加点的带子符
号应是已经加进带子字母表的新符号 。 图 3 6 说明了怎样用一个带子来表示三个带子 。-

S
1 # 1 a1 a1 a1 #1 b
-
图3 6 用一个带子来表示三个带子

S = “对于输入
1. S 在自己的带子上放入

祛 W\ W 2 •* * # U# U#…#
此格式表示了 M 的全部々个带子的内容 。
2. 为了模拟多带机的一步移动 ,S 在其带子上从标记左端点的第一个 # 开始扫
描 ,一直扫描到标记右端点的第 U + 1 ) 个 # ,其目的是确定虚拟读写头下
112 第二部分可计算性理论

的 符 号 。然 后 S 进 行 第 二 次 扫 描 ,并 根 据 M 的 转 移 函 数 指 示 的 运 行 方 式 更 新
带 子。
3. 任 何 时 候 ,只 要 S 将 某 个 虚 拟 读 写 头 向 右 移 动 到 某 个 # 上 面 ,就 意 味 着 M 已 将
自 己 相 应 的 读 写 头 移 动 到 了 其 所 在 的 带 子 中 的 空 白 区 域 上 ,即 以 前 没 有 读 过 的
区 域 上 。因 此 ,S 在 这 个 带 子 方 格 上 写 下 空 白 符 ,并 将 这 个 带 子 方 格 到 最 右 端 的

各 个 带 子 方 格 中 的 内 容 都 向 右 移 动 一 格 。然 后 再 像 之 前 一 样 继 续 模 拟 。 ■

一 个 语 言 是 图 灵 可 识 别 的 ,当 且 仅 当 存 在 多 带 图 灵 机 识 别 它 。
证 明 一 个 图 灵 可 识 别 语 言 可 由 一 个 普 通 的 ( 单 带 ) 图 灵 机 识 别 ,这 个 普 通 图 灵
机 是 多 带 图 灵 机 的 一 个 特 例 ,这 就 证 明 了 此 推 论 的 一 个 方 向 。 另 一 个 方 向 可 由 定 理
3.8 得证。 ■

3 . 2.2 非确定型图灵机
非 确 定 型 图 灵 机 有 如 其 名 :在 计 算 过 程 中 ,机 器 可 以 在 多 种 可 能 性 动 作 中 选 择 一 种 继
续 进 行 。它 的 转 移 函 数 具 有 如 下 形 式 :
Q X r^P ( Q X r X { L,R } )
5:
其 计 算 是 一 棵 树 ,不 同 分 支 对 应 着 机 器 不 同 的 可 能 性 动 作 。如 果 计 算 的 某 个 分 支 导 致 接 受
状 态 ,则 机 器 接 受 该 输 入 。如 果 需 要 复 习 非 确 定 性 ,参 看 1 . 2 节 ,现 在 证 明 非 确 定 性 不 会
影 响 图 灵 机 模 型 的 识 别 能 力。
料 腿 碰 似 每 个 非 确 定 型 图 灵 机 都 等 价 于 某 一 个 确 定 型 图 灵 机。
证 明 思 路 用 确 定 型 图 灵 机 D 来 模 拟 非 确 定 型 图 灵 机 iV 的 证 明 思 路 是 :让 D 试 验 iV
的 非 确 定 型 计 算 的 所 有 可 能 分 支 。 若 D 能 在 某 个 分 支 到 达 接 受 状 态 ,则 接 受 ;否 则 D 的
模 拟 将 永 不 终 止。
将 iV 在 输 入 W 上 的 计 算 看 作 一 棵 树 ,树 的 每 个 分 支 代 表 非 确 定 型 图 灵 机 的 一 个 分 支 ,
结 点 是 N 的 一 个 格 局 ,根 是 起 始 格 局 ,图 灵 机 D 在 这 棵 树 上 搜 索 接 受 格 局。仔 细 地 引 导
搜 索 是 非 常 重 要 的 ,以 免 D 不 能 访 问 整 棵 树 。一 个 诱 人 ( 但 是 坏 ) 的 想 法 是 : D 使 用
“深 度 优 先” 策 略 搜 索 此 树 ,这 种 搜 索 需 要 记 录 下 其 搜 索 的 某 个 分 支 下 的 所 有 子 分 支 ,然
后 再 转 去 搜 索 另 一 个 分 支 。如 果 这 样 ,D 有 可 能 要 记 录 一 个 无 限 分 支 ,因 而 要 无 限 记 录 下
去 ,也 就 不 能 发 现 在 其 他 分 支 上 的 接 受 格 局 。 为 此 我 们 采 用 “宽 度 优 先” 策 略 搜 索 整 棵
树 ,这 个 策 略 是 :在 搜 索 一 个 深 度 内 的 所 有 分 支 之 后 ,再 去 搜 索 下 一 个 深 度 内 的 所 有 分
支 。此 方 法 能 保 证 D 可 以 访 问 树 的 所 有 结 点 ,直 到 它 遇 到 接 受 格 局 。
证 明 模 拟 确 定 型 图 灵 机 D 有 三 个 带 子 ,根 据 定 理 3.8 , 这 等 价 于 只 有 一 个 带 子 。机
-
器 D 将 这 三 个 带 子 用 于 专 门 用 途 。见 图 3 7。第 一 个 带 子 只 包 含 输 入 串 ,且 不 再 改 变 ;第
二 个 带 子 存 放 N 的 带 子 中 的 内 容 ,此 内 容 对 应 iV 的 非 确 定 型 计 算 的 某 个 分 支 ;第 三 个 带
子 记 录 D 在 iV 的 非 确 定 型 计 算 树 中 的 位 置 。
首 先 考 虑 第 三 个 带 子 上 表 示 的 数 据。
N 的 每 个 格 局 确 定 一 个 集 合 ,它 是 由 此 ... 输入带
D
格 局 可 能 转 移 到 的 所 有 下 一 格 局 组 成 ,这 U ... 模拟带
些 下 一 格 局 是 由 iV 的 转 移 函 数 指 定 的 。
|... 地址带
3丨u
iV 的 非 确 定 型 计 算 中 的 每 个 结 点 最 多 有 6
个 子 结 点 ,其 中 6 是 上 述 集 合 中 最 大 的 集 图3 7- 确 定 型 图 灵 机 D 模拟非确定型图灵机 N
-
丘奇 图灵论题 113

合 所 含 的 元 素 个 数 。对 树 的 每 个 结 点 ,可 以 给 其 分 配 一 个 地 址 ,它 是 字 母 表 八 ={ 1 ,2 ,… ,
b ) 上 的 一 个 串 。例 如 ,把 地 址 231 分 配 给 按 以 下 方 式 到 达 的 结 点 : 从 根 出 发 走 到 它 的 第
二 个 子 结 点 ,再 由 此 走 到 第 三 个 子 结 点 ,最 后 由 此 走 到 第 一 个 子 结 点 。此 串 中 的 数 字 告 诉
我 们 : 在 模 拟 N 的 非 确 定 型 计 算 的 一 个 分 支 时 下 一 步 应 做 什 么 。如 果 一 个 格 局 拥 有 的 选 择
太 少 ,则 一 个 符 号 可 能 不 对 应 任 何 选 择 ,此 种 情 况 下 ,地 址 将 无 效 ,不 对 应 任 何 结 点。第 三
个带子上包含 n 上 的 一 个 串 ,它 代 表 N 的 计 算 树 中 的 如 下 分 支 :起 点 是 根 ,终 点 是 此 串 表
示 的 地 址 所 对 应 的 结 点 ,除 非 这 个 地 址 是 无 效 的 。 空 串 是 树 根 地 址 。 D 的 描 述 如 下 :
1. 开 始 时 ,第 一 个 带 子 包 含 输 入 W ,第 二 和 第 三 个 带 子 都 是 空 的 。
2. 把 第 一 个 带 子 复 制 到 第 二 个 带 子 上 ,并 将 第 三 个 带 子 的 字 符 串 初 始 化 为 e 。
3. 用 第 二 个 带 子 去 模 拟 iV 在 输 入 w 上 的 非 确 定 型 计 算 的 某 个 分 支 。在 iV 的 每 一 步 动
作 之 前 ,查 询 第 三 个 带 子 上 的 下 一 个 数 字 ,以 决 定 在 iV 的 转 移 函 数 所 允 许 的 选 择 中 作 何
选 择 。如 果 第 三 个 带 子 上 没 有 符 号 剩 下 ,或 这 个 非 确 定 型 的 选 择 是 无 效 的 ,则 放 弃 这 个 分
支 ,转 到 第 4 步 。 如 果 遇 到 拒 绝 格 局 也 转 到 第 4 步 。 如 果 遇 到 接 受 格 局,则 接 受 这 个
输 入。
4. 在 第 三 个 带 子 上 ,用 字 符 串 顺 序 的 下 一 个 串 来 替 代 原 有 的 串 。转 到 第 2 步 ,以 模 拟
N 的 计 算 的 下 一 个 分 支。 s
一 个 语 言 是 图 灵 可 识 别 的 ,当 且 仅 当 存 在 非 确 定 型 图 灵 机 识 别 它 。
证 明 确 定 型 图 灵 机 自 然 是 一 个 非 确 定 型 图 灵 机 ,此 推 论 的 一 个 方 向 由 此 立 刻 得 证 。
另 一 个 方 向 可 由 定 理 3.1 0 得 证。 篇

可 以 修 改 定 理 3.1 0 的 证 明 ,使 得 如 果 iV 在 计 算 的 所 有 分 支 上 都 能 停 机 ,则 D 也 总 能
停 机 。如 果 对 所 有 输 人 所 有 分 支 都 停 机 ,则 称 这 个 非 确 定 型 图 灵 机 是 一 个 判 定 器 ( decid -
. 练 习 3.3 要 求 以 这 种 方 式 修 改 此 证 明 ,以 得 到 定 理 3.1 0 的 下 列 推 论。
er )
一 个 语 言 是 可 判 定 的 ,当 且 仅 当 存 在 非 确 定 型 图 灵 机 判 定 它 。

3.2. 3 枚举器
前 面 的 脚 注 曾 经 提 到 ,有 人 使 用 术 语 递 归 可 枚 举 语 言 来 代 替 图 灵 可 识 别 语 言 。 这 个 术
语 起 源 于 称 为 枚 举 器 ( enumerator ) 的 机 器 ,它 是 图 灵 机 的 一 种 变 形 。 概 略 地 说 ,枚 举 器
是 带 有 打 印 机 的 图 灵 机 ,图 灵 机 把 打 印 机 当 作 输 出 设 备 ,从 而 可 以 打 印 串 。 每 当 图 灵 机 想
在 打 印 序 列 中 增 加 一 个 串 时 ,就 把 此 串 送 到 打 印 机 。 练 习 3 . 4 要 求 给 出 枚 举 器 的 形 式 定
-
义 。图 3 8 给 出 了 这 个 模 型 的 示 意 图 。
枚举器 :以 空 白 输 人 的 工 作 带 开 始 运 行 ,如
果 不 停 机 ,它 可 能 会 打 印 出 串 的 一 个 无 限 序 列 。 打印机
控制器
枚举器 E 所枚举的语言是最终打印出的串的集合,
而 且 E 可 能 以 任 意 顺 序 生 成 这 个 语 言 中 的 串 ,甚 0 0 U ... 工 作 带

至 还 会 有 重 复 。下 面 建 立 枚 举 器 和 图 灵 可 识 别 语 图 3- 8 枚举器的示意图
言 间 的 联 系。
一 个 语 言 是 图 灵 可 识 别 的 ,当 且 仅 当 存 在 枚 举 器 枚 举 它 。
证 明 首 先 证 明 :如 果 有 枚 举 器 E 枚 举 语 言 A ,则 有 图 灵 机 M 识 别 A 。图 灵 机 M 按
如下方式运行:
114 第二部分可计算性理论

M =“ 对于输入 w:
1. 运行 E。每当 输出一个串时 ,将之与 比较 。
2. 如果 w 曾经在
显然 ,M 接受在 E 的输出序列中出现过的那些串 。
^
:的输出中出现过 ,则接受 。”

现在证明另一个方向 。设 51 ,
&,s3 ,… 是 2 * 中的所有可能的串 ,如果图灵机 M 识别
语言 A ,则为 A 构造枚举器 :如下 :
=“忽略输入 。
1. 对 i = l ,2 ,3 , … ,重复下列步骤 。
2 对 以, 52 » 9 Si 中的每一个 ,M 以其作为输入运行〖 步 。

3. 如果有计算接受 ,则打印岀相应的巧 。 ”

如果 M 接受串它终将出现在 生成的打印列表中 。事实上 ,它将在此列表中出现
无限多次 ,因为每一次重复步骤 1 ,M 在每一个串上都从头开始运行 。这个过程有使 M 在
所有可能的输入上并行运行的效果 。 ■

3 . 2. 4 与其他模型的等价性
至此 ,已经介绍了图灵机的多种变形 ,并证明了它们在能力上是等价的 。人们还提出
了许多其他的通用计算模型 ,其中的一些与图灵机十分相似 ,而另一些则相差甚远 ,但都
具有图灵机的本质特征 ,即可以无限制地访问无限的存储器 ,这个特征把它们和有穷自动
机 、 下推自动机等能力较弱的模型区别幵来 。 值得注意的是 ,已经证明 :具有此特点的所
有模型在能力上都是等价的 ,只要它们满足一些合理的必要条件即可e 。
为理解这种现象 ,考虑程序设计语言中的类似情形 。许多程序设计语言 ( 如 Pascal 和
LISP) 从类型和结构上看 ,它们相去甚远 ,那么一个算法是否只能在其中一个上执行而不
能在另一个上执行呢? 当然不是 ,我们既能将 LISP 编译到 Pascal ,也能将 Pascal 编译到
LISP , 这意味着两个语言描述了完全相同的算法类 ,其他合理的程序设计语言也是一样 。
计算模型间的普遍等价性也基于完全同样的原因 ,任意两个满足合理条件的计算模型都能
相互模拟 ,从而在能力上是等价的 。
这种等价现象有着重要的哲学内涵 ,虽然计算模型是多种多样的 ,但它们所描述的算
法类只有一个 。单个计算模型的定义有一定的随意性 ,但从根本上说它所描述的算法类是
自然的 ,因为它和其他模型所描述的类是一样的 。这种现象对于数学也有深远的意义 ,下
一节将对此进行说明 。

3.3 算法的定义
非形式化地说 ,算法是为实现某个任务而构造的简单指令集 。在日常用语中 ,算法有
时称为过程或处方 。算法在数学中也起着重要的作用 ,古代数学文献中包含了各种各样任
务的算法描述 ,如寻找素数和最大公因子 、 在当代数学中 ,更是充满了算法 。
虽然算法在数学中已有很长的历史 ,但在 20 世纪之前 ,算法概念本身一直没有精确
的定义 。当时的数学家对下述问题只有直观的认识 :什么是算法? 在使用和描述算法时应
依赖什么? 这种直观认识对深人理解算法是不够的 。下面的故事说明了算法的精确定义对

© 例如 ,“在一步中只能执行有限的工作量” 就是这样一个条件 。
襄 J7 章 丘 奇 -图灵论题 115

一 个 重 要 数 学 问 题 是 多 么 的 关 键。

3.3. 1 希尔伯特问题
1900 年 ,数 学 家 希 尔 伯 特 在 巴 黎 举 行 的 世 界 数 学 家 大 会 上 发 表 了 至 今 仍 然 著 名 的 演
说。在 演 说 中 ,他 提 出 了 23 个 数 学 问 题 ,并 认 为 它 们 是 对 下 一 个 世 纪 的 挑 战 ,其 中 的 第
10 个 问 题 就 是 关 于 算 法 的 。
在 描 述 这 个 问 题 之 前 ,先 简 单 讨 论 多 项 式 ( polynomial )。一 个 多 项 式 是 一 些 项 ( term )
的 和 ,其 中 每 个 项 都 是 一 个 常 数 和 一 些 变 元 的 积,常 数 称 为 系 数 ( coefficient ) 例 如 , .
6 •x y z • z= 6 x3 y z2
是 一 个 项 ,其 系 数 是 6; 又 如 ,
6x3 y z2 + Z x y 2 — x — 10
3

是 一 个 多 项 式 ,它 有 四 个 项 和 三 个 变 元:r 、 和 z 。本 节 讨 论 中 ,只 考 虑 系 数 是 整 数 的 多

^
项 式 。多 项 式 的 一 个 根 ( root ) 是 对 它 的 变 元 的 一 个 赋 值 ,使 得 此 多 项 式 的 值 为 0。 上 述
多 项 式 的 一 个 根 是 x = 5 , y = 3 和 z = 0 , 这 个 根 是 个 整 数 根 ( integral root ),因 为 所 用 的
变 元 都 被 赋 予 整 数 值 。有 些 多 项 式 有 整 数 根 ,有 些 则 没 有 。
希 尔 伯 特 第 1 0 问 题 旨 在 设 计 一 个 算 法 来 检 测 一 个 多 项 式 是 否 有 整 数 根 。他 没 有 用 算
e 。有 意 思 的
法 这 个 术 语 ,而 是 用 这 样 一 句 短 语 :“ 通 过 有 限 多 次 运 算 就 可 以 决 定 的 过 程”
是 ,从 希 尔 伯 特 对 这 个 问 题 的 陈 述 中 可 以 看 出 ,他 明 确 地 要 求 设 计 一 个 算 法 ,因 此 ,他 明
显 地 假 设 这 样 的 算 法 存 在 ,人 们 所 要 做 的 只 是 找 到 它 。
现 在 我 们 知 道 ,这 个 任 务 没 有 算 法 ,它 在 算 法 上 是 不 可 解 的 。但 对 于 那 个 时 期 的 数 学
家 来 说 ,以 他 们 对 算 法 的 直 观 认 识 ,得 出 这 样 的 结 论 是 不 可 能 的 。这 个 直 观 概 念 也 许 适 用
于 给 出 一 些 任 务 的 算 法 ,但 若 将 之 用 于 证 明 某 个 特 定 任 务 的 算 法 不 存 在 ,就 毫 无 用 处 了。
证 明 算 法 不 存 在 需 要 给 出 算 法 的 明 确 的 定 义 ,第 1 0 问 题 的 进 展 必 须 等 待 这 样 的 定 义 。
在 丘 奇 ( Alonzo Church ) 和 图 灵 ( Alan Turing ) 于 1936 年 写 的 文 章 中 ,这 样 的 定 义
终 于 被 给 出 。丘 奇 使 用 称 为I演 算 的 记 号 系 统 来 定 义 算 法 ,图 灵 使 用 机 器 来 做 同 样 的 事
情 。这 两 个 定 义 后 来 被 证 明 是 等 价 的 ,算 法 的 非 形 式 化 概 念 和 精 确 定 义 之 间 的 这 个 联 系 从
-
此 被 称 为 丘 奇 图 灵 论 题 (Church-Turing thesis ) ,如 图 3 - 9 所 示 。

算法的直观概念 等于 图灵机算法

图 3- 9 -
丘奇 图灵论题

-
丘 奇 图 灵 论 题 提 出 的 算 法 定 义 是 解 决 希 尔 伯 特 第 1 0 问 题 所 必 需 的 。1 9 7 0 年 ,马 提 亚
塞 维 齐 ( Yuri Matijasevic ) 在 戴 维 斯 ( Matin Davis )、普 特 纳 姆 ( Hilary Putnam ) 和 罗 宾
逊 ( Julia Robinson ) 等 人 工 作 的 基 础 上 ,证 明 了 检 查 多 项 式 是 否 有 整 数 根 的 算 法 是 不 存
在 的 。第 4 章 将 介 绍 一 种 技 术 ,它 可 以 被 用 来 证 明 这 个 结 论 及 证 明 另 外 一 些 问 题 也 是 算 法
上 不 可 解 的。
现 在 用 上 述 术 语 来 重 新 陈 述 希 尔 伯 特 第 1 0 问 题 ,这 样 做 有 助 于 一 些 论 题 的 引 入 ,这
些 论 题 将 在 第 4 章 和 第 5 章 中 讨 论 。设

© 从德语原文翻译 。
116 第二部分可计算性理论

户是有整数根的多项式}
本 质 上 ,希 尔 伯 特 第 1 0 问 题 是 问 :集 合 D 是 不 是 可 判 定 的? 答 案 是 否 定 的 。作 为 比 较 ,
先 证 明 D 是 图 灵 可 识 别 的 。在 证 明 之 前 ,先 讨 论 一 个 简 单 问 题 ,它 与 希 尔 伯 特 第 1 0 问 题
非 常 类 似 ,所 不 同 的 是 现 在 仅 考 虑 只 有 一 个 变 元 的 多 项 式 ,如 4P — 2:r +:r — 7。设
2

0 1 ={ /|
> /> 是 有 整 数 根 的 1 的 多 项 式 }

下面是识别 R 的 图 灵 机 :
=“输 入 是 关 于 变 元 :
r 的一个多项式 p。
1. 当 相 继 被 设 置 为 值 0 ,1 ,一 1 ,2 , 一 2 ,3 , 一 3 ,… 时 ,求 的 值 。一 旦
求 得 /> = 0 , 就 接 受 。

如 果 /> 有 整 数 根 ,以1 最 终 将 找 到 它 ,从 而 接 受 ;如 果 p 没 有 整 数 根 ,则 ]

^
1 将永远
运 行 下 去 。 对 于 多 个 变 元 的 情 形 ,可 以 设 计 一 个 类 似 的 图 灵 机 M 来 识 别 D ,只 是 M 要 检
查 多 个 变 元 所 有 可 能 取 的 整 数 值。
Mi 和 M 都 是 识 别 器 而 非 判 定 器 。 Mi 可 以 被 转 换 成 R 的 判 定 器 ,因 为 可 以 算 出 一 个
上 界 ,使 得 一 个 单 变 元 的 所 有 根 都 在 这 个 上 界 内 ,这 样 ,只 要 在 这 个 上 界 以 内 进 行 搜 索 即
可 。在 问 题 3.1 0 中 要 求 证 明 :一 个 多 项 式 的 根 一 定 在 下 列 值 之 间 :
max

其 中 々 是 此 多 项 式 中 项 的 个 数 ,cmax 是 绝 对 值 最 大 的 系 数 ,C1 是 最 高 次 项 的 系 数 。如 果 在
这 个 上 界 内 找 不 到 根 ,则 机 器 就 拒 绝 。 马 提 亚 塞 维 齐 ( Matijasevisc ) 定 理 表 明 : 对 于 多
变 元 多 项 式 ,计 算 这 样 的 上 界 是 不 可 能 的 。

3 . 3.2 描述图灵机的术语
现 在 到 了 计 算 理 论 研 究 的 转 折 点 。讨 论 对 象 还 是 图 灵 机 ,但 从 现 在 起 ,真 正 焦 点 是 算
法 ,而 图 灵 机 只 是 被 用 作 算 法 定 义 的 一 个 精 确 模 型 。 我 们 将 忽 略 图 灵 机 本 身 的 广 博 理 论 ,
也 不 过 多 地 浪 费 时 间 在 图 灵 机 的 低 层 次 程 序 设 计 上 。我 们 只 需 要 相 信 图 灵 机 刻 画 了 所 有 的
算 法。
在 承 认 这 一 点 的 前 提 下 ,下 面 将 图 灵 机 算 法 的 描 述 方 式 标 准 化 。在 研 究 开 始 时 ,人 们
总 要 问 :在 描 述 算 法 时 ,什 么 样 的 详 细 程 度 是 适 当 的? 学 生 通 常 也 会 问 这 样 的 问 题 ,特 别
在 他 们 准 备 着 手 解 题 和 做 练 习 时 更 会 这 样 问 。描 述 的 详 细 程 度 有 三 种 :第 一 种 是 形 式 化 描
述 ,即 详 尽 地 写 出 图 灵 机 的 状 态 、 转 移 函 数 等 ,这 是 最 低 层 次 、 最 详 细 程 度 的 描 述 ;第 二
种 描 述 的 抽 象 水 平 要 高 一 些 ,称 为 实 现 描 述 ,这 种 方 法 使 用 日 常 语 言 来 描 述 图 灵 机 的 动
作 ,如 怎 么 移 动 读 写 头 、 怎 么 在 带 子 上 存 储 数 据 等 ,这 种 程 度 的 描 述 没 有 给 出 状 态 和 转 移
函 数 的 细 节 ;第 三 种 是 高 层 次 描 述 ,它 也 是 使 用 日 常 语 言 来 描 述 算 法 ,但 忽 略 了 实 现 的 细
节 ,这 种 程 度 的 描 述 不 再 需 要 提 及 机 器 如 何 管 理 它 的 带 子 或 读 写 头 。
本 章 已 经 给 出 了 许 多 图 灵 机 的 描 述 ,它 们 都 是 形 式 化 描 述 或 实 现 描 述 的 例 子 。使 用 较
低 层 次 的 图 灵 机 进 行 描 述 有 助 于 理 解 图 灵 机 并 增 强 使 用 它 们 的 信 心 ,一 旦 有 了 这 样 的 信
心 ,就 足 以 进 行 高 层 次 描 述 。
下 面 描 述 图 灵 机 的 格 式 和 记 号 。图 灵 机 的 输 入 总 是 一 个 串 ,如 果 想 以 一 个 对 象 而 不 是
字 符 串 作 为 输 人 ,必 须 先 将 那 个 对 象 字 符 串 化 。串 能 很 容 易 地 表 达 多 项 式 、 图 、 文 法 、 自
动 机 及 这 些 对 象 的 任 意 组 合 。可 以 设 计 一 个 图 灵 机 来 对 这 些 串 进 行 适 当 的 解 码 ,使 之 被 解
第s章 丘 奇 图灵论题 - 117

释为所希望的对象 。对象 o 编码成字符串的记号是〈o〉,如果有多个对象 a ,o2 , … ,o* ,


它 们 的 编 码 是 一 个 串 ,记 为 可 用 多 种 合 理 的 方 式 进 行 编 码 ,选 择 哪 一
种并不重要 ,因为图灵机总能将一种编码转化成另一种。
描述图灵机算法的格式是带引号的文字段 ,且排成锯齿形状。 将算法分成几个步骤 ,
每个步骤可能包括图灵机计算的许多步 ,用更深的缩进方式来指示算法的分块结构。算法
的第一行描述机器的输人 ,如果输入描述仅仅被写成加,则这个串就被当作输入 。 如果输
人描述的是一个对象的编码 〈 A 〉,则暗示图灵机需要首先检查此输入是否确实是所要的
对象的编码 ,如果不是 ,则拒绝它 。
设 A 是由表示连通无向图的串构成的语言。回忆一下 ,如果一个图从任意
顶点出发都可以沿着边走到其他所有顶点 ,则称这个图是连通的 (connected )。记 A 为
A ={〈G|
〉G 是连通无向图 }
下面是判定 A 的图灵机 M 的一个高层次描述 :
“输入是图 G 的 编 码 < G > :
1. 选择 G 的第一个顶点 ,并标记之 。
2. 重复下列步骤 ,直到没有新的顶点可作标记 。
3. 对于 G 的每一个顶点 ,如果能通过一条边将其连到另一个已被标记的顶点 ,
则标记该顶点 。
4. 扫描 G 的所有顶点 ,确定它们是否都已作了标记 。 如果是 ,则接受 ,否则
拒绝 。

作为附加练习 ,下面检查图灵机 M 的一些实现细节 。今后一般不给出这些细节 ,也
没有必要这样做 ,除非有这样的明确要求 。首先 ,必须了解 〈G > 是 怎 样 将 图 G 编码成一
个串的 。考虑如下的编码方式 : 先是 G 的顶点序列 ,后面紧跟 G 的边序列 。顶点由一个
十进制数表示 ,边由一对表示它的两个端点的十进制数表示 。图 3 10 描绘了这样一个图 -
和它的编码 。

⑹ = (1,2,3,4)((1,2),
(2,3),
(3,1),
(1,4))

图 G 和它的编码〈G〉

当 M 收到输入 〈 G〉时 ,立即对其进行检査 ,以确定它是否是某个图的正确编码 。 为


此 ,M 首先扫描带子 ,确定是否有两个序列 ,并检查它们的格式是否都正确 。第一个序列
应该是不相同的十进制数的序列 ,第二个序列应该是十进制数对的序列 。 然后 M 检查以
下两项 :顶点序列应该不包含重复元素 ;岀现在边序列中的每个顶点也应该出现在顶点序
列中 。对于前一项 ,可以使用例 3.7 给出的图灵机 M4 来检查元素是否不同 ,并用类似的
方法实现对第二项的检查 。如果输入通过了这些检查 ,它就是某个图的编码 。 完成了对输
人的检査后 ,M 继续运行 ,并进入第 1 步 。
对 于 第 1 步 ,M 在最左端的数字上加个点来对第一个顶点作标记 。
118 第二部分可计算性理论

对于第 2 步 ,M 扫描顶点序列以发现一个未加点的顶点 n \ , 并以另一种方法对其进


行标记 ,比如说 ,在它的第一个符号下画一条线 。然后 ,M 再次扫描顶点序列来发现一个
已 带 点 的 顶 点 并 在 其 下 划 线。
然后 M 扫描边序列 。对于每一个边 ,M 检查那两个带下划线的顶点 和;22 , 看其是
否在这条边中出现。如果是 ,则 M 在
然后继续运行 。如果不是 ,则 M 检查边序列中的下一个边 ,如果没有多余的边 ,则
n 2 ) 不是 G 的边 。然后它把 n 2 下划线移动到下一个带点的顶点上 ,现在称这个顶点为 ri 2 o
^
上加点 ,并去掉其下划线 ,再回到第 2 步的开头 ,
< 72!,

再重复本段中的步骤 ,并像以前一样检查这个新的对 { m , n2 ) 是否是一条边 。 如果已没


有多余的带点的顶点 ,则 m 就没有被连到任何带点的顶点上 。 然后 M 重新设置下划线 ,
使得 是下一个不带点的顶点 ,n 2 是第一个带点的顶点 ,重复本段中的步骤 。 如果还没
有多余的不带点的顶点 ,则 M 未能发现任何新的顶点可以加点 ,故转入第 4 步 。
对 于 第 4 步 ,M 扫描顶点序列 ,检查是否都已被加点 。 如果是 ,则进入接受状态 ,否
则进人拒绝状态 。这就完成了图灵机 M 的描述 。

练习
有关 ,例 3.4 给出了它的描述及状态图 。在下列每个输入串上 ,给出

^
3.1 此练习与图灵机 2 2 所
进入的格局序列 :
a.0 b.00 c.000 d.000000
3.2 此 练 习 与 图 灵 有 关 ,例 3.5 给出了它的描述及状态图 。在下列每个输人串上 ,给出
进人的格局序列 :
a.11 b.1 # 1 c.1 井 # 1 d.10 # 11
e.10 # 10
A 3.3
修改定理 3.10 以得到推论 3.12 的证明 ,即证明一个语言是可判定的当且仅当有非确定型图灵机
判定它 。(可以假设关于树的下列定理成立 :如果一棵树中的每个结点只有有限多个子结点 ,且
此树的每一个分支只有有限多个结点 ,则此树本身只有有限多个结点。

3.4 给出枚举器的一个形式化定义 。可将其看作一种双带图灵机 ,用它的第二个带子作为打印机 。 包
括它所枚举的语言的定义 。
A3.5
检查图灵机的形式化定义 ,回答下列问题并解释你的推理 :
a. 图灵机能在它的带子上写下空白符吗?
b. 带子字母表 r 和输人字母表 2 能相同吗?
c. 图灵机的读写头能在连续的两步中处于同一个位置吗?
d. 图灵机能只包含一个状态吗?
3.6 定理 3.13 证明了一个语言是图灵可识别的当且仅当有枚举器枚举它 。为什么不能用下列更简单的
52 ,… 是 2 中的所有串 。
算法作为充分性的证明? 像以前一样 ,& , *

E= “忽略输入 ,
1. 对于 f = l ,
2 ,3 ,… ,
重复下列步骤 。
2. 在 & 上 运 行 M。
3. 如果接受 ,则打印出 Si o
3.7 下面描述的不是一个合法的图灵机 ,解释为什么。
Mbad == “ 在输人〈 /> > 上 ,其 中 为 变 元 xi ,… ,
心上的一个多项式 :
1. 让 A ,… ,A 取所有可能的整数值 。
2. 对所有这些取值求 的值 。

^
第J 章 丘 奇 图灵论题 - 119

3. 只 要 某 个 取 值 使 得 p 为 0 , 则接受 ,否则拒绝 。

3.8 下 面 的 语 言 都 是 字 母 表 { 0 ,1 } 上 的 语 言 ,以 实 现 层 次 的 描 述 给 出 判 定 这 些 语 言 的 图 灵 机:
Aa.{ xy
| w 包 含 相 同 个 数 的 0 和 1 }。
b. 所 包 含 的 0 的 个 数 是 1 的 个 数 的 两 倍 }。
c.{ wlw 所 包 含 的 0 的 个 数 不 是 1 的 个 数 的 两 倍 }。

问题
设 A 是 仅 含 一 个 串 s 的 语 言 ,其 中:
_/
A3.9

0 如果火星上没有任何生命
S
11 如果火星上发现生命
A 是 可 判 定 的 吗 ? 为 什 么? 在 本 题 中 , 假 设 “ 火 星 上 是 否 有 生 命 ” 这 一 问 题 的 答 案 只 有 “ 有 ”
或 “没 有” 两 种 。
3. 1 0 设 多 项 式 cixn + C2:
r” 1 + … + c„:c + c ;l +i 有根 = ,cmax 是 q 的 最 大 绝 对 值 。证 明

| 〈(
X Q|
”+ 1 )
* 3.11 证 明 :不 能 在 带 子 的 输 入 区 域 写 的 单 带 图 灵 机 只 能 识 别 正 则 语 言。
* 3.12 证明每一个无穷图灵可识别语言都有一个无穷可判定子集。
• 3 . 1 3 证 明 :一 个 语 言 是 可 判 定 的 ,当 且 仅 当 有 枚 举 器 以 标 准 字 符 串 顺 序 枚 举 这 个 语 言 。
* 3.14 设 图 灵 可 识 别 语 言 由 图 灵 机 的 描 述 组 成 ,证 明 存 在 一 个 以 图 灵 机 作 为 输
人 字 符 的 图 灵 可 识 别 语 言 C,使 得 在 JB 中 的 每 一 个 图 灵 机 在 C 中 也 有 一 个 图 灵 机 与 之 等 价 ,反
之亦然。
3.15 证明图灵可识别语言类在下列运算下封闭:
Aa. 并 b. 连 接 c. 星 号 d 交 e. 同 态
3.16 证明可判定语言类在下列运算下封闭:
Aa 并 b. 连 接 c. 星 号 d. 补 e 交
A3 . 17 只 写 一 次 图 灵 机 ( write once Turing machine ) 是 一 个 单 带 图 灵 机 ,它 在 每 个 带 子 方 格 上 最 多 只
~

能 改 变 其 内 容 一 次 (包 括 带 子 上 的 输 入 区)。证 明 图 灵 机 模 型 的 这 个 变 形 等 价 于 普 通 的 图 灵 机 模
型。( 提 示 :首 先 考 虑 如 下 图 灵 机 :可 以 修 改 带 子 方 格 最 多 两 次 ,使 用 多 个 带 子 。

3. 1 8 双 无 限 带 图 灵 机 (Turing machine with doubly infinite tape ) 与 普 通 图 灵 机 相 似 ,所 不 同 的 是 它 的
带 子 向 左 和 向 右 都 是 无 限 的 。此 带 子 在 开 始 时 ,除 了 包 括 输 人 区 域 外 ,其 他 都 填 以 空 白 符 ,计
算 也 像 通 常 一 样 定 义 ,只 是 在 它 向 左 移 动 时 不 会 遇 到 带 子 的 端 点 。证 明 这 种 类 型 的 图 灵 机 识 别
图 灵 可 识 别 语 言 类。
3. 1 9 左 复 位 图 灵 机 ( Turing machine with left reset ) 和 普 通 图 灵 机 类 似 ,只 是 它 的 转 移 函 数 具 有 下 列
形式:
d:
QXr ~* Q x r x { R , RESET }
如 果 扒 g, 6,
a )=( r , RESET ),则 当 机 器 处 于 状 态 g 且 读 a 时 ,在 带 子 上 写 下 6 并 进 入 状 态 r 后 ,
读 写 头 就 跳 到 带 子 的 左 端 点 。注 意 ,这 样 的 机 器 没 有 将 它 的 读 写 头 向 左 移 动 一 个 符 号 的 普 通 能
力 。证 明 左 复 位 图 灵 机 识 别 图 灵 可 识 别 语 言 类 。
3. 2 0 以 停 留 代 替 左 移 图 灵 机 (Turing machine with stay put instead of left ) 和 普 通 图 灵 机 类 似 ,只 是

3.21
它的转移函数具有下列形式:

^ :
Qxr
在 任 何 时 候 ,机 器 可 以 将 读 写 头 向 右 移 ,或 让 其 停 留 在 原 地 不 动
灵 机 不 等 价 ,这 样 的 图 灵 机 识 别 什 么 语 言 类 ?

Q X T X < R , S}
。证 明 这 样 的 图 灵 机 与 普 通 图

队 列 自 动 机 ( queue automaton ) 类 似 于 下 推 自 动 机 ,只 是 栈 换 成 了 队 列 ,队 列 是 只 能 从 左 边 写
120 第二部分可计算性理论

入 符 号 从 右 边 读 出 的 带 子 ,每 次 写 操 作 (推 ) 往 队 列 的 左 端 增 加 一 个 字 符 ,每 次 读 操 作 ( 拉 ) 从
队 列 的 右 端 读 取 一 个 字 符 并 随 即 将 其 从 带 子 上 删 除 。 和 下 推 自 动 机 一 样 ,队 列 自 动 机 的 输 人 被
放 在 一 条 单 独 的 只 读 输 入 带 上 ,且 读 写 头 只 能 在 输 入 带 上 从 左 向 右 移 动 ,输 入 带 在 输 入 字 符 串
后 跟 一 空 白 字 符 以 标 识 输 入 的 结 束 位 置 。队 列 自 动 机 在 对 输 入 进 行 操 作 的 过 程 中 ,只 要 进 入 一
个 接 受 状 态 ,机 器 就 接 受 。 证 明 一 个 语 言 能 被 一 个 确 定 型 队 列 自 动 机 识 别 当 且 仅 当 该 语 言 是 图
灵 可 识 别 的。
3.22 设 tPDA 表 示 有 々 个 栈 的 下 推 自 动 机 。因 此 ,0 - PDA 就 是 一 个 NFA ,1 - PDA 就 是 通 常 的 PDA 。

- -
已 经 知 道 1 PDA 比 0 PDA 更 强 (识 别 更 大 的 语 言 类 )。

- -
a. 证 明 2 PDA 比 1 PDA 更 强 。
b. 证 明 3 - PDA 不 比 2 - PDA 更 强 。
( 提 示 :用 两 个 栈 来 模 拟 一 个 图 灵 机 带 。

习题选解
3.1 b.qx 0 0 , U g20 , U xq3 U * U g5 x U,g 5 LI x U » U g2 x U,U xq2 U , U x L! qacci

3.2 a. % 11 ,xq31 , xl 3 U , xl U <? reject o


^
3.3 证 明 推 论 的 两 个 方 向 。首 先 ,如 果 语 言 L 是 可 判 定 的 ,则 它 能 被 一 个 确 定 型 图 灵 机 判 定 ,而 确 定
型 图 灵 机 自 然 是 一 个 非 确 定 型 图 灵 机 。其 次 ,如 果 语 言 L 能 被 一 个 非 确 定 型 图 灵 机 iV 所 判 定 ,那
么 按 如 下 步 骤 修 改 定 理 3.1 0 的 证 明 中 给 出 的 确 定 型 图 灵 机 D。将 步 骤 4 移 到 步 骤 5。增 加 新 的 步
骤 4: 如 果 IV 的 所 有 非 确 定 性 的 分 支 都 被 拒 绝 ,则 拒 绝 。
现 在 讨 论 新 的 图 灵 机 以 是 L 的 判 定 器 。 如 果 N 接 受 它 的 输 入 ,D'也 最 终 会 找 到 一 个 接 受 分 支 并
接 受 。如 果 N 拒 绝 它 的 输 入 ,则 它 的 所 有 分 支 将 因 其 为 判 定 器 而 停 止 并 拒 绝 。因 此 ,每 个 分 支 有
有 限 个 结 点 ,每 个 结 点 代 表 N 的 一 步 计 算 。所 以 根 据 前 面 练 习 给 出 的 关 于 树 的 描 述 可 知 ,N 在 一
个 输 入 上 的 完 整 计 算 树 是 有 限 的 。从 而 ,当 这 棵 树 遍 历 完 后 1/ 将 停 止 并 拒 绝 。
3.5 a. 是 。带 子 字 母 表 r 包 括 U ,图 灵 机 能 在 带 子 上 写 下 r 中 的 任 何 字 符 。
b. 不 是 。2 从 不 含 U ,但 r 总 是 包 括 U。 因 此 它 们 不 能 相 等 。
c. 是 。若 图 灵 机 试 图 从 带 子 的 左 端 点 向 左 移 动 读 写 头 ,则 读 写 头 保 持 原 来 位 置 不 变 。
d. 不 是 。任 何 图 灵 机 必 须 包 括 两 个 可 区 分 的 状 态 因 此 ,一 个 图 灵 机 至 少 包 括 两 个

3.8
状 态。
a. “对 于 输 入 串 w : ■

^
1. 扫 描 带 子 并 对 第 一 个 未 标 记 的 0 进 行 标 记 。如 果 没 有 发 现 未 被 标 记 的 0 , 则 转 到 第 4 步 ,否
则 ,读 写 头 返 回 至 带 子 的 左 端 点 。
2. 扫 描 带 子 并 对 第 一 个 未 标 记 的 1 进 行 标 记 。 如 果 没 有 发 现 未 被 标 记 的 1 ,则 拒 绝 。
3. 读 写 头 返 回 至 带 子 左 端 点 ,并 转 到 第 1 步 继 续 执 行 。
4. 读 写 头 返 回 至 带 子 左 端 点 ,扫 描 带 子 以 发 现 是 否 存 在 未 被 标 记 的 1。如 果 没 有 则 接 受 ,否 则

拒绝 。
3.9 语 言 A 是 语 言 { 0 } 或 语 言 { 1 } 之 一 ,这 两 个 语 言 都 是 有 穷 的 ,因 此 是 可 判 定 的 。 如 果 不 能 判 定
上 述 两 个 语 言 哪 一 个 是 A ,也 就 不 能 描 述 出 A 的 判 定 器 。 但 是 ,可 以 给 出 两 个 图 灵 机 ,其 中 必 有
一 个 是 A 的 判 定 器。
3. 1 5 a. 对 任 意 两 个 图 灵 可 识 别 语 言 M 、 L2 及 其 对 应 的 图 灵 识 别 机 M! 、 M2 , 构 造 图 灵 机 只 别 M

^
与 的 并 集。
“对 于 输 入 ZJU :
1. 逐 步 地 在 w 上 交 替 地 运 行 Mi 和 Af 2 。任 何 一 个 接 受 ,则 AT 接 受 。如 果 两 个 机 器 都 停 机
7
并 拒 绝 ,则 M 拒绝 。

-
第J 章 丘 奇 图灵论题 121

^^ ^
如 果 ]\ 或 ] 2 接受 ,则 因 为 接 受 图 灵 机 在 有 限 步 达 到 接 受 状 态 ,从 而 M'也 接 受
U; W 。注 意 :
如 果 A 、M2 都 拒 绝 或 者 任 何 一 个 处 于 循 环 状 态 ,则 Af 将 一 直 循 环 下 去 。
. , 设图灵机 ]

^
3 16 a. 对 于 任 意 两 个 可 判 定 语 言 M 和 L2 和 純 分 别 判 定 它 们 。构 造 图 灵 机 iVT 来 判 定
语言M 和 12 的并集 :
“对 于 输 人

1. 在 w 上 运 行 M1

(> 如 果 它 接 受 ,则 接 受 。
2. 在 u;上 运 行 M2 。如 果 它 接 受 ,则 接 受 ,否 则 拒 绝
接 受 w ,则 AT 接 受 w 。如 果 二 者 都 拒 绝 ,则 Af 拒 绝 。

^
如 果 或 ] 2

3.17 首 先 用 一 个 两 次 写 图 灵 机 模 拟 一 个 普 通 图 灵 机。两 次 写 图 灵 机 将 整 个 带 子 的 字 符 串 内 容 拷 贝 到 带
子 右 边 的 空 白 部 分 (也 即 在 带 子 上 第 一 个 空 白 字 符 处 开 始 对 带 子 上 的 字 符 串 进 行 拷 贝 ),来 模 拟 原
来 机 器 的 一 步 操 作 。机 器 逐 字 符 拷 贝 并 对 其 进 行 标 记 ,这 个 过 程 会 对 每 个 带 子 方 格 进 行 两 次 操 作 。
第 一 次 写 字 符 ,第 二 次 紧 接 着 对 这 个 字 符 进 行 标 记 ,以 标 识 其 已 经 被 拷 贝 。原 来 图 灵 机 的 读 写 头
位 置 在 带 子 上 进 行 标 记 ,当 把 方 格 中 的 内 容 拷 贝 到 这 个 位 置 或 者 其 旁 边 时 ,带 子 的 内 容 根 据 原 来
图 灵 机 的 规 则 进 行 更 新。
用 一 次 写 图 灵 机 进 行 模 拟 时 ,其 操 作 同 两 次 写 图 灵 机 ,只 是 原 来 带 子 上 的 每 个 方 格 现 在 用 两
个 方 格 表 示 ,第 一 个 存 储 原 来 带 子 上 的 符 号 ,第 二 个 存 储 在 拷 贝 过 程 中 做 上 标 记 的 字 符 。输 入 不
能 用 两 个 格 子 代 表 一 个 字 符 ,因 此 ,在 第 一 次 带 子 被 拷 贝 时 ,就 直 接 在 输 人 字 符 上 进 行 标 记 。
第 4 章|
Introduction to the Theory of Computation , 3 e

可 判 定 性

第 3 章引人了图灵机作为通用计算机模型 ,并根据丘奇 图灵论题 ,用图灵机定义了 -


算法概念 。
本章开始研究算法求解问题的能力 。 我们将证明 ,有些问题算法上能够求解 ,但另一
些则不能 。本章旨在研究算法可解性的局限 。也许不少人对算法可解性已知之甚多 ,因为
计算机科学的绝大部分是研究可求解问题的 。但这一章里断言有些问题是不可解的 ,这可
能会让人感到意外 。
通常 ,人们追求问题的答案 ,而在此时试图证明该问题的不可解性似乎没有什么用
处 。但是研究不可解性的理由有二 :第一 ,知道问题在算法上是不可解的 ,就不必浪费力
量去寻找不存在的解法 ,进而可以把精力花在改变或简化问题 ,以便找到简化问题的算法
解上 。像任何工具一样 ,计算机也有能力上的局限 。要想很好地使用计算机 ,必须正确地
认识它的能力和局限 。第二 ,能锻炼人的能力 ,即使你处理的问题都是可解的 ,了解不可
解性也能激发你的想象 ,并帮助你全面而透彻地理解什么是计算 。

4. 1 可判定语言
本节将给出一些算法上可判定的语言的例子 。 我们将关注涉及自动机和文法的语言 。
例如 ,提岀一个算法来检测一个串是否是一个上下文无关语言 ( context-free language ,
CFL ) 中的元素 。关注这些语言是有趣的 ,因为 :首先 ,某些问题是和应用相关的 。例如
测试一个上下文无关文法是否可生成某一个串 ,这一问题就和程序设计语言中的程序识别
及编译有关 。 此外 ,某些涉及自动机和文法的问题在算法上却是不可判定的 。开始举的例
子很可能是可判定的 ,而这或许有助于你领会一些不可判定的例子 。

4. 1 . 1 与正则语言相关的可判定性问题
首先介绍与有穷自动机有关的计算问题 。我们将给出算法来检测一个有穷自动机是否
接受一个串 、 一个有穷自动机的语言是否为空以及两个有穷自动机是否等价等问题 。
因为已经建立了处理语言的术语 ,故为方便起见 ,就用语言来表示各种计算问题。例
如 DFA 接受问题 (acceptance problem ),检测一个特定的确定型有穷自动机是否接受一个
事先给定的串 ,此问题可表示为语言 ADFA ,它包含了所有 DFA 的编码以及 DFA 接受的
串的编码 。令
ADFA ={〈 B ,W |
> B 是 DFA 并且接受输入串 w }
问题 “ DFAB 是 否 接 受 输 入 与 问 题 是 否 是 ADFA 的元素 ” 是相同的 。类
似地 ,其他一些计算问题也可表示成检查语言的成员隶属关系 ,证明这个语言是可判定的
与证明这个计算问题是可判定的是同一回事 。
下面的定理将证明 ADFA 是可判定的 ,因而也就证明了问题 “一个给定的有穷自动机
是否接受一个给定的串” 是可判定的 。
第4章 可 判 定 性 123

ADFA 是 一 个 可 判 定 语 言 。
证明思路证明思路非常简单 。只要设计一个判定 ADFA 的图灵机 M 即可 。
M = “对于输入 w > ,其中
( B, B 是 DFA , 是串:
1. 在输人 w 上模拟 B 。
2. 如果模拟以接受状态结束 ,则接受 ;如果以非接受状态结束 ,则拒绝 。

证明我们仅提及证明中的某些实现细节 。如果你对某个标准程序设计语言很熟悉 ,
那就想一想 ,怎样写一个程序来执行这个模拟 。
首先检查输人 ( B ,
w ),它表示输人串 w 和 D F A B。B 的一个合理的表示方法是简单
% 及 F。 当 M 收到输人时 ,首先检查它是否正确地表示了
地列出它的五个元素 Q 、2、3、
D F A B 和串 w 。如果不是 ,则拒绝 。
然后 M 直接执行模拟 。用在带子上写下信息的方法 ,它可以记录 B 在输入 w 上运行
时的当前状态和当前位置 。运行开始时 ,S 的当前状态是 g ,读写头的当前位置是 w 的 。
最左端符号 。状态和位置的更新是由转移函数 5 决定的 。 当 M 处理完 w 的最后一个符号
时 ,如果 B 处于接受状态 ,则 M 接受这个输入 ;如果不是 ,则 M 拒绝 。 鼸

对非确定型有穷自动机 ,可以证明类似的定理 。设
ANFA ={〈 B,
w〉| B 是 NFA 并 且 接 受 输 入 串
ANFA 是 一 个 可 判 定 语 言 。
证明构造一个判定 ANFA 的图灵机 iV 。 可以将 N 设计成与 M
DFA 改为模拟 NFA 。但我们不这样做 。下面说明一个新想法 :用 作为 iV 的子程序 。 M
— 样 ,只是将模拟

因为 M 被设计成只接收 DFA 作为输人 ,故 iV 先将作为输入所收到的 NFA 转换成 DFA ,


然后再将它传给 M。
N = “对于输人 ( B , w ),其中 B 是 NFA ,w 是串 :
1. 用定理 1.19 所给的转换过程将 NFA B 转换成一个等价的 DFA C。
2. 在 输 入 < C,w〉上像定理 4.1 那样运行图灵机 M。
3. 如果 M 接受 ,则接受 ,否则拒绝 。 ”
第 2 步中 ,“运行图灵机 M” 的含义是 :将 M 作为一个子程序加进 iV 的 设 计 中 。 級
可以类似地测定一个正则表达式是否派生一个给定的串。设
AREX { ( R J W ) | R 是 正 则 表 达 式 ,
~ w 是串 ,
i? 派 生 w }
AREX 是 一 个 可 判 定 语 言 。
证 明 下 面 的 图 灵 机 P 判定 A REX o
W 上 ,其中尺是正则表达式 ,w 是串 :
P =“ 在输人 〈 尺 ,
1 . 用定理 1 .28 所给的转换过程将正则表达式尺转换成一个与之等价的 NFA A 。
2. 在输入〈 A ,
w〉上运行图灵机 iV 0

3. 如果 iV 接受 ,则接受 ;如果 iV 拒绝 ,则拒绝 。 ” ■

定理 4.1 、 4.2 和 4.3 说明 ,对于可判定性 ,用 DFA 、 NFA 或正则表达式表达图灵机


都是等价的 ,因为图灵机能将它们的编码进行互相转换 。
现在转向与有穷自动机有关的另一种问题 :有 穷 自 动 机 语 言 的 空 性 质 测 试 。 在以前的
定理中 ,常常必须检查一个有穷自动机是否接受一个特定的串。 在下面的证明中 ,要检查
一个有穷自动机是否根本不接受任何串 。令
124 第二部分可计算性理论

EDFA = { ( A ) \ A 是 一 个 DFA ,且 L( A )= 0 >


EDFA 是 一 个 可 判 定 语 言 。
证明 DFA 接受一个串当且仅当 :从起始状态岀发 ,沿着此 DFA 的箭头方向 ,能够
到达一个接受状态 。为检查这个条件 ,设计一个使用标记算法的图灵机 T,此算法已在例 :
3.14 中使用过 。
了=“对于输入〈 A 〉,其中 A 是一个 DFA:
1. 标记 A 的起始状态 。
2. 重复下列步骤 ,直到所有状态都被标记 。
3. 对于一个状态 ,如果有一个到达它的转移是从某个已经标记过的状态出发的 ,
则将其标记 。
4. 如果没有接受状态被标记 ,则接受 ,否则拒绝 。
” 嫌

下一个定理证明 :检查两个 DFA 是否识别同一个语言是可判定的 。设


〈A ,
EQDFA = { B〉| A 和 B 都是 DFA ,且 L( A )= L( B )}
EQDFA 是 一 个 可 判 定 语 言 。
证 明 用 定 理 4.4 来证明本定理 。 下面由 A 和 B 来构造一个新的 DFA C,使得 C 只
接受这样的串 :A 或 B 接受但不是都接受 。这样如果 A 和 B 识别相同的语言 ,则 C 不接
受任何串 。C 的语言是
L( C)= ( L ( A ) n L ( B ) ) U ( L ( A ) n L ( B ) )
此处 L( A )是 JL( A ) 的补集 ,这个表达式称为 L( A ) 和 L( B ) 的 对 称 差 ( symmetric
-
difference ), 见 图 4 1。 这 里 ,对 称 差 是 有 用 的 ,因 为
L( C)= 0当且仅当 L( A )= L( B )。 已经证明 : 正则语言类 m
在补 、并和交下是封闭的 。 这些证明所使用的构造可以用
来构造 C。 这些构造都是算法 ,可以由图灵机来执行 。一
旦完成了 C 的构造 ,就可用定理 4.4 来 检 查 L( C ) 是 否 为
空 。如果它是空的 ,UA )与 L( B ) 必定相等 。
图 4 -1 JL( A ) 与 L( B) 的 对 称 差
“对 于 输 入 < A ,B ) , 其 中 A 和 B 都是 DFA ,
1. 如上描述的那样构造 DFA C。
2. 在输入〈C > 上 运 行 定 理 4.4 中的图灵机 T。 :

3. 如果 T 接受 ,则接受 ;如果 T 拒绝 ,则拒绝 。
” :
4 . 1 .2 与上下文无关语言相关的可判定性问题
下面描述两个算法 ,一个检查某个 CFG 是否派生一个特定的串 ,另一个检查某一
CFG 的语言是否为空 。设
ACFG — {〈G ,
w〉|G 是 CFG ,w 是串 ,
G 派生 u;
}
ACFG 是 一 个 可 判 定 语 言 。
证 明 思 路 对 于 CFG G 和串 w ,要检查 G 是否产生 IV o 一个思路是 : 让 G 遍历所有
派生 ,以确定哪一个是 w 的派生 。但这个思路行不通 ,因为这样可能要检查无限多个派
生 。如果 G 不 产 生 这 个 算 法 将 不 终 止 。 这 个 思 路 给 岀 的 图 灵 机 只 是 ACFG 的一个识别
器 ,而非判定器 。
第4章 可 判 定 性 125

为将这个图灵机变成一个判定器 ,需要保证算法只检查有限多个派生 。问题 2.38 证


明了如果 G 是一个乔姆斯基范式 ,则说的任意派生都是 2 n — 1 步 ,其中 n 是 w 的长度 。
此时 ,为确定 G 是否产生 w ,只需检查步长在 272 — 1 内的派生即可 ,这样的派生只有有限
多个。而用在 2.1 节给出的过程 ,就可将 G 转换成乔姆斯基范式 。
证 明 识 别 ACFG 的图灵机 S 如下 :
“对于输人 < G ,
w〉,其中 ,G 是一个 CFG ,加是一个串 :
1. 将 G 转换成一个与之等价的乔姆斯基文法 。
2. 列出所有 ⑸ 一 1 步的派生 ,其中 rz 是 w 的长度 ,除非 n = 0 , 此时列出一步以内
的派生 。
3. 如果这些派生中有一个产生 UJ , 则接受 ;如果没有 ,则拒绝 。

检查一个 CFG 是否产生一个特定串和程序设计语言的编译密切相关。图灵机 S 中的算
法效率非常低 ,并且永远不会在实际中使用 ,但它很容易描述 ,且这里并不关心效率。在本
书的第 3 部分将强调算法的运行时间和存储使用。定理 7.14 的证明将描述一个更有效的算
法来识别一般的上下文无关语言。对识别确定型上下文无关语言还可望获得更高的效率。
在定理 2.12 中已经给出了 CFG 和 PDA 之间的相互转换过程 。因此 ,此处关于 CFG
问题的可判定性讨论完全适用于 PDA。
现在讨论 CFG 语言的空性质测试问题。如对待 DFA 那样 ,可以证明 :检查一个 CFG
是否不派生任何串是可判定的 。设
且 L( G )= 0 }
£CFG ={〈G〉| G 是一个 CFG ,
EQFG 是一个可判定语言 。
证明思路先给岀一个容易想到但行不通的想法 :试用定理 4.6 中的图灵机 S。 此定
理告诉我们 ,能够检查一个 CFG 是否产生某个特定串。 为确定 L ( G ) = 0是否成立 ,似乎
可以让图灵机 S
下去 ,永不停止


个一个地检査所有可能的 w 。但 u;
我们需要另想办法 。
有无限多 ,故这个算法将永远检查

为检查一个文法的语言是否为空 ,需要检查起始变元能否产生一个终结符串。算法解
决的是一个更一般的问题 ,它不仅检查起始变元 ,而且检查每一个变元 ,以确定这个变元
能否产生一个终结符串 。在确定某个变元能够产生一个终结符串后 ,算法就将这个变元作
上标记 ,以记录这个信息。
算法先在文法中的所有终结符上作标记 ,然后扫描所有的文法规则 。如果发现某个规
则允许用符号串来取代一个变元 ,且符号串中的所有符号都已被作过标记 ,则算法知道 ,
这个变元也能被作上标记 。这样继续下去 ,直到找不到可以作标记的变元为止 。下面的图
灵机尺实现这个算法 。
证明
,其中
尺 =“对于输入〈G〉 G 是一个 CFG :
1. 将 G 中所有的终结符全都作上标记。


2. 重复下列步骤 ,直到找不到可以作标记的变元。
3. 如果 G 有规则 A …UK ,且 …, 中的每个符号都已被作过标
记 ,则将变元 A 作标记 。
4. 如果起始变元没有被标记 ,则接受 ;否则拒绝 。
” ■
126 第二部分可计算性理论

下 面 讨 论 检 查 两 个 上 下 文 无 关 文 法 是 否 派 生 同 一 个 语 言 的 问 题 。设
£QC:FG ={ < G,
H〉| G 和 H 都 是 CFG ,且 L( G )= L( H )}
对 有 穷 自 动 机 ,定 理 4.5 给 出 了 判 定 语 言 EQDFA 的 算 法 。在 证 明 EQDFA 是 可 判 定 时 ,使 用
了 EDFA 的 判 定 过 程 。对 于 上 下 文 无 关 语 言 ,可 能 有 人 认 为 ,因 为 ECFG 也 是 可 判 定 的 ,似
乎 可 以 用 类 似 方 法 来 证 明 £QCFG 是 可 判 定 的 。但 这 个 思 路 有 问 题 。 练 习 2.2 已 经 证 明 ,上
下 文 无 关 语 言 类 在 补 和 交 运 算 下 不 封 闭 。 事 实 上 ,EQCFG 不 是 可 判 定 的 ,这 可 用 将 在 第 5
章 中 介 绍 的 一 种 技 术 来 证 明。
现在来证明上下文无关语言都可以用图灵机来判定。
iiPIKi 每个上下文无关语言都是可判定的。
证 明 思 路 设 A 是 一 个 CFL。目 标 是 证 明 A 是 可 判 定 的 。一 个 (行 不 通 的 ) 思 路 是 :
将 A 的 一 个 PDA 直 接 转 换 成 图 灵 机 ,这 并 不 难 做 到 ,因 为 图 灵 机 的 带 子 的 功 能 更 强 ,用
来 模 拟 栈 是 容 易 的 。A 的 这 个 PDA 可 能 是 非 确 定 型 的 ,这 看 上 去 也 不 会 有 问 题 ,因 为 可
将 其 转 换 为 非 确 定 型 图 灵 机 ,而 任 何 非 确 定 型 图 灵 机 都 可 转 化 为 与 之 等 价 的 确 定 型 图 灵
机 。然 而 还 是 有 困 难 ,PDA 计 算 的 某 些 分 支 可 能 会 永 远 进 行 ,即 不 停 地 在 栈 上 读 和 写 而
不 能 停 机 。这 样 一 来 ,模 拟 它 的 图 灵 机 也 就 有 不 停 机 的 计 算 分 支 ,因 而 这 个 图 灵 机 就 不 是
一 个 判 定 器 。 故 必 须 有 不 同 的 思 路。本 定 理 的 证 明 使 用 了 判 定 ACFG 的 图 灵 机 S,这 个 图 灵
机 是 在 定 理 4.6 中 设 计 的 。
证 明 设 G 是 A 的 一 个 CFG。下 面 设 计 一 个 判 定 A 的 图 灵 机 M g ,它 在 自 己 内 部 建
立 G 的 一 个 备 份 。其 工 作 方 式 如 下 :
MG =“对 于 输 入 图灵可识别的

1. 在 输 入 〈 G,w > 上 运 行 图 灵 机 S。 可判定的


2. 如 果 该 机 器 接 受 ,则 接 受 ;若 拒
上下文无关的
绝 ,则 拒 绝 。” 篇

至 此 ,本 课 程 描 述 了 四 个 主 要 语 言 类 :正 正则的
则 的 、上 下 文 无 关 的 、 可 判 定 的 和 图 灵 可 识 别
的 ,定 理 4.8 在 它 们 之 间 的 关 系 图 中 画 岀 了 最
后 一 条 连 线 。图 4 - 2 描 述 了 这 个 关 系 。 图 4- 2 语言类间的关系

4.2 不可判定性
本 节 将 证 明 算 法 不 可 解 的 问 题 是 存 在 的 ,这 是 计 算 理 论 中 最 具 哲 学 意 义 的 定 理 之 一 。
计 算 机 看 上 去 是 如 此 强 大 ,使 得 人 们 相 信 所 有 问 题 最 终 都 能 被 其 解 决 。 可 是 上 述 定 理 说
明 ,本 质 上 计 算 机 的 能 力 是 有 局 限 的 。
什 么 样 的 问 题 是 计 算 机 不 能 解 的 呢? 不 可 解 问 题 是 否 深 奥 得 仅 藏 于 理 论 科 学 家 的 心 中
呢? 不!现 在 已 经 证 明 ,甚 至 一 些 人 们 非 常 希 望 解 决 的 普 通 问 题 都 是 计 算 上 不 可 解 的 。
不 可 解 问 题 之 一 是 :假 设 你 有 一 个 计 算 机 程 序 ,还 有 一 个 说 明 书 ,精 确 地 说 明 了 此 程
序 将 做 什 么 (例 如 ,说 明 此 程 序 将 把 一 串 数 列 进 行 排 序)。你 要 做 的 是 :验 证 该 程 序 正 像
说 明 书 所 说 的 那 样 运 行 ( 即 它 是 正 确 的)。因 为 程 序 和 说 明 书 都 是 像 数 学 一 样 的 精 确 对 象 ,
你 希 望 将 验 证 过 程 自 动 化 ,即 将 这 些 对 象 提 供 给 一 个 适 当 设 计 的 计 算 机 来 验 证 。但 你 将 会
失 望 ,因 为 一 般 的 软 件 验 证 问 题 用 计 算 机 是 不 能 解 决 的 。
本 节 和 第 5 章 都 将 介 绍 一 些 不 可 解 问 题 ,目 的 是 帮 助 你 了 解 这 类 不 可 解 问 题 并 学 习 证
第4章 可 判 定 性 127

明不可解性的技巧 。
现在介绍第一个不可解性定理。下面的语言是不可判定的 :检查一个图灵机是否接受
一 个给定的串问题 。 类似于
*
ADFA 和 A CFG 记之为 ATM 。 但 ADFA 和 ACFG 是可判定的,
ATM 却不是。

ATM = {〈 M,
W〉|M 是 一 个 图 灵 机 ,且 接 受

ATM 是 不 可 判 定 的 。
先证明 ATM 是图灵可识别的 。这样 ,本定理表明识别器确实比判定器更强大。要求图灵
机 (TM) 在所有输入上都停机限制了它能够识别的语言种类 。下面的图灵机 U 识别 Atm 。
=“对于输人 < M,
W〉,其中 M 是一个图灵机 ,w 是一个串 :
1. 在输人 w 上模拟 M;
2. 如果 M 进入接受状态 ,则接受 ;如果 M 进入拒绝状态 ,则拒绝 。



注意 ,如果 在加上循环 ,则机器在输入 ( M ,
w ) 上循环 ,这就是 U 不判定 ATM
的原因 。 假如 M 知道自己在 w 上不停机 ,这种情况下它会拒绝 。 然而 ,算法本身无法做
这样的决定 。待会儿我们会看到这种情况 。
图灵机 U 自身也很有意思 ,它是所谓通用图灵机的一个例子 。 通用图灵机是图灵于
1936 年首次提出的 ,之所以称之为 “通用”,是因为它能够模拟任何其他图灵机 ,只要知
道其描述即可 。通用图灵机在开发早期的程序存储式计算机过程中曾起过重要作用。

4 . 2. 1 对角化方法

ATM 不可判定性的证明使用了所谓的对角化技术 ,此方法由数学家康托 ( Georg


Cantor ) 在 1873 年提出 。康托那时关心的是测量无限集合的规模问题 。假如有两个无限
集合 ,怎么才能说其中一个比另一个大 ,或者说有相同的规模呢? 当然 ,对于有限集合 ,
回答这样的问题很简单 。只要数一数某个有限集合中元素的个数 ,所得的数就是它的规
模 。但是 ,如果试图去数一个无限集合中的元素个数 ,将永远也数不完 。所以不能用计数
的方法来确定无限集合的相对规模 。
例如 ,对所有偶数的集合和 { 0 ,1 } 上所有串的集合 ,这两个集合都是无限的 ,因而比
任何有限集合都大。但它们中是否有一个比另一个更大呢? 怎么比较它们的相对规模呢?
康托对此提岀了一个非常好的解决办法 。 他注意到 : 对于两个有限集合 ,如果其中一
个集合的元素能与另一集合的元素配对 ,则它们有相同的规模 。 这个方法没有凭借计数就
比较了规模 ,因而可以将此思想推广到无限集合上 。这是它更准确的含义 。
麟 设 A 和 B 是 两 个 集 合 ,/ 是 从 A 到 B 的 函 数 。 如 果 / 从 不 将 两 个 不 同
元 素 映 射 到 同 一 个 对 象 ,即 只 要 就 有 /( a )尹 /( 6 ),则 称 / 是 一 对 一 昧 射 ( one- to-
one ) 的 。如 果 / 能 击 中 B 的 每 个 元 素 ,即 :对 B 的 每 个 元 素 6 , 都 存 在 aGA ,使 得
f ( a ) = b , 则 称 / 是 满 映 射 ( onto , surjective )。如 果 存 在 函 数 /: ,/ 是 一 对 一 映 射
又 是 满 映 射 ,则 称 集 合 A 和 B 有 相 同 规 模 。 而 既 是 一 对 一 映 射 又 是 满 映 射 的 函 数 称 为 对
应 (correspondence )。在 对 应 中 ,A 的 每 个 元 素 映 射 到 B 的 唯 一 一 个 元 素 ,且 B 的 每 个
元素都有 A 的唯
— 个 元 素 映 射 到 它 。对 应 就 是 将 A 的 元 素 与 B 的 元 素 进 行 配 对 的 方 法。
一对一映射又称为单射 (injective ), 对 应 又 称 为 双 射 ( bijective ) 0
128 第二部分可计算性理论

2 ,3 , },f 是 偶 自 然 数 的 集 合 { 2 ,4 ,6 ,… }。用 康 托
设 N 是自然数集合 {1,
的 关 于 集 合 规 模 的 定 义 可 以 看 到 :N 和 f 有 相 同 的 规 模。从 N
-
映 射 到 5 的 对 应 / 是 /(rz)=2n。借 助 于 表 4 1 能 更 容 易 地 看 清 /。 -
表4 1 N 到e的 对 应 /
fin)
这 个 例 子 似 乎 令 人 意 外。直 观 上 , 似 乎 比 N 小,因 为
f 是 N 的 一 个 真 子 集 。但 由 于 能 够 将 N 的 元 素 与 :的 元 素
进 行 配 对 。故 可 以 下 结 论 说 这 两 个 集 合 有 相 同 的 规 模 。 《

如 果 一 个 集 合 A 是 有 限 的 或 者 与 N 有 相 同 的 规 模 ,则 称 A 是 可 数 的
( countable )0

现 在 介 绍 一 个 更 令 人 意 外 的 例 子 。设 是 正 有 理 数 集 合 ,

Q 看 上 去 似 乎 比 N 大 得 多 ,然 而 按 照 定 义 ,这 两 个 集 合 的 规 模 相 同 。下 面 先 给 岀 Q 到 N
的 一 个 对 应 ,这 证 明 了 Q 是 可 数 的 ,从 而 也 就 证 明 了 本 结 论。给 出 一 个 Q 到 N 的 对 应 的 简
单 方 法 是 :先 列 出 Q 的 所 有 元 素 ,然 后 将 此 序 列 中 的 第 一 个 元 素 与 N 中 的 1 配 对 ,将 第 二 个
元 素 与 2 配 对 ,依 此 类 推 。 注 意 ,必 须 保 证 Q 中 的 每 个 元 素 在 此 序 列 中 只 出 现 一 次。
-
为 得 到 这 样 的 序 列 ,构 造 下 面 包 含 所 有 正 有 理 数 的 矩 阵 ,如 图 4 3 所 示 。第 z 行 包 含

所 有 分 子 为 纟 的 数 ,第 )列 包 含 所 有 分 母 为)的 数 。故i出 现 在 第 i 行 和 第 / 列 交 叉 处 。J

-
图4 3 N 与 Q 的对应

现 在 将 此 矩 阵 转 化 成 一 个 序 列 。一 个 (行 不 通 的) 思 路 是 :序 列 以 第 一 行 的 所 有 元 素
开 始 。但 因 为 第 一 行 是 无 限 的 ,序 列 将 不 会 到 达 第 二 行 ,故 此 思 路 不 好 。 换 用 下 面 的 方
-
法 :从 角 落 开 始 ,排 列 在 对 角 线 上 的 所 有 元 素 ,这 些 对 角 线 已 经 附 加 在 图 4 3 中。第 一 条


对角线只包含一个元素
+ ,第 二 条 对 角 线 包 含 两 个 元 素 f 和士,所 以 此 序 列 的 前 三 个 元 素

|
是 和
°

中 ,就 重 复 了
+
第 三 条 对 角 线 上 有 麻 烦 ,它 包 含 吾 和

2
如果简单地将它们加到序列

为 避 免 重 复 ,忽 略 引 起 重 复 的 元 素 。所 以 仅 仅 加 人 两 个 新 元 素
3
f和
t。 以 这 种 方 法 继 续 下 去 ,就 得 到 Q 的 所 有 元 素 的 一 个 序 列 。
第4章 可 判 定 性 129

看 过 N 与 Q 的 对 应 之 后 ,你 也 许 会 认 为 ,可 以 证 明 任 意 两 个 无 限 集 合 都 有 相 同 规 模 。毕
竟 只 要 给 出 一 个 对 应 即 可 ,这 个 例 子 也 说 明 了 确 实 存 在 某 些 不 可 思 议 的 对 应 。但 是 ,还 是 有
一 些 集 合 因 为 太 大 了 ,故 没 有 与 N 的 对 应 。这 样 的 集 合 称 为 不 可 数 的 ( uncountable)。
实 数 集 便 是 一 个 不 可 数 集 合 的 例 子 。实 数 ( real number ) 是 用 十 进 制 表 示 的 数 。 数
.1 4 1 5 9 2 6… 和#= 1.4142135 … 都 是 实 数 。设 R 是 实 数 集 合 。 康 托 证 明 了 R 是 不 可 数
TT = 3

的 。下 面 用 对 角 线 方 法 证 明 之 。
fesl邏KEI R 是 不 可 数 的。
证 明 为 证 明 R 是 不 可 数 的 ,必 须 证 明 在 N 与 R 之 间 不 存 在 对 应 。下 面 用 反 证 法 证
明 之 :假 设 在 N 与 R 间 存 在 对 应 /,现 在 的 任 务 是 证 明 它 没 有 应 有 的 性 质。因 为 它 是 一 个
对 应 ,所 以 必 能 将 N 的 所 有 元 素 与 R 的 所 有 元 素 进 行 配 对 。 如 果 能 找 到 R 中 的 一 个:r 和
N 中 的 任 何 元 素 都 不 能 配 对 ,则 找 到 了 矛 盾 。
为 此 ,实 际 构 造 出 这 样 一 个 I。 方 法 为 : 在 选 择 它 的
每 一 位 数 字 时 ,都 使 得:r 不 同 于 某 个 实 数 ,且 此 实 数 已 与
N 中 一 个 元 素 配 对 。 这 样 就 能 保 证:r 不 同 于 任 何 已 配 对 的
表4 2
- 假定存在的 N 与
R 间的对应 /
fin)
实 数。
3.14159…
用 一 个 例 子 来 说 明 这 个 思 路 。 假 设 对 应 / 存 在 ,且 设

— . —
/( 1 ) = 3.1 4 1 5 9 ,/( 2 ) = 5 5.5 5 5 5 5 ,/( 3 ) = … ,等 等 。
则 / 将 自 然 数 1 与 3 1 4 1 5 9 … 配 对 ,将 2 与 5 5.55555 … 配
2
3
4
55.55555…
0. 123455".
0 . 50000(
^-
-
对 ,依 此 类 推 。表 4 2 给 出 了 此 假 定 存 在 的 / 的 一 些 值 ,/
联 系 了 N 和 R。
只 要 给 出 x 的 十 进 制 表 示 ,则:r 就 可 以 构 造 出 来 。所 构 造 的 x 是 在 0 与 1 之 间 的 一 个
数 ,所 以 重 要 的 是 小 数 点 后 面 的 数 字 。 要 保 证 对 每 个《 都 有:r 关 /( n )。 为 保 证 x 关 /( 1 ),
只 要 保 证:r 的 第 一 位 小 数 不 同 于 /( 1 )= 3.1 4 1 5 9 … 的 第 一 位 小 数 ,即 不 是 数 字 1 ,随 意 地

^
令 它 为 4 。 为 保 证 x 关 /( 2 ),只 要 保 证 x 的 第 二 位 小 数 不 同 于 /( 2 )= 5 5 . 5 5555 … 的 第 二
位 小 数 ,即 不 是 数 字 5 , 任 意 地 令 它 为 6; /( 3 )= 0.1 2 3 4 5
的 第 三 位 小 数 是 3 , 故 可 取:r 的 第 三 位 小 数 是 任 一 个 不 为 3
的 数 字 ,比 如 4 。沿 着 表 4 - 2 中 / 的 对 角 线 ,以 这 种 方 法
- 表4 3
-
fin)
x 的取法

3. 14159…
继 续 下 去 ,就 能 够 得 到 x 的 所 有 数 字 ,如 表 4 3 所 示 。不 - 2 55. 55555…
难 知 道 ,对 任 意 :
C 都 不 是 /( ),因 为 与 /( 72 ) 在 第

^
X /2
3 0. 123455 … .
x = 0 4641
个 小 数 位 上 不 同 。( 有 一 个 小 问 题 。有 些 数 ,如 0 . 1 9 9 9 … 和 4 0. 50000…
0 . 2 0 0 0… ,虽 然 它 们 的 十 进 制 表 示 不 同 ,但 它 们 却 相 同 。
只 要 在 构 造 x 时 不 选 数 字 0 和 9 , 就 可 避 免 这 个 问 题。
) 嫌

上 述 定 理 对 计 算 理 论 有 着 重 要 的 应 用 ,它 表 明 有 些 语 言 是 不 可 判 定 的 ,甚 至 不 是 图 灵
可 识 别 的 ,原 因 是 :有 不 可 数 个 语 言 ,却 只 有 可 数 个 图 灵 机 。由 于 一 个 图 灵 机 只 能 识 别 一
个 语 言 ,而 语 言 比 图 灵 机 更 多 ,故 有 些 语 言 不 能 用 任 何 的 图 灵 机 识 别 。这 样 的 语 言 就 不 是
图 灵 可 识 别 的 ,正 如 下 面 推 论 所 说。
存 在 不 能 被 任 何 图 灵 机 识 别 的 语 言。
证 明 为 证 明 所 有 图 灵 机 构 成 的 集 合 是 可 数 的 ,首 先 证 明 :对 任 意 的 字 母 表 2 , 其 上
所 有 串 的 集 合 2 * 是 可 数 的。这 是 因 为 ,对 每 个 自 然 数〃,长 度 为 n 的 串 只 有 有 限 多 个 。
130 第二部分可计算性理论

我们先写下长度为 0 的所有串 ,再写下长度为 1 的所有串 ,再写下长度为 2 的所有串 ,依


此类推 ,这样就能构造出 2 * 的序列 。
由所有图灵机构成的集合是可数的 ,原因是 :每个图灵机有一个编码 ,它是一个串
。只要去掉那些不是图灵机合法编码的串 ,就得到了所有图灵机的序列 。
〈M〉
为证明由所有语言构成的集合是不可数的 ,首先证明由所有无限二进制序列构成的集
合是不可数的 。 所谓的无限二进制序列是指由 0 或 1 构成的无限序列 。以 S 记所有无限二
进制序列构成的集合 。可以通过对角化方法来证明 B 是不可数的 ,此法类似于定理 4.14
所用的方法 ,只不过那时是证明 R 是不可数的 。
设 是字母表 2 上所有语言的集合 。只要给岀 与 S 的一个对应 ,就证明了这两个
集合有相同的规模 ,也就证明乙是不可数的 。设 2 = { 51 ,
52 , , }。每个语言八 6 在 5
*

中都有唯一的一个相应序列 :如果
^
6 A ,则此序列的第 / 位为 1; 如果 芒 A ,则此序列
的第 / 位为 0。此序列被称为 A 的特征序列 (characteristic sequence )。例如 ,如果 A 是字
母 表 { 0 , 1 } 上以 0 开始的串构成的语言 ,则其特征序列 是:
2 * = {e,
0, 00 ,01 ,
l,
A = { 0 , 0 0 ,0 1 ,
10 ,
ll,
~一
000 ,001 , };
000 ,001 ,

— …;

令函数 /:/

— ZA = 010110011
:B为 :/( A ) 是 A 的特征序列,则 / 是一对一且满映射的 ,即是一个对
应 。因为 /3是不可数的 ,故 也是不可数的 。
至此 ,已证明了所有语言的集合与所有图灵机的集合之间不能有对应 。因此可以下结
论说 :存在不能被任何图灵机识别的语言 。 ■

4 . 2.2 不可判定语言
至此 ,我们已为证明定理 4 .9 做了充分准备 ,现在证明下列语言的不可判定性 :

^
〈妨 ,
八观 ={ 加〉|妨是一个图灵机 ,且 ] 接受功 }
证 明 假 设 ATM 是可判定的 ,下面将由之导出矛盾 。 设 H 是 ATM 的判定器 。令 M 是
一个图灵机 ,w 是一个串 。在输入 〈 M ,
w 〉上 ,如果 M 接受 w ,则 H 就停机且接受
如果 M 不 接 受 则 H 也会停机 ,但拒绝加。换句话说 ,H 是一个图灵机 ,使得 :
接 受 如 果M接受w
拒 绝 如 果M不接受 XJU

现在来构造一个新的图灵机 D,它以 H 作为子程序 。当 M 被输人它自己的描述〈M〉


时 ,图灵机 D 就调用 H ,以了解 M 将做什么。一旦得到这个信息 ,D 就反着做 , g卩 :如
果 M 接受 ,它就拒绝 ;如果 M 不接受 ,它就接受 。下面是 D 的描述 。
D =“对于输入〈JW > ,其中 M 是一个图灵机 :
1. 在输入〈M, < M〉> 上运行 H。
2. 输出与 H 输出的相反结论 ,即如果 H 接受 ,就拒绝 ;如果 H 拒绝 ,就接受 。

不要被 “在一个机器上运行它自己的描述” 这个表示法所困扰 ,这类似于以一个程序
本身作为输入来运行这个程序 ,这在实际中确实时有发生 。 例如 ,编译器是翻译其他程序
的程序 。 Python 语言的编译器也许就是以 Python 写的 ,所以 “在一个程序本身上运行这
个程序” 是有意义的 。总而言之 ,
第4 章 可 判 定 性 131

接 受 如 果 M 不接受〈 M〉
D( < M> )=
拒 绝 如 果 M 接 受〈M〉
当以 D 的描述 < D〉作 为 输 入 来 运 行 D 自身时 ,结 果 会 怎 样 呢? 我们得到 :
接 受 如 果 D 不接受〈 D >
D( < D > )=
拒 绝 如 果 D 接 受 < D>
不论 D 做 什 么 ,它 都 被 迫 相 反 地 做 ,这 显 然 是 一 个 矛 盾 。所 以 ,图 灵 机 D 和 图 灵 机 H 都
不存在 。 ■

回 顾 一 下 上 述 证 明 步 骤 。先 假 设 图 灵 机 H 判 定 ATM; 然 后 用 H 来 构 造 一 个 图 灵 机
D ,它接受输人〈 M> ,当且仅当 iVf 不 接 受 输 入 〈 M〉;最 后 在 D 自身上运行 D 。因 此 ,这
些机器发生下列动作 :
• H 接受 ( M,
当且仅当 M 接受 w 。
w)
• D 拒绝〈 M〉,当且仅当 M 接受〈 M〉 。
• D 拒绝 < D > ,当且仅当 D 接受 < D > 。
最后一行是矛盾的 。
在 定 理 4.9 的 证 明 中 ,什 么 地 方 有 对 角 化 呢? 只 要 检 查 一 下 图 灵 机 H 和 图 灵 机 D 的
行为表就清楚了。 在 这 些 表 中 ,将 所 有 图 灵 机 ,
M2 ,
… 沿 列 方 向 排 列 ,将 它 们 的 描 述
< M!> , < M2 > , … 沿 行 方 向 排 列 。 表 值 说 明 了 所 在 行 中 的 机 器 是 否 接 受 所 在 列 中 的 输 入 ,
如接受 ,则表值为 accept; 如拒绝或在此输入上循环 ,则表值为空白 。 图 4 4 编 排 了 所 有 -
的表值以说明上述想法 :
-
而在图 4 5 中 ,表值是 H 的运行结果 ,其 输 入 与 图 4 4 对应位置一致 。例如 ,如 果 -
,则在第 iVf 3 行和第 〈 M2 〉列 交 叉 处 的 表 值 是 reject ,因 为 H 拒 绝
不接受输入〈M2 〉
,M2 〉
输人 〈 M3 〈 〉。

( Mi ) ( M2 ) ( A /3) 〈iV/4〉 … ( Ml ) ( M2 ) ( M3) (M4 ) …


Mi accept reject accept reject
-A /i accept accept
M2 accept accept accept accept
A/2 accept accept accept accept
A/3 M3 reject reject reject reject
A/4 accept accept A/4 accept accept reject reject

图 4- 4 如果 iVf , 接受 <M} ), 图 4- 5 (z, » 的表值是 H 在输入


贝!
1 ( i,j ) 的表值是 accept { Mi , 上的值

- -
图 4 6 是在图 4 5 中 加 人 D。根据假设 ,H 是 一 个 图 灵 机 ,所 以 D 也 是 一 个 图 灵 机 ,

^
因此必定在所有图灵机的序列 iV ,
M2 ,
… 中出 {Mi ) ( M2 ) (Ms) ( A/4 ) ( D)
现 。注 意 , D 按 对 角 线 表 值 的 相 反 值 计 算 。 M accept reject accept reject accept
u
: 2 accept accept accept accept accept
在 问 号 处 产 生 矛 盾 ,那 里 的 表 值 必 须 与 它 自 Ah reject reject reject reject reject
M4 accept accept reject reject accept
己相反。

4 . 2. 3
— 个图灵不可识别语言
上 节 介 绍 了 一 个 不 可 判 定 的 语 言 :ATMO
D reject reject accept accept

现 在 介 绍 另 一 个 语 言 ,此 语 言 甚 至 不 是 图 灵 图 4- 6 如果 D 在此图中出现 ,
可识别的 。注意 ,ATM 还 不 是 这 样 的 语 言 ,因 在问号处产生矛盾
132 第二部分可计算性理论

为 已 经 证 明 ATM 是 图 灵 可 识 别 的 。下 面 的 定 理 表 明 :如 果 一 个 语 言 和 它 的 补 都 是 图 灵 可 识
别 的 ,则 此 语 言 也 是 可 判 定 的 。这 样 ,对 任 何 不 可 判 定 语 言,它 或 它 的 补 至 少 有 一 个 不 是
图 灵 可 识 别 的 。回 想 一 下 ,一 个 语 言 的 补 是 由 不 在 此 语 言 中 的 所 有 串 构 成 的 语 言。如 果 一 个
语 言 是 一 个 图 灵 可 识 别 语 言 的 补 集 ,则 称 它 是 补 图 灵 可 识 别 的 (a Turing - recognizable )。

别的。
纖ISliKI
^
一 个 语 言 是 可 判 定 的 , 当 且 仅 当 它 既 是 图 灵 可 识 别 的 ,也 是 补 图 灵 可 识

换 句 话 说 ,一 个 语 言 是 可 判 定 的 ,当 且 仅 当 它 和 它 的 补 都 是 图 灵 可 识 别 的 。
证 明 要 证 明 两 个 方 向 。首 先 ,如 果 A 是 可 判 定 的 ,很 容 易 看 出 A 和 它 的 补 A 都 是
图 灵 可 识 别 的 ,因 为 任 何 可 判 定 语 言 都 是 图 灵 可 识 别 的 ,且 任 何 可 判 定 语 言 的 补 也 是 可 判
定 的。

^
下 面 证 另 一 个 方 向 。如 果 A 和 A 都 是 图 灵 可 识 别 的 ,令 iV SA 的 识 别 器 ,M2 是 A
的 识 别 器 。下 列 图 灵 机 M 是 A 的 判 定 器 :
M =“ 对 于 输 人
1. 在 输 人 w 上 并 行 运 行 和 M2 。
2. 如 果 接 受 ,就 接 受 ;如 果 M2 接 受 ,就 拒 绝 。

并 行 地 运 行 两 个 机 器 指 的 是 :M 有 两 个 带 ,一 个 模 拟 Mo 另 一 个 模 拟 M2 。此 时 ,M
交 替 地 模 拟 两 个 机 器 的 一 步 ,一 直 持 续 到 其 中 之 一 接 受 。
现 在 证 明 M 确 实 判 定 A 。任 一 个 串 加 要 么 在 A 中 ,要 么 在 A 中 。 所 以 ,Mi 和

^
必 定 有 一 个 接 受 w。 因 为 只 要 1 或 以2 接 受 ,M 就 停 机 ,所 以 M 总 会 停 机 ,因 而 它 是 个
判 定 器 。 还 有 ,M 接 受 所 有 在 A 中 的 串 ,拒 绝 所 有 不 在 A 中 的 串 ,故 M 是 A 的 判 定 器 ,
因 而 A 是 可 判 定 的。 瓢

ATM 不 是 图 灵 可 识 别 的 。
证明 A 。如 果 ATM 也 是 图 灵 可 识 别 的 ,则 ATM 将 是 可 判 定 的 。但
定 理 4 . 9 说 ATM 不 是 可 判 定 的 ,所 以 ATM 肯 定 不 是 图 灵 可 识 别 的 。

练习
4.1 对于下图所示的 D F A M,回答下列问题 ,并说明理由 。

0 0,1

a. < Af , 0100 ) G ADFA ? b. < M , 011 ) G ADFA ?


c. < M ) G ADFA ? d. < M , 0100 ) AREX ?
e. < M) G EDYA ?
^
f. < M , M> eEQDFA ?
4.2 考虑一个 DFA 和一个正则表达式是否等价的问题 。将这个问题表述为一个语言并证明它是可判
定的 。
4.3 设 ALLDFA ={〈 A > | A 是一个 DFA ,
且 L( A )=2 M 。证明 ALLDFA 是可判定的 。
第4 章 可 判 定 性 133

4.4 设
^^ CFG =
丨 〈 G〉
|G 是 一 个 生 成 e 的 CFG }。 证 明 AeCFG 是 可 判 定 的。

^

A4 .5 设 { M〉
ETM =〈 且 UM)= 0 }。证 明 ETM 的 补
|M 是 一 个 图 灵 机 , 是 图 灵 可 识 别 的。
4.6 设 X 是集合 U ,2 ,3 ,4 ,5 } ,Y 是 集 合 7 ,8 ,9 ,
{ 6, 1 0 }。
以 表 4-4 描 述 函 数 和 函 数 Y。 回 答 下 列
表4 4
- /㈤
函数 f 和 g

每 一 个 问 题 ,并 对 给 出 否 定 的 答 案 说 明 理 由 。
A a. 6
^
g n)
10
/ 是 一 对 一 的 吗? Ad.g 是 一 对 一 的 吗?
2 7 9
b./ 是 满 映 射 的 吗? e. g 是 满 映 射 的 吗?
3 6 8
c./ 是 对 应 的 吗? f . g 是 对 应 的 吗?
4 7 7
6 是 { 0 ,1 } 上 所 有 无 限 序 列 的 集 合 。用 对 角 化 方 法

_
4.7 设
5 6 6
证 明 B 是 不 可 数 的。

4.8 ST = {( i ,j , :j ,k 6 N }。证 明 :
) i,
k| T 是可数的。
4.9 回 想 一 下 定 义 4.1 0 中 采 用 的 定 义 集 合 具 有 相 同 规 模 的 方 法 ,并 证 明 “有 相 同 规 模 ” 是 一 个 等 价
关 系。

问题
.
4 10 引 理 2 . 2 5 的 证 明 中 提 到 对 0?13八 尸,当 P 从 状 态 <? 开 始 ,x d x e n 是 栈 顶 符 号 时 ,若 它 从 不
.
弹 出 任 何 I 以 下 的 符 号 ,也 不 读 入 任 何 输 入 符 号 ,则 称 i q x ) 是 looping 状 况 。SF= { < P,
g,
oo )|( q , x ) 是 一 个 对 于 P 的 looping 状 况 },证 明 F 是 可 判 定 的 。
4.11 对 于 CFLG 中 的 变 元 A ,如 果 它 在 某 个 字 符 串 的 派 生 中 出 现 ,则 称 A 是 可 用 的 ( US
able)。给 定 一 个 CFG G 和 一 个 变 元 A ,考 虑 测 试 A 是 否 为 可 用 的 这 样 一 个 问 题 。 将 该 问 题 形
式 化 为 一 个 语 言 ,并 证 明 它 是 可 判 定 的 。
4.12 设 A 是由某些图灵机的描述构成的一个图灵可识别语言 { … },其 中 每 个 M, 都 是
〈MDAMd ,
判 定 器 。求 证 :若 判 定 器 M, 的 描 述 在 八 中 ,那 么 存 在 可 判 定 语 言 D,但 它 不 能 被 任 何 M, 所 判
定 。( 提 示 :考 虑 A 的 一 个 枚 举 器 或 许 有 用。

.
4 13 设 CCFG ={〈G,
々〉|G 是 一 个 CFG , 其 中 々>0 或 k = o a ),证 明 CCFG
且 L( G )恰 好 包 含 々 个 字 符 串 ,
是 可 判 定 的。
. :
设 0={ < 0,1:
〉6 是 一 个 €?0,*:

^
4 14 | : 是某个 > 1 ( 0)的 子 串 丨,证 明 C 是 可 判 定 的 。(提 示 :使 用
^
ECFC 的 判 定 器 是 个 好 方 法 。

• 4.15 设 :
= { < M) |M 是 一 个 DFA ,它 接 受 1 比 0 多 的 串 },证 明 :
是 可 判 定 的 。(提 示 :一 些 关 于
CFL 的 定 理 对 此 会 有 帮 助 。

• 4.16 设 PALDFA ={〈 M|
> M 是 一 个 接 受 某 些 回 文 的 DFA },证 明 PALDFA 是 可 判 定 的 。(提 示 :一 些 关
于 CFL 的 定 理 对 此 会 有 帮 助 。

A,
.
4 17 设 BALdfa = { < M)
-
l A f S f D F A , 它 接 受 含 有 相 同 个 数 的 0 和 1 的 串 },证 明 B A L d f a 是 可
判 定 的 。( 提 示 :一 些 关 于 CFL 的 定 理 对 此 会 有 帮 助 。

4. 18 下 推 自 动 机 的 一 个 无 用 状 态 ( useless state ) 是 指 在 任 何 输 入 上 都 不 会 进 入 的 状 态 。 考 虑 检 査 一
个 下 推 自 动 机 是 否 有 无 用 状 态 的 问 题 。将 这 个 问 题 形 式 化 为 一 个 语 言 ,并 证 明 它 是 可 判 定 的 。
A,
4.1 9 对 于 那 些 可 以 从 两 个 不 同 计 算 分 支 接 受 某 些 字 符 串 的 NFA ,称 其 是 有 二 义 的 ( ambiguous )。设
AMB /GNFA = 〈 〉N 是 一 个 有 二 义 的 NFA },证 明 AMBJGNFA 是 可 判 定 的 。
{ N| ( 建 议 :一 种 较 好 的
解 决 方 法 是 先 构 造 一 个 适 当 的 DFA ,然 后 在 其 上 运 行 Edfa 。

4.2 0 设 且 只 要 接 受 就 接 受 •a/M 。 证 明 S 是 可 判 定 的 。
是 DFA ,
4 21. 且 L( 尺)是前缀无关的 }。证明 PREFIX- FREE
设 PREFIX- FREEREX = { R \ R 是一个正则表达式 , 是可

4.2 2
- :
判 定 的 。为 什 么 相 似 的 方 法 无 法 证 明 P尺 EFJX Fi?££ CFC 是 可 判 定 的?
设 A 和 B 是 两 个 不 交 的 语 言 。称 语 言 C 分 离 (separate ) A 和 B ,如 果 AGC 且 BGC。证 明 任 意
^
134 第二部分可计算性理论

两个不交的补图灵可识别语言都可由某个可判定语言分离 。
*
.
4 23 证 明 可 判 定 的 语 言 类 在 同 态 下 不 封 闭。
• 4.24 设 C 是一个语言 。 证明 C 是图灵可识别的 ,当且仅当存在一个可判定语言 D ,使得
( x,
〈 :
y〉G D) }。
4.2 5 检 查 两 个 DFA 在规模小于或等于某个数的所有串上的运行 ,并以此方法证明 EQDFA 是可判定的 。
计算这样的一个数 。
.
4 26 > 尺是一个正则表达式 ,其所描述的语言中至少有一个串
设八 = {〈尺| 以 111 为子串 ( 即有:r 和

^

-
:V 使得 w =: :
rlll y )}。证明 A 是可判定的 。
4.27 证明确定一个 CFG 是否生成 1 * 中的所有串的问题是可判定的 。 换言之 ,证明 {〈 G|
〉G 是{ 0 ,
1}
上的一个 CFG ,
且1 GL( G)} 是一个可判定语言。
*
A
4.2 8 设 2= { 0 , 1 } , 证明确定一个 CFG 是否生成 1 * 中的串的问题是可判定的 。换言之 ,证明 {〈 G >|
G 是{ 0 ,1 } 上的一个 CFG ,且 1 * 门 L( G)关 是 一 个 可 判 定 语 言 。
.
4 29 设 A ={〈尺 ,
S>|尺和 S 是正则表达式 ,且 L( 尺 )GUS)},证明 A 是可判定的 。
A
4.3 0 设 焱 = { 〈 M〉|MSDFA,它不接受任何包含奇数个 1 的串 },证明 A 是可判定的 。
4.31 设 I N F I N I T E PDA |M 是一个 PDA ,
{ < M〉 :
且 L( M)是一个无限语言丨。证明 JiVP7iVZ rePDA 是可判
定的 。
A
.
4 32 :: |A 是一个 DFA ,
设 JNFmJ T£ DFA ={〈 A 〉 且 UA )是一个无限语言 }。证明 INFINITEDFA 是可判
定的 。

习题选解
4. 1 是 。 DFAM 接受 0100 。 b. 否 。M 不接受 011 。
c. 否 。输人只有一个组成部分 ,因此形式不正确 。
d. 否 。 前半部分不是正则表达式 ,因此输入的形式不正确 。
e. 否 。M 的语言非空 。 f. 是 。 M 接受和它自身相同的语言。
4.5 设 &,
52 ,
… 是 f 上的所有字符串 。下述图灵机识别 Etm 。
“对于输人 〈 M> ,其中 M 是一个图灵机 :
2 ,3 ,… ,
1. 对 〗= 1 , 重复下面步骤 。
2. 在每个输人 & 52 * * * • f S , 上 ,M 运行 f 步 。
3. 如果 M 接受了其中任意一个 ,则接受 。否则 ,继续 。 ”
4.6 否 。因为 /( 1 )= /( 3 ),所以 / 不是一对一的 。

-
d. 是 。g 是一对一的 。
4. 17 由所有具有相同个 0 和 1 的字符串构成的语言是一个上下文无关语言 ,可以由文法 S 1S0SI
0SlS|e 来生成 。设 P 是可识别该语言的一个 PDA ,构造一个 BALDFA & 图灵机 M,其操作过程如
下 :对于输入 〈 B > ,此处 B 是一个 DFA ,用 B 和 P 构造一个新的 PDA 尺 ,它能够识别属于 B 和
P 的语言的交集 ;然后测试尺的语言是否为空 ;如果该语言为空 ,则 拒 绝 ,否则 ,接 受 。
4.1 9 下 面 的 过 程 将 判 定 A M B I G NFA o 对于给定的 NFAiV ,可以设计一个 DFA D 来模拟 iV ,当且仅当
iV 沿着两个不同计算分支接受某串时 ,D 接受该串 。 然后用 EDFA 的判定器来确定 D 是否接受所有
的串 。
构造 D 的方法类似于在定理 1. 19 的证明中从 NFA 到 DFA 的变换过程 。 我们通过在每个活
动状态上摆放小石子的方法来模拟 N。 首先 ,在初始状态以及与初始状态沿 e 转移可到达的状态
上摆放一个红色的石子 ,然后按照 iV 的变迁过程 ,移动 、 添加 、 去掉石子 ,并保持这些石子的颜
色 。 不论何时 ,只要有两个或两个以上的石子移动到同一状态上 ,就把这些石子换为蓝色的 。 当
读完输入后 ,如果是蓝色的石子在 iV 的接受状态 ,或者有红色石子在 iV 的两个不相同的接受状
态上 ,则接受 。
第4章 可 判 定 性 135

D F A D 的状态对应于石子的每种可能的位置 。对 于 N ,每个状态都有三种可能 :其上所放的


是红色石子 、 蓝色石子或是没有石子 ,因此 ,如果 N 有 n 个状态的话 ,D 将有 3” 个状态 。我们
定义了它的初始状态 、 接受状态和转移函数来实现模拟 。
4. 28 参考问题 2.30 , 如果 C 是上下文无关语言且 R 是正则语言 ,那么 CH 尺是上下文无关的 。因此
r r i L( G ) 是上下文无关的 。下面的图灵机判定这个问题的语言 。
“对于输人 < G ):
1. 构造 C F G H , 使得 L( H )= r H U G)。
2. 用定理 4.7 中 £CFC;
的判定器尺测试是否 L( H )= 0。
3. 如果尺接受 ,则拒绝 ;如果尺拒绝 ,则接受 /’
4. 30 下面的图灵机判定 A
“对于输入 < M〉:
1. 构造一个 D F A O 接受每个包含奇数个 1 的串。
2. 构造 D F A B,使得 L( B )= L( M) D U O)。

3. 使用定理 4.4 中 £ DFA & 判定器丁测试是否 L( B)= 0。
4. 如果了接受 ,则接受 ;如果了拒绝 ,则拒绝 。

4. 32 下面的图灵机 J 可判定 I N F I N I T E DFA o
1=“对于输入〈A > ,此处 A 是一个 D F A:
1. 令々是 A 的状态数 。
2. 构造一个 D F A D,接受所有长度不小于々的串 。
3. 构造一个 D F A M,使得 L( M)= L( A )
fl LCD )。
4. 使用定理 4.4 的 EDFA 判定器 T,测试 L( M)= 0。

5. 如果了接受 ,则拒绝 ;如果 T 拒绝 ,则接受 。

这个算法是可行的 ,因为可以接受无限多个串的 DFA 必定可以接受任意长的串 。因此该算法
能够接受这样的一些 DFA。反之 ,以々表示 DFA 的状态数 ,则如果该算法接受一个 DFA ,那么此
DFA 可接受长度为々或大于々的串 。 而这个串也许能够用正则表达式的泵引理所抽出 ,从而获得
无限多个接受的串 。
第 5 章|
Introduction to the Theory of Computation , 3 e

可 归 约 性

在 第 4 章 已 经 确 定 采 用 图 灵 机 作 为 通 用 计 算 机 的 模 型 ,并 介 绍 了 几 个 在 图 灵 机 上 可 解
的 问 题 ,还 给 出 了 一 个 计 算 上 不 可 解 的 问 题 ,即 ATM 。本 章 讨 论 另 外 几 个 不 可 解 问 题。在
讨 论 过 程 中 ,将 介 绍 一 个 基 本 方 法 ,可 用 来 证 明 问 题 是 计 算 上 不 可 解 的 ,这 个 方 法 称 为 可
归 约 性 ( reducibility ) 0

归 约 ( reduction ) 旨 在 将 一 个 问 题 转 化 为 另 一 个 问 题 ,且 使 得 可 以 用 第 二 个 问 题 的 解
来 解 第 一 个 问 题 。在 日 常 生 活 中 ,虽 然 不 这 样 称 呼 ,但 时 常 会 遇 到 可 归 约 性 问 题 。
例 如 ,在 一 个 新 城 市 中 认 路 ,如 果 有 一 张 地 图 ,事 情 就 容 易 了。 这 样 ,就 将 城 市 认 路
问 题 归 约 为 得 到 地 图 问 题。
可 归 约 性 总 是 涉 及 两 个 问 题 ,称 之 为 A 和 B 。 如 果 A 可 归 约 到 B ,就 可 用 B 的 解 来
解 A 。在 上 述 例 子 中 ,A 是 城 市 认 路 问 题 ,B 是 得 到 地 图 问 题 。 注 意 ,可 归 约 性 说 的 不 是
怎 样 去 解 A 或 B ,而 是 在 知 道 B 的 解 时 怎 么 去 解 A 。
下 面 是 可 归 约 性 的 更 深 入 的 例 子。从 波 士 顿 到 巴 黎 的 旅 行 问 题 可 归 约 到 买 这 两 个 城 市
间 的 飞 机 票 问 题 ,进 而 又 可 归 约 到 挣 得 买 飞 机 票 的 钱 问 题 。 此 问 题 还 可 归 约 到 找 工 作
问 题。
数 学 问 题 中 也 有 可 归 约 性 。例 如 ,测 量 一 个 矩 形 的 面 积 问 题 可 归 约 到 测 量 它 的 长 和 宽
问 题 ,解 线 性 方 程 组 问 题 可 归 约 到 求 矩 阵 的 逆 问 题 。
当 根 据 可 判 定 性 来 对 问 题 进 行 分 类 时 ,可 归 约 性 起 着 重 要 作 用。在 本 书 的 后 面 ,它 也
在 复 杂 性 理 论 中 起 着 重 要 的 作 用。当 A 可 归 约 到 B 时 ,解 A 不 可 能 比 解 B 更 难 ,因 为 B
的 一 个 解 给 出 了 A 的 一 个 解 。根 据 可 计 算 性 理 论 ,如 果 A 可 归 约 到 B ,且 B 是 可 判 定 的 ,
则 A 也 是 可 判 定 的 。等 价 地 ,如 果 A 是 不 可 判 定 的 ,且 可 归 约 到 B ,则 B 也 是 不 可 判 定
的 。后 者 在 证 明 许 多 问 题 的 不 可 判 定 性 时 起 着 关 键 作 用。
简 单 地 说 ,下 面 方 法 可 用 来 证 明 一 个 问 题 是 不 可 判 定 的 :先 证 明 另 外 一 个 问 题 是 不 可
判 定 的 ,再 将 此 问 题 归 约 到 它 。

5. 1 语言理论中的不可判定问题
ATM 是 不 可 判 定 的 ,即 确 定 一 个 图 灵 机 是 否 接 受 一 个 给 定 的 输 人 问 题 是 不 可 判 定 的 。
下 面 考 虑 一 个 与 之 相 关 的 问 题 : HALTTM , 即 确 定 一 个 图 灵 机 对 给 定 的 输 入 是 否 停 机 (通
过 接 受 或 拒 绝 ) 问 题 。 这 个 问 题 被 称 为 停 机 问 题 ( halting problem )。 若 将 ATM 归 约 到
HALTTM , 就 可 利 用 ATM 的 不 可 判 定 性 来 证 明 停 机 问 题 的 不 可 判 定 性 。设
= {〈妨,

^ ^
付八1 以 加 >丨] 是一个图灵机 ,
且对输入 1;停机 }
HALT 。
证 明 思 路 用 反 证 法 。假 设 HALT ,下 面 用 这 个 假 设 来 证 明 A T M 是 可
判 定 的 ,这 与 定 理 4.9 矛 盾 。关 键 步 骤 是 证 明 ATM 可 归 约 到 HALTTM 。
假 设 图 灵 机 尺 判 定 HALT 。利 用 可 以 构 造 一 个 判 定 ATM 的 图 灵 机 S。为 了 感 受
第5章 可 归 约 性 137

构造 S 的方法 ,假设你就是 S ,你的任务是判定 ATM 。当给你一个形如〈M,w〉的输入


时 ,如果 M 接 受 你 必 须 输 出 接 受 ;如 果 M 进入循环或拒绝 w , 你必须输出拒绝 。当
你在 w 上试着模拟 M 时 ,如果它接受或拒绝 ,你可以照着做 。但是你不能确定 M 是否在
循环 ,并且当 M 循环时 ,你的模拟将不会终止 。 这下坏了 ,因为你是一个判定器 ,因此
不允许循环。故这个思路行不通 。
HALTVM 的图灵机 i?” 这个假设 。使用尺 ,你可以检查 iVf 对 w
现在换用 “有个判定
是否停机 。如果尺指出 M 对 w 不停机 ,你就拒绝 ,因为 < M,w〉不在 ATM 中 。如果 R 指
出 M 对 w 确实停机 ,你就模拟它 ,而不会有死循环的危险 。
这样 ,如果图灵机 R 存在 ,就能判定 ATM ,但已经知道 ATM 是不可判定的 。由此矛
盾即可得到 “尺不存在” 这个结论 ,从而 HALTTM 是不可判定的 。
证 明 为 得 到 矛 盾 ,假 设 图 灵 机 尺 判 定 HALT ,由之可以构造图灵机 S 来判定
A 其构造如下 :
S = “ 在输入〈M, 〉 上 ,此 处 是 图 灵 机 M 和串 w 的编码 :
xe;
1. 在输入〈M, w〉上运行图灵机 R 。
2. 如果尺拒绝 ,则拒绝 。
3. 如果 i? 接受 ,则在 w 上模拟 M ,直到它停机 。
4. 如果 iVf 已经接受 ,则接受 ;如果 M 已经拒绝 ,则拒绝 。 ”
显然 ,如果尺判定 HALT , 则 S 判定 ATM 。因为 ATM 是不可判定的 ,故 HALTTM
也必定是不可判定的 。 ■

定理 5.1 说明了证明问题的不可判定性的方法 ,此方法对大多数不可判定性证明都适


用 ,只是除了 A ,它是由对角化方法直接证明的 。
为进一步使用可归约性方法来证明不可判定性 ,现在介绍另外一些定理及相应的证
明 。设
ETM ={〈 M > | M 是 一 个 图 灵 机 ,且 L( M)= 0 }
fei通 晉J : 是不可判定的。
f TM

证明思路使用定理 5.1 的反证法 ,设法推导出矛盾 。假设 ETM 是可判定的 ,以此来


证明 ATM 是可判定的 矛盾 。设 R 是判定 ETM 的一个图灵机 ,考虑怎样用 R 来构造判
定 ATM 的图灵机 S。当 S 收到输人〈 iVT,
w〉时 ,它应该怎样运行呢 ?
构造 S 的 一 个 想 法 是 :在 输 入 < M〉上运行 i? 且看它是否接受 。 如果是 ,则知道
L( M) 是空集 ,因此也就知道 M 不 接 受 如 果 拒 绝〈M> ,则能知道的所有事情只是
L( M ) 不 空 ,即 M 接受某个串 ,但还是不能知道 M 是 否 接 受 这 个 特 定 的 串 故 需 要 新
的方法 。
现在不在 〈 M > 上 运 行 i? ,取 而 代 之 的 是 在 < M > 的 一 个 修 改 型 上 运 行 i?。 先修改
< M> , 使 得 除 了 w 之外 ,M 对所有串都拒绝 ;但在输入 w 上 ,它如常运行。现在 ,此修
改型所能识别的唯一的串就是 w ,故它的语言不空当且仅当它接受比。然后再用尺来测定
这个修改型是否识别空语言。为此 ,向 R 提供那个修改型机器的描述 ,如果它接受 ,则此
修改型机器不接受任何串 ,因而 M 也就不接受
证明先用标准术语来写在证明思路中描述的那个修改型机器 。
A =“在输入:c 上 :
138 第二部分可计算性理论

1. 如果 :
c# t ,则拒绝 。

^
2. 如果:r = w ,则在输入 w 上运行 M ,当 M 接受时 ,就接受 。
这个机器以 w 作为它的描述的一部分。检查 x = W 是否成立的方法很显然 ,即扫描输

入并且一个字符一个字符地将它与 w 进行比较 ,就可确定它们是否相同。 .


再假设图灵机 R 判定 ETM 。如下构造判定 ATM 的图灵机 S:
S=“ 在输入〈Mw〉上 ,此处〈M,
w〉是图灵机 M 和串 w 的编码 :
1. 用 的 描 述 来 构 造 上 述 图 灵 机 Mi 。
2. 在输入〈MD 上运行 R 。
3. 如果尺接受 ,则拒绝 ;如果尺拒绝 ,则接受 。

^
注意 ,S 必须真的能够从 M 和 w 的描述来计算 iV 的描述 。它也确实能够做到 ,这是
因为 :只要在 M 中 增 加 一 个 额 外 的 状 态 来 执 行 的 检 査 即 可 。
如果尺是f : 的判定器 ,则 S 就是 ATM 的判定器 。而 ATM 的判定器是不存在的 ,故
TM

我们知道 ETM 必定是不可判定的 。 ■

另一个与图灵机有关的计算问题也很有意思 ,该问题是 : 给定一个图灵机和一个可由某


个更简单的计算模型识别的语言 ,测定此图灵机是否识别此语言。例如 ,令 i?£GULAi?TM 是
测定一个给定的图灵机是否有一个与之等价的有穷自动机问题 ,则这个问题与测定一个给
定的图灵机是否识别一个正则语言的问题相同 。设
R £GL/LAi? TM = {〈M〉| M 是 一 个 图 灵 机 ,且 UM)是 一 个 正 则 语 言 }
REGULARTM 是 不 可 判 定 的 。
证明思路像以前不可判定性定理的证明一样 。这个证明还是使用从 A 。
先假设 i?£GULARTM 是由图灵机 R 判定的 ,再用这个假设构造一个判定 ATM 的图灵机 S。现
在不明显的是 :怎样使用 i? 来帮助 S 实现它的任务 。虽然不明显 ,但还是能够做到 。
构造 S 的思路是 :先取 S 的输入为 〈 M ,
w〉,再修改 M 使得修改后的图灵机识别一个
正则语言 ,当且仅当 M 接 受 称 此 修 改 后 的 图 灵 机 为 M2 。设计 M2 使 得 :当 M 不接受
VU :
时 ,它识别非正则语言 { 0”1叫 n>0 }; 当 M 接受 w 时 ,它识别正则语言 S * 。必须说明
S 是 怎 样 从 来 构 造 M 2 的。方法是 :M2 自 动 接 受 所 有 在 { 0”1叫 中 的 串,另
外 ,如果 M 还 接 受 则 M2 就接受所有其他的串 。
注意 ,构造图灵机 M2 的目的并不是为了在某个输人上实际地运行 个常见的错
误 混 淆 。构 造 仅 仅 是 为 了 将 M2 的描述输入给假设存在的 REGULAi? 。一
旦这个判定器返回它的答案 ,那么就能根据这个答案判断 M 是否接受 w 。 这样就判定了
ATM ,这是个矛盾。
证 明 设 尺 是 判 定 REG(7LAi? TM 的一个图灵机 ,下面构造判定 ATM 的图灵机 S。S 的
运行方式如下 :
S=“ 对于输入 < M,
W〉,其中 M 是图灵机 ,w 是串 :
1. 构造下述图灵机 M2 :
M2 =‘ 在 输 入 上 :
a. 如果 x 具有形式 0”1”,则 接 受 。
b. 如果 x 不具有此形式 ,则在输入 w 上运行 M 。若 M 接受 u;
,则接受 。’
2. 在输入〈M2 〉上运行尺 。
第S 章 可 归 约 性 139

3. 如果 i? 接受 ,则接受 ;如果 i? 拒绝 ,则拒绝 。


” *
可类似地证明 ,检查一个图灵机的语言是不是下列语言都是不可判定的 : 上下文无关
语言 、 可判定语言甚至有限语言 。 事实上 ,关于这个问题有一个更一般性的结果 ,称为赖
斯 定 理 ( Rice ’s theorem )。它指岀 :测定语言的任何一个性质是否可由图灵机识别都是不
可判定的 。问题 5.16 给出了赖斯定理 。
到目前为止 ,证明语言的不可判定性所用的方法都是从 ATM 岀发的归约。但在证明某
些语言的不可判定性时 ,从另外一个不可判定语言 (如 Etm ) 岀发进行归约有时候更加方
便 。定理 5.4 证明 ,检査两个图灵机的等价性是一个不可判定的问题 。 当然 ,可以使用从
ATM 出发的归约来证明它 ,但下面给岀一个从 £TM 岀发的归约 ,作为证明不可判定性的另
一类型的例子 。设
E Q T M = { ( M 1 , M 2 ) \ M 1 和 M2 都是图灵机 ,
且 L ( Mi ) = L ( M2 ) }
繼jjjg EQTM 是不可判定的。
证 明 思 路 假 设 EQTM 是可判定的 。 如果能给出从 £TM 到 EQTM 的归约 ,就证明了
: 也是可判定的 。 构造这个归约的思路很简单,ETM 是检查一个图灵机的语言是否为空的
f TM
问题。EQTM 是测定两个图灵机的语言是否相同的问题。如果两个语言中碰巧有一个为空 ,
只要测定另一个机器的语言是否为空即可 ,即问题 Etm 。故当两个机器中有一个是用来识别
空语言时 ,问题 ETM 就是问题 £QrM 的一个特例。这个想法使得构造归约变得很容易。
证 明 设 图 灵 机 i? 判 定 £QTM 。如下构造判定 ETM 的图灵机 S:
,其中 M 是图灵机 :
S =“对于输入〈M〉
1. 在输入〈M,Mi > 上 运 行 R ,其中 M:是拒绝所有输入的图灵机 。
2. 如 果 接 受 ,则 接 受 ;如 果 i? 拒绝 ,则拒绝 。

如果 R 判定 EQTM ,则 S 判定 £ tm 。但由定理 5.2 , ETM 是不可判定的。故 EQTM 也
必定是不可判定的 。 ■

利用计算历史的归约
计算历史方法是证明 ATM 可归约到某些语言的重要技术 。在证明某个问题的不可判定
性时 ,如果此问题涉及检查某样东西的存在性 ,则此方法常常很有用。例如 ,此方法曾用
来证明希尔伯特第 10 问题的不可判定性 。希尔伯特第 10 问题是检查一个多项式的整数根
的存在性 。
图灵机在输入上的计算历史就是当这个图灵机处理此输入时所经过的格局序列 。它是
这个机器所经历的计算的完整记录 。


(
趕0 0 © 设 M 是 一 个 图 灵 机 ,功 是 一 个 输 入 串 。以 在 加 上 的 一 个 接 受 计 算 历 史
accepting computation history 是 一 个 格 局 序 列
) ,C ,…,C ,其 中 M在 是 w 上的
Ci 2 ; Ci
起 始 格 局, 的 一 个 接 受 格 局 ,且 每 个 都 是 C i 的 合 法 结 果 ,即 符 合 M 的 规 则 。
M 在 u; 上 的 一 个 拒 绝 计 算 历 史 ( rejecting computation history ) 可 类 似 定 义 ,只 是 G 应 是
一 个 拒 绝 格 局。

^ ^
计算历史都是有限序列 。 如果 ] 在切上不停机 ,则 ] 在加上既没有接受也没有拒绝
计算历史存在 。 确定型机器在任何给定的输入上最多只有一个计算历史 。非确定型机器即
使在单个输入上也可能有多个计算历史 ,它们与各个计算分支相对应 。但在目前 ,我们继
140 第二部分可计算性理论

续 将 注 意 力 集 中 在 确 定 型 机 器 。使 用 计 算 历 史 方 法 的 第 一 个 例 子 是 ,证 明 所 谓 的 线 性 界 限
自动机的不可判定性。
线 性 界 限 自 动 机 ( linear bounded automaton ,LBA ) 是 一 种 受 到 限 制 的
图 灵 机 ,它 不 允 许 其 读 写 头 离 开 包 含 输 入 的 带 子 区 域 。 如 果 此 机 器 试 图 将 它 的 读 写 头 移 出
输 入 的 两 个 端 点 ,则 读 写 头 就 保 持 在 原 地 不 动 。这 与 普 通 图 灵 机 的 读 写 头 不 会 离 开 带 子 的
左 端 点 的 方 式 一 样。
线 性 界 限 自 动 机 是 只 有 有 限 存 储 的 图 灵 机 ,如 图 5 - 1 所 示 。它 只 能 解 这 样 的 问 题 ,其
所 需 要 的 存 储 不 得 超 过 用 作 输 入 的 带 子 区 域 。使 用 一 个 比 输 入 字 母 表 要 大 一 些 的 带 子 字 母
表 ,就 能 使 得 可 用 存 储 增 加 到 常 数 倍 。也 就 是 说 ,对 于 长 度 为〃的 输 入 ,可 用 存 储 量 关 于
n 是 线 性 的 。这 就 是 此 模 型 的 名 称 的 由 来 。
尽 管 线 性 界 限 自 动 机 的 存 储 受 到 限 制 ,但 它 仍 然 十 分 强
大 。例 如 ,ADFA 控制器
ACFG > EDFA 和 £CFG 的 判 定 器 都 是 LBA。
每 个 CFL 都 可 由 一 个 LBA 来 判 定 。事 实 上 ,要 提 岀 一 个 不
能 由 LBA 来 判 定 的 可 判 定 语 言 还 需 颇 费 一 番 周 折 。 只 有 到
第 9 章 时 ,才 能 介 绍 一 个 可 以 做 到 这 一 点 的 技 术 。 -
图5 1 线性界限自动机的图示

设 ABA 是 判 定 LBA 是 否 接 受 它 的 输 入 的 问 题。 尽 管 A A 与不可判定问题 ATM 在图


灵 机 被 限 制 为 LBA 时 是 相 同 的 ,我 们 还 是 可 以 证 明
^
ALBA 是 可 判 定 的 。设

^
A LBA ={〈妨,
加|> ] 是一个接受串 1 ;的 LBA }
在证明 ALBA 的 可 判 定 性 之 前 ,证 明 下 面 的 引 理 是 有 用 的 。它 指 出 : 当 一 个 LBA 的 输
入 是 一 个 长 度 为 n 的 串 时 ,只 能 有 有 限 多 个 格 局。
碰 aaa 设 M 是 有 9 个 状 态 和 # 个 带 子 符 号 的 LBA 。 对 于 长 度 为
”的 带 子 ,M 恰
有 qngn 个 不 同 的 格 局。
证明 M 的 格 局 就 像 计 算 中 间 的 一 个 快 照 。格 局 由 控 制 状 态 、 读 写 头 位 置 和 带 子
内 容 组 成 。 这 里 ,M 有 g 个 状 态 。 它 的 带 子 长 度 是 〃,所 以 读 写 头 可 能 处 于 〃个 位 置
之 一 ,且 f 个 带 子 符 号 串 可 能 出 现 在 带 子 上 。 此 三 个 量 的 乘 积 就 是 带 长 为 〃的 M 的
格局总数。
ALBA 是 可 判 定 的 。


证 明 思 路 为 了 判 定 LBA M 是 否 接 受 输 入 vu ,在 w 上 模 拟 M 。在 模 拟 过 程 中 ,如 果
M 停 机 且 接 受 或 拒 绝 ,则 相 应 地 接 受 或 拒 绝 。如 果 在 加 上 循 环 ,困 难 就 出 现 了 。只 有
知 道 已 进 入 循 环 时 ,才 能 停 机 且 拒 绝 。

^
调 查 M 何 时 陷 入 循 环 的 思 路 是 :当 在 加 上 计 算 时 ,它 从 一 个 格 局 进 入 另 一 个 格
局 。 如 果 M 曾 经 重 复 过 一 个 格 局 ,它 将 继 续 一 再 地 重 复 这 个 格 局 ,因 此 就 陷 入 了 循 环 。
因 为 M 是 一 个 LBA ,故 可 利 用 的 带 子 方 格 的 数 量 是 有 限 的 。由 引 理 5 . 7 , 在 这 个 有 限 量
的 带 子 上 ,M 只 可 能 处 于 有 限 多 个 格 局 中 。所 以 ,要 使 M 不 进 入 曾 经 进 入 过 的 任 何 格 局 ,
就 只 有 有 限 多 个 格 局 可 以 选 择 。引 理 5.7 给 出 了 所 能 选 择 的 最 大 格 局 数 h 通 过 在 M 上 模
拟 々 步 ,就 能 知 道 M 是 否 进 入 了 循 环 。如 果 到 那 时 M 还 没 有 停 机 ,它 肯 定 陷 入 了 循 环 。
证 明 判 定 ALBA 的 算 法 如 下 :
L =“对 于 输 人 〈 M, w〉,其中 M 是 LBA ,w 是串 :
1. 在 w 上 模 拟 步 ,或 者 直 到 它 停 机 。
2. 如果 M 停机,则当它接受时接受,拒绝时拒绝。如果它还没有停机,就拒绝。

第S 章 可 归 约 性

如果 M 在 w 上 运 行 步 还 没 有 停 机 ,根 据 引 理 5.7 , 它必定在重复某个格局 ,即
陷入了循环 。这就是算法为什么在此情形下拒绝的原因 。
定理 5.8 说明了 LBA 和图灵机有一个本质的不同 : 对 LBA ,接受问题是可判定的 ,
但对图灵机来说却不是 。 然而涉及 LBA 的另外一些问题仍是不可判定的 ,其中之一是空
: _
141

_
^
性质问题 ,mf LBA ={〈M|
> MS LBA ,且 L( Af )= 0 }。为证明 £LBA 是不可判定的 ,
要用计算历史方法给出一个归约 。
ELBA 是不可判定的 。
证 明 思 路 证 明 使 用 从 ATM 出发的归约 。 要证明 : 如果 ELBA 是可判定的 ,则 ATM 也
是 可 判 定 的 。现 在 假 设 是 可 判 定 的 ,怎 么 使 用 这 个 假 设 来 判 定 ATM 呢?
对于图灵机 M 和输入串 IV , 通过构造一个 LBAB,再检查 L( B ) 是 否 为 空 ,就 可 确
在! 上的所有接受计算历史 。如果 M 接受 W ,
定 M 是否接受 w 。B 识别的语言包含了

^
这个语言就包含一个串 ,因此是非空的 。 如果 M 不接受 W , 这个语言就是空的 。 如果能
确定 B 的语言是否为空 ,显然就能确定 M 是否接受加 。
和功构造 B 。注意 ,不仅需要证明 B 的存在性 ,还必须证明一个

^
现在描述怎样从
图 灵 机 如 何 从 给 定 的 的 描 述 产 生 B 的描述 。
如同前面给出的不可判定性证明中的归约 ,构造 B 的目的是为了将 B 的描述输入给

^
假设存在的 £ BA 的判定器,而不是在某个输入上运行它。
设:r 是 Af 在 w 上的一个接受计算历史 ,构造 B ,使之接受输入:r 。 回忆一下 ,M 的
一个接受计算历史是 M 在接受某个串 w 时 经 历 的 格 局 序 列 ,…, Q 。出于证明的需
要 ,将接受计算历史表示成单个串 ,格局间以符号 # 相互隔开 ,如图 5 - 2 所示 。

-
C2
图 5- 2 B 的一个可能的输人

x
LBAB 按如下方式运行 。如果:r 是

时 ,应该接受 。首先 ,B 根据分界符将:


满足接受计算历史的三个条件 :

r 分解为串 ChG ,
在功上的一个接受计算历史 ,则当 B 收到输入
• ,CZ 。 然后 B 检查 C;是否
修 参

1.Ci 是 M 在 w 上的起始格局 。
2. 每个 C,+ 1 都是 C, 的合法结果 。
3.G 是 M 的一个接受格局 。
M 在 w 上的起始格局 Ci 应 该 是 串 其 。
中 <7 是 M 在 w 上的起始状态 。
这个串是直接装在 B 中的 ,所以 B 能够检査第一个条件 。接受格局是包含状态 gaccept 的格
局 ,所以 B 只要通过扫描 Cz 看能否找到 g accept ,就可检查第三个条件 。第二个条件的检查
是最困难的 ,对每对相邻的格局 ,B 要检查 Cl+ 1 是 否 为 C: 的合法结果 。这个步骤包括:
除了 C: 中读写头下的位置及其相邻位置外 ,验证 C: 和 Cl+ 1 是相同的 ,而上述几个位置
必须根据转移函数来更新 。B 通过在 C: 和 Ci+ 1 的相应位置间来回移动 ,验证更新是否适
当 。 为了在来回移动时记录当前位置 ,B 用点在带子上标记当前位置 。最后 ,如果条件 1 、
2 和 3 都 满 足 ,则 B 接受输入 。
将判定器的答案反过来 ,就能得到 M 是否接受 ;的答案 。 这样就判定了 Atm ,这是

^
142 第二部分可计算性理论

_
个矛盾 。
证明现在构造从 ATM 到 £LBA 的归约 。 假设图灵机 R 判定 ELBA 。如下构造判定 A
的图灵机 S:
S =“对于输入〈M, w〉,其中 M 是图灵机 ,w 是串 :
1. 如 在 证 明 思 路 中 所 描 述 的 那 样 从 构 造 LBAB。
2. 在输入〈 B〉上运行尺 。
3. 如果尺拒绝 ,则接受 ;如果 i? 接受 ,则拒绝 。

… __

如果 J? 接受 〈 扮 ,则 L( B )= 0 。 这样 , 在加上就没有接受计算历史 ,M 也就不
接受加。 因此 ,S 就拒绝 ( M ,w ) 类 似 地 ,0


如果 R 拒绝 〈 B 〉,则 B 的语言不空 。 B 能够 B ~~

接受的唯一串是 在 w 上的接受计算历史 。
这样 ,M 必定接受 。 相应地 ,S 也就接受

^
x (/3 a x x 你
〈 M,
w〉 -
。 图 5 3 是检查这样一个图灵机计算
Ci+i
历史的示意图 。
使用计算历史的归约技术 ,还能建立有关 图5 3- 检査一个图灵机计算历史的 LBAB

上下文无关文法和下推自动机问题的不可判定性 。回忆一下 ,定理 4.7 介绍了一个算法来


判定一个上下文无关文法是否派生串 ,即判定 L( G )= 0 是否成立 。与此相关 ,现在要证
明问题 “测定一个上下文无关文法是否派生所有可能的串” 是不可判定的 。 证明这个问题
不可判定是证明上下文无关文法等价性问题不可判定的重要步骤 。设
ALLCFG = {〈G〉
丨G 是 一 个 CFG 且 L( G) *
}
ALLCFG 是 不 可 判 定 的 。
证明用反证法 。为得到矛盾 ,假设 ALLCFG 是可判定的 ,用这个假设来证明 ATM 是
可判定的 。 其证明与定理 5.9 的证明类似 ,只是稍微复杂一些 ,绕了一点点弯 。 这是一个
从 ATM 出发利用计算历史的归约 。但由于技术上的原因 ,对计算历史的表示做了些修改 ,
后面将解释这样做的原因 。
现在来描述怎样运用 ALLCFG 的判定过程来判定 A t m 。对于图灵机 M 和输入串 VU , 首
先构造一个 CFGG ,使得它派生所有串当且仅当 M 不接受 w 。所以 ,如果 M 接 受 则
存在一个特别的串 ,G 不派生它 。 这个串应该是— 猜猜看—M 在 w 上的接受计算历
史 。即设计 G ,使之派生所有不是以在功上接受计算历史的串 。

^
为了使得 CFGG 派生所有不是 ] 在您上接受计算历史的串 ,采用下面的策略。一个串不
能成为接受计算历史的原因可能有多个。将 M 在 w 上的接受计算历史表示成 # G #Q …#
Q # , 其 中 G 是以在加上计算的第 f 步的格局。 然后 G 派生岀满足下述条件的所有串 :
1. 不以 G 开始 。
2. 不以一 个接受格局结束 。
'

3. 在 M 的规则下 ,某个 C, 不恰好派生 Cl+ 1 。


如果 M 不接受 w ,就没有接受计算历史存在 ,故所有串都因这样或那样的问题而不
能成为接受计算历史 ,因此 G 将派生所有串 ,这正是所希望的 。
现在来认真考虑 G 的实际构造 。不是真的构造 G ,而是构造一个 PDA D ,因为可以
使用定理 2.12 中的构造将 D 转换为一个 CFG。这样做是因为 ,就我们的目的而言 ,设计
第 尸 章 可 归 约 性 143

一 个 PDA 要 比 设 计 一 个 CFG 容 易 。D 以 非 确 定 的 分 支 计 算 开 始 ,猜 测 前 面 的 三 个 条 件 中
哪 一 个 被 拿 来 检 查 。它 以 一 个 分 支 检 查 输 入 串 的 开 始 部 分 是 否 为 G ,如 果 不 是 ,则 接 受 。
以 另 一 个 分 支 检 査 输 入 串 是 否 以 一 个 包 含 接 受 状 态 gaeeept 的 格 局 结 束 ,如 果 不 是 ,则 接 受。

第 三 个 分 支 的 作 用 是 :如 果 某 个 ( 不 恰 好 派 生( ,+ 1 ,就 接 受 。其 工 作 方 式 如 下 :首

^^
先 扫 描 输 入 ,直 到 它 非 确 定 性 地 确 定 它 已 到 达 C:。 第 二 步 ,它 将 C: 推 进 栈 里 ,直 至 由 符
号 # 标 记 的 结 尾 。第 三 步 ,D 弹 出 栈 与 ( 1+ 1 比 较 。除 了 读 写 头 附 近 位 置 外 ,它 们 应 该 相
同 。读 写 头 附 近 位 置 的 更 改 应 由 M 的 转 移 函 数 决 定 。最 后 ,如 果 发 现 不 匹 配 或 不 适 当 的
更 改 ,D 就 接 受 。
这 个 思 路 存 在 的 问 题 是 :当 乃 将 匕 弹 出 栈 时 ,它 处 于 相 反 的 顺 序 ,因 而 不 适 合 与
Cl + 1 比 较 。前 面 提 到 的 绕 弯 就 在 此 处 。换 一 种 方 法 来 写 接 受 计 算 历 史 ,使 得 每 隔 一 个 格 局
就 以 相 反 的 顺 序 出 现 。 奇 数 位 置 保 持 向 前 的 顺 序 写 ,但 偶 数 位 置 向 后 写 。这 样 形 式 的 一 个
接受计算历史如图 5 4 所示。 -
C3 Cy

-
图5 4 每隔一个格局就以相反的顺序出现

若 PDA D 以 此 修 改 后 的 方 式 将 格 局 推 进 栈 ,则 当 它 们 再 弹 出 时 ,其 顺 序 就 适 合 与
下 一 个 格 局 进 行 比 较 了 。D 的 设 计 就 是 要 使 得 接 受 那 些 不 是 接 受 计 算 历 史 的 任 何 修 改 后
的 串。
在 练 习 5 . 1 中 ,可 以 使 用 定 理 5.1 0 来 证 明 £QCFG 是 不 可 判 定 的 。

5.2 一个简单的不可判定问题
本 节 将 证 明 :不 可 判 定 性 现 象 不 仅 仅 局 限 于 自 动 机 的 问 题。 我 们 将 给 出 一 个 关 于 串 操
作 的 不 可 判 定 问 题 ,称 为 波 斯 特 对 应 问 题 (Post Correspondence Problem , PCP)。
可 以 很 容 易 地 将 这 个 问 题 描 述 成 一 种 游 戏 —多 米 诺 骨 牌 。 每 个 骨 牌 由 两 个 串 构 成 ,
一 边 一 个 。单 个 骨 牌 看 上 去 像

一簇骨牌看起来像
b ca abc
ca ’ Lab」’ L a J ,L c J/
任 务 是 将 这 些 骨 牌 进 行 排 列 (允 许 重 复 ),使 得 在 阅 读 顶 部 符 号 后 得 到 的 串 与 阅 读 底
部 符 号 后 得 到 的 串 相 同 。这 样 的 排 列 称 为 一 个 匹 配 ( match )。例 如 ,下 面 的 排 列 就 是 这 个
游 戏 的 一 个 匹 配。
b ca abc "

lb ca 7 3
阅 读 顶 部 后 得 到 串 abcaaabc ,与 阅 读 底 部 后 得 到 的 相 同 。可 以 将 骨 牌 变 形 ,使 得 顶 部 和 底
部 对 应 符 号 整 齐 地 排 列 ,以 便 更 容 易 表 示 匹 配 。
a b [c a a a b c

a b c a a a b e
144 第二部分可计算性理论

对 某 些 骨 牌 簇 ,不 可 能 找 到 这 样 的 匹 配 。例 如 ,簇
"
abc ~ ca acc
ab ’ ba
不 可 能 包 含 匹 配 ,因 为 顶 部 的 每 个 串 都 比 底 部 对 应 的 串 长 。
波 斯 特 对 应 问 题 是 :确 定 一 簇 骨 牌 是 否 有 一 个 匹 配 。 这 个 问 题 在 算 法 上 是 不 可 解 的 。
在 形 式 描 述 这 个 定 理 和 给 出 它 的 证 明 之 前 ,先 来 精 确 地 描 述 这 个 问 题 ,然 后 表 示 成 一
个 语 言。骨 牌 簇 P 是 PCP 的 一 个 实 例 :
_ _ L^ _

^
P=
"
i l r t2 1 [ tk i
■ bi ’ 2 ■ bk ■

匹配是一个序列 纟2 ,
纟1 , …,0 ,使 得 …\ 。问 题 是 确 定 P 是 否 有 匹 配 。令
> P 是波斯特对应问题的一个实例 ,
PCP = { < P| 且 P 有匹配 }
纖 PCP 是 不 可 判 定 的 。
证 明 思 路 虽 然 证 明 有 许 多 技 术 上 的 细 节 ,但 概 念 还 是 简 单 的 ,主 要 技 术 是 由 ATM 出


发 利 用 接 受 计 算 历 史 的 归 约。 证 明 :从 任 意 的 图 灵 机 M 和 输 入 w 都 能 构 造 一 个 实 例 P ,
使得匹配都是 在 加 上 的 接 受 计 算 历 史 。这 样 ,如 果 能 确 定 这 个 实 例 是 否 有 一 个 匹 配 ,
就能确定 M 是否接受
但是怎么构造 P 使得匹配都是
… 在 加 上 的 接 受 计 算 历 史 呢? 在 P 中 选 择 骨 牌 ,使 得
每 形 成 一 个 匹 配 ,便 模 拟 一 次 M。且 在 匹 配 中 ,每 个 骨 牌 都 将 一 个 格 局 中 的 一 个 或 多 个 位
置 与 下 一 个 格 局 中 的 相 应 位 置 连 接 起 来。
在 构 造 之 前 ,先 处 理 三 个 小 的 技 术 要 点 。( 在 第 一 次 通 读 时 ,不 要 过 于 担 心 这 些 。
)第
一 ,为 了 方 便 P 的 构 造 ,假 设

^
在 功 上 从 不 试 图 将 它 的 读 写 头 移 出 带 子 的 左 端 点 。这 要
求 首 先 改 变 M 以 防 止 这 样 的 行 为 。第 二 ,如 果 w = e ,则 在 构 造 中 使 用 串U替 代 w。第 三 ,
修 改 PCP ,要 求 匹 配 都 从 第 一 个 骨 牌 开 始 ,即 :
r ^i i
~
b[ _
稍 后 将 说 明 怎 么 去 掉 这 个 要 求。我 们 称 这 个 问 题 为 修 改 了 的 波 斯 特 对 应 问 题 (MPCP)。设
MPCP ={〈 P|
> P 是波斯特对应问题的一个实例 , P 有一个从第一个骨牌开始的匹配 }
现 在 进 入 证 明 细 节 ,即 设 计 P 来 模 拟 M 在 u;上 的 动 作 。
证 明 假 设 图 灵 机 i? 判 定 PCP。构 造 S 来 判 定 A 。令
M= ( Q,
2,r ,d ,qQ ,qaccept ’9 reject
其中 Q,2 , r,5 分别是 M 的状态集 、 输入字母表 、 带子字母表和转移函数 。
S 构 造 PCP 的 一 个 实 例 P ,使 得 P 有 一 个 匹 配 当 且 仅 当 M 接 受 U;
。 为此 ,S 首 先 构
造 MPCP 的一个实例〆。下 面 以 七 个 部 分 来 描 述 这 个 构 造 ,每 个 部 分 完 成 在 w 上 模 拟
M 的 一 个 特 定 方 面 。 在 构 造 过 程 中 ,为 了 解 释 我 们 正 在 做 什 么 ,用 一 个 例 子 插 在 构
造 中。

_
第 1 部 分 :构 造 以 下 列 方 式 开 始:


# q0 'W l
#
2 •••Wn #
放入 , 作为第一张骨牌
[告
^
.

因 为 p 是 MPCP 的 一 个 实 例 ,故 匹 配 必 须 以 这 张 骨 牌 开 始 。 底 部 串 以 M 在 w 上 接
/
第S 章 可 归 约 性 145

受计算历史中的第一个格局 = <?Q W I W2 … 开 始 ,如 图 5 5 所 示 。 -
到 目 前 为 止 ,只 得 到 一 个 部 分 匹 配 ,其 底 部 串 由
#
…叫 # 构 成 ,顶 部 串 只 有 为 获 得 匹 配 ,必 须 扩 展 顶 部 串
来 匹 配 底 部 串。用 新 骨 牌 来 做 这 样 的 扩 展 。这 些 新 的 骨 牌 强 迫
# qo IL' i IV2 #
模 拟 M 的 一 次 单 步 运 行 ,使 得 M 的 下 一 个 格 局 出 现 在 底 部 串
图 5- 5 MPCP 匹 配 的 开 始
的 扩 展 中。
第 2 、 3 和 4 部 分 在 严 中 增 加 的 骨 牌 在 模 拟 中 起 主 要 作 用。第 2 部 分 处 理 读 写 头 向 右
运 动 ,第 3 部 分 处 理 读 写 头 向 左 运 动 ,第 4 部 分 处 理 不 与 读 写 头 相 邻 的 带 子 方 格 。
第 2 部 分 :对 于 每 一 个 a , 和 g ,r G Q , 其 中


^Kf
如果 3((7,
a )=( r 6 , 则将 2
R ), 放入 中
br
第 3 部 分 :对 于 每 一 个 6 , c e r 和 g ,r e Q , 其 中

如 果 5( 9 ,)=( ,
6,1 ),则将
” ^ ] 放入,

第 4 部 分 : 对 于 每 一 个 a G r,将^ 放人 , 中。

现 补 充 一 个 虚 拟 的 例 子 来 说 明 到 目 前 为 止 我 们 已 经 构 造 了 些 什 么 。设 r= { o,i,2 ,u}。
假设 W 是 串 0 1 0 0 , M 的 起 始 状 态 是 %。在 状 态 % 且 读 0 时 ,假 设 转 移 函 数 指 示 M 进 人
状 态 在 带 子 上 写 下 2 ,并 将 它 的 读 写 头 向 右 移 动 。即 ,§((}0 9 O ) = ( q7 ,2 ,R ) 0

第 1 部 分 将 如 下 骨 牌 放 人 〆 中:

L # % o i o o # 」 [ b[ _
且 匹 配 以 如 下 方 式 开 始:
#

# 0 1 0 0 # 1
0 )=( g7 ,2 ,
另 外 ,因 为 5( g Q , R ),第 2 部 分 放 置 如 下 骨 牌 :

-2 - ,
^
7

因 为 0 , 1 ,2 , U是 r 的 成 员 ,故 第 4 部 分 将 下 列 骨 牌 放 入 中:
- -
- Ln
^-
厂 01 "
2 U
0
9
T .

这 一 步 与 第 5 部 分 一 起 使 得 匹 配 得 到 如 下 扩 展:
# Qo 0 [1 L0 0 1 #

# (?o 0 1 0 0 # ]2 (17 1101 01 #


这 样 ,第 2 、 3 和 4 部 分 的 骨 牌 使 得 我 们 能 够 通 过 “ 在 第 一 个 格 局 之 后 增 加 第 二 个 格
局” 的 方 法 来 扩 展 匹 配 。希 望 这 个 过 程 能 够 继 续 下 去 ,即 增 加 第 三 个 格 局 ,然 后 第 四 个 格
局, 为 此 ,需 要 增 加 一 个 新 的 骨 牌 来 复 制 符 号 # 。
146 第二部分可计算性理论

第 5 部分:
「並1 和
将 r i 放 入 prt
.# . Lutt J
这两个骨牌中的第一个使我们能复制符号 # ,它是分隔格局的标记 。 第二个骨牌使我
们能在格局的末端增加一个空白符 u,以此来模拟右边的无限多个空格 ,这些空格在写格
局时被压缩了。
接着上面的例子 ,假设在状态 g7 且读 1 时 ,M 进入状态 % ,在带子上写下 0 , 并将读
l )=( g5 ,0 ,
写头向右移动 ,即 5(g7 , R )。则在〆中有骨牌

最后的那个匹配被扩展到

再假设在状态 g5 且 读 0 时 ,M 进人状态 % ,在带子上写下 2 , 并将它的读写头向左


移动 。故 5(g5 ,0 )=( g9 ,2 ,
L)。则有骨牌
- Qg5 1 r 1 0
° 「Lq2 M w
],
^ 和 U 50 i
? (

- ⑼ 之」’ L 79 l(2」 922 U 2J .

第一个骨牌与本构造有关 ,因为读写头左边的符号是 0。前面的部分匹配就被扩展成

注意 ,构造匹配就是在 w 上模拟 M ,这个过程要一直进行到 M 到达停机状态 。 如果


出现了接受状态 ,则希望这个部分匹配的顶部 “ 赶上 ” 底部 ,从而使得这个匹配得以完
成 。为此 ,再增加如下骨牌 。
第 6 部分 :对于每一个 a e r,
- ]放入,
叫accept accept
将 和 中
-q accept L q accept
这个步骤的效果是 :在图灵机停机后增加一些 “伪步骤 ”。 这里 ,读写头 “吃掉 ”
些邻近的符号直到没有符号剩下 。再继续前面的例子 ,假设到机器以接受状态停机的地方
为止的部分匹配是
#

# 2 1 accept 0 2 #
^
刚才增加的骨牌允许匹配如下继续进行:
第5章 可 归 约 性 147

第 7 部分 :最后增加如下骨牌
[ q accept

来完成匹配:

这就结束了整个〆的构造 。注意尸'是 MPCP 的一个实例 ,而正是凭借 MPCP,匹配

^
才模拟了 在加上的计算 。为完成证明 ,回忆一下 ,MPCP 与 PCP 的不同之处在于 : 匹
配需要以序列中的第一个骨牌开始 。如果将〆看作 PCP 的一个实例 ,而不是看作 MPCP
的一个实例 ,则无论 M 是否接受 VU , 显然它都有一个匹配 。 你能发现它吗?(提示 : 它非
常短 。

现在说明怎么将〆转化为 PCP 的实例 P ,使之仍然模拟 M 在 w 上的运行 。这时用了
一点技术上的窍门 。思路是 :以 “第一个骨牌幵始” 为要求 ,并且将这个要求直接放入问
题 ,使其自动成为强制性的 。这样 ,就不需要明确地提出这个要求 。为此引入一些记号 。
是一个长度为 n 的串。定义★ 、 W :
••
U\ W2
* W3
*
= M3
U
* * * * *
籲籲參
U\ U2 Un

M3 *
Ml * U2
*
这 里, 是 在 M 中的每个字母前增加符号 * ,W M 中的每个字母后增加符号
, M 中每个字母的前和后都增加符号 * 。 为将〆转换为 PCP 的一个实例 P,
做下面的事情 :如果〆是如下的簇 :

r^ i
i \ t2 1 [ tk 1
M. M. J l. M.
就令 P 是如下的簇 :

tl 1「 2 1 「如 1 「 ◊!
_ 」’ L 办2 女 」’ ’ L O -
此时若再将 p 看作 PCP 的实例 ,就可以看到 ,可能形成匹配的唯一的骨牌是第一个骨牌

1
i
_
因为它是顶部和底部以相同符号 ( 即 * ) 幵始的唯一的骨牌 。除了强迫以第一个骨牌开始
匹配以外 , * 的使用并不影响可能的匹配 ,因为它们被原来的符号相互隔开 ,原来的符号
现在出现在匹配的偶数位 。骨牌
「 ◊1
L
是用来让顶部在匹配的最后再增加一个 * 。
^J
148 第二部分可计算性理论

5.3 映射可归约性
前面已经说明了 ,使用可归约性技术可以证明各种问题的不可判定性 。 本节将可归约
性这个概念形式化 ,这样就能更精确地使用它 ,例如 ,证明某些语言不是图灵可识别的 ,
此外还可应用于复杂性理论中 。
将一个问题归约为另一个问题的概念可以用多种方式来形式定义 , 选择使用哪种
方式要根据具体应用情况 。 我们的选择是一种简单方式的可归约性 , 叫作映射可归约
性 ( mapping reducibility ) 0

粗略地说 ,“用映射可归约性将问题 A 归约为问题指的是 ,存在一个可计算函数 ,


它将问题 A 的实例转换成问题 B 的实例 。如果有了这样一个转换函数 (称为归约),就能用
B 的解决方案来解 A。原因是 ,A 的任何一个实例可以这样来解 :首先用这个归约将 A 转换
为 B 的一个实例 ,然后应用 B 的解决方案 。 映射可归约性的一个精确定义在下文中介绍 。

5.3. 1 可计算函数
图灵机计算函数的方式是 :将函数的输人放在带子上 ,开始运行 ,并以停机后的带子
作为函数的输岀 。
函 数 是 一 个 可 计 算 函 数 ( computable function ) , 如果有某个
图灵机 M , 使得在每个输人 w 上 M 停机 ,且此时只有 /( w ) 出现在带子上 。
整数上所有通常的算术运算都是可计算函数。例如 ,可以制造一个机器 ,它
以〈m ,72〉为输入且返回 77? 与 7Z 的和 m + n。在这里不给出细节 ,而把它们当作练习。 ■

可计算函数可以是机器的描述之间的变换 。例如 ,如果


M〉是图灵机 W=

M 的编码 ,则可以有一个可计算函数 /,以 w 为输人 ,且返回一个图灵机的描述 ( M,
)。
iVT 是一个与 M 识别相同语言的机器 ,但 AT 从不试图将它的读写头移出它的带子的左端
点。函数 / 通过在 M 的描述中加入一些状态来完成这个任务 。如果 u;不是图灵机的合法
编码 ,/ 就返回 。

5.3. 2 映射可归约性的形式化定义


现在定义映射可归约性 。同以往一样 ,以语言来表示计算问题 。
嫌 腦 切 语 言 A 是映射可归约到语言 B 的 ,如 果 存 在 可 计 算 函 数 乃 2 * 2* 使
得对每个 w ,
vu :
A => f ( w ) G B

^
记做
^
A<m B 。称 函 数 / 为 从 A 到 B 的归约 。
-
图 5 6 说明了映射可归约性 。
A 到 B 的映射归约提供了将 A 的成员测试问题转化为
B 的 成 员 测 试 问 题 的 方 法 。为 了 检 查 是 否 有 可 使
用这个归约 / 将 w 映射到 /( w),然后检查是否 /( w)6 B。
术语映射归约来自于提供归约手段的函数或映射 。 -
图5 6 将 A 归 约 到 B 的函数 /

© 有 些 教 科 书 称 之 为 多 一 可 归 约 性 ( many-one reducibility )。
第S 章 可 归 约 性 149

如 果 一 个 问 题 映 射 可 归 约 到 第 二 个 问 题 ,且 第 二 个 问 题 先 前 已 被 解 决 ,那 就 能 得 到 原
来 问 题 的 解 。定 理 5.1 6 说 明 这 个 思 路 。
如果 B 是 可 判 定 的 ,则 A 也 是 可 判 定 的 。
A<m B 且
证 明 设 M 是 B 的 判 定 器 ,/ 是 从 A 到 B 的 归 约 。A 的 判 定 器 iV 的 描 述 如 下 :
“对 于 输 入 w :
1. 计 算 /( ⑹ 。
2. 在 f ( zv ) 上 运 行 M,输 岀 M 的 输 出 。

显 然 ,如 果 wGA ,则 因 为 / 是 从 A 到 B 的 归 约 。因 此 ,只 要 则
M 接 受 /( 加)。故 iV 的 运 行 正 如 所 求 。 徽

定 理 5.1 6 的 下 列 推 论 是 证 明 不 可 判 定 性 的 主 要 工 具。
如 果 且 A 是 不 可 判 定 的 ,则 B 也是不可判定的。
前 面 的 一 些 证 明 使 用 了 可 归 约 性 方 法 。回 顾 这 些 证 明 就 可 得 到 映 射 可 归 约 性 的 一 些
例 子。
dUfa 定理 5.1 使用从 ATM 出 发 的 一 个 归 约 ,证 明 了 HALT 。
这 个 归 约 说 明 了 如 何 用 HAL TTM 的 判 定 器 给 出 ATM 的 判 定 器 。 以 下 展 示 从 A T M 到
HALTTM 的 映 射 可 归 约 性 ,为 此 必 须 提 供 一 个 可 计 算 函 数 /,它 使 用 形 如 < M ,
w) 的输
人 ,返 回 形 如 的 输 出 ,使 得
〈 M,
切〉6 ATM 当 且 仅 当
下 面 的 机 器 F 计 算 了 归 约 /:
“对 于 输 入〈M,加〉:
1. 构 造 下 列 图 灵 机
=‘ 对 于 输 入:c:
a. 在 x 上 运 行 M。
b. 如 果 M 接 受 ,则 接 受 。
c. 如 果 M 拒 绝 ,则 进 人 循 环 。

7
2 输 出〈M ! ,;>。
”■

对 于 形 式 不 正 确 的 输 入 串 在 此 还 有 一 些 小 问 题 ,就 是 如 果 图 灵 机 F 确 定 某 输 入 对 于 输
入 行 的 描 述 “对 于 输 入〈M,
w〉” 来 说 形 式 不 正 确 ,因 而 此 输 入 不 在
: ATM 中 ,那 么 这 个
图灵机输出的串也不在 HALTTM 中 。可 是 所 有 不 在 HALTTM 中 的 串 都 将 被 处 理 。应 当 指
出 ,通 常 而 言 ,当 我 们 描 述 一 个 图 灵 机 进 行 A 到 B 的 归 约 时 ,都 假 定 形 式 不 正 确 的 输 入
串 已 经 被 映 射 到 B 之 外 了。 ■

定 理 5.1 1 中 的 波 斯 特 对 应 问 题 是 不 可 判 定 的 ,其 证 明 中 包 含 了 两 个 映 射
归 约。它 首 先 证 明 了 MPCP,然 后 又 证 明 了 MPCP < m PCP。 对 这 两 种 情 形 ,都
能 容 易 地 得 到 实 际 的 归 约 函 数 ,且 能 容 易 地 证 明 它 们 是 映 射 归 约 。如 练 习 5 . 6 所 示 ,映 射
可 归 约 性 是 传 递 的 ,故 这 两 个 归 约 合 起 来 蕴 涵 ATM<mPCP。 ■

在 定 理 5 . 4 的 证 明 中 ,隐 含 了 一 个 从 ETM 到 £QTM 的 映 射 归 约。 此 归 约 /
,其 中 是 拒 绝 所 有 输 入 的 机 器 。

^
将 输 入 〈 M > 映 射 到 输 出 〈 M, ] 〉 ■

奶 本 节 定 义 了 映 射 可 归 约 性 的 形 式 概 念 ,本 章 的 前 面 部 分 所 使 用 的 可 归 约 性
都 是 非 形 式 概 念 。定 理 5 . 2 证 明 £TM 是 不 可 判 定 的 ,这 个 证 明 说 明 了 映 射 可 归 约 性 的 形 式
150 第二部分可计算性理论

概念与可归约性的非形式概念之间的差别 。ETM 的不可判定性是通过将 ATM 归约到它来证


明的 。现在来看看能否将这个归约转换为映射归约 。
w ) 为输入 ,产生输出 〈 MD ,
根据原来的归约可以很容易地构造函数 /,它以 ( M ,
其中就是在那个证明中描述的图灵机 。但 M 接受 w 当且仅当 L( Mi ) 不空 ,故 / 是从
ATM 到 ETM 的映射归约。它还证明了 ETM 是不可判定的 ,因为可判定性不受求补的影响 。
但它没有给出从 ATM 到 ETM 的映射归约 。事实上 ,没有这样的归约存在 。练习 5.5 要求证
明这个结论 。 ■

.
映射可归约性对求补运算是敏感的 ,这对用可归约性来证明某些语言的不可识别性
非常重要 。 也可以使用映射可归约性来证明某些问题不是图灵可识别的 。 下列定理与定
理 5.16 十分相似 。
料狐 >4 如果 A<m B ,且 B 是 图 灵 可 识 别 的 ,则 A 也 是 图 灵 可 识 别 的 。
此定理的证明与定理 5.16 的证明类似 ,只是将 M 和 iV 改为识别器而非判定器 。
如 果 A<m B ,且 A 不 是 图 灵 可 识 别 的 ,则 B 也不是图灵可识别的。
作为这个推论的一个典型应用 ,设 A 是 ATM 的补集 Atm 。由推论 4.17 知 ,ATM 不是
图灵可识别的 。由映射可归约性的定义不难看出 :A<mB 与 A<mS 有相同的含义 : 为证
明 B 不是可识别的 ,可以证明 ATM<mS。还可以使用映射可归约性来证明某些问题既不
是图灵可识别的 ,也不是补图灵可识别的 ,就像下面的定理那样 。
EQTM 既 不 是 图 灵 可 识 别 的 ,也 不 是 补 图 灵 可 识 别 的 。

证 明 首 先 证 明 EQTM 不是图灵可识别的 。 为此 ,只要证明 ATM 可归约到 £QTM 即可 。


归约函数 / 如下 :
“对 于 输 入 其 中 M 是 图 灵 机 , 是 串 :
1. 构 造 下 列 两 个 机 器 和 Af 2 。
Mi =‘ 对于任何输入 :
a. 拒 绝
M2 =
‘ 对于任何输入 :
a. 在 w 上运行 M ,如果它接受 ,就 接 受 。

2. 输出 < Mi , M2 〉
。”
这 里, 什 么 也 不 接 受 。如 果 M 接 受 w 接受每一个输人 ,故两个机器不等

“ 2

^
价 。相反 ,如果 M 不 接 受 则] 2 什 么 也 不 接 受 ,故 它 们 是 等 价 的 。 这 样 / 将 ATM 归
约到 EQTM , 这正是我们所希望的 。
为了证明 EQ ,只要给出一个从 A £QTM 的补 ( gp £QTM )
的归约。因此要证明 ATM<m £:QTM 。下面的图灵机 G 计算归约函数 g 。
G =“对于输入 〈 M,w〉,其中 M 是 图 灵 机, 是 串 :
1. 构 造 下 列 两 个 机 器 ,

^
和] 2。

=
‘ 对于任何输人 :
a. 接受 。

M2 =
‘ 对于任何输入 :
a 在 w 上运行 M 。
第S章 可 归 约 性 151

b. 如果它接受 ,就接受 。

2. 输出〈 iW〗 ,M2 〉
。”
/ 和 g 之间的唯一差别在机器 1 上 。在 / 中 ,机器 Mi 总是拒绝 ,而在 g 中 ,它总

练习
等价 。这就是 g 是从 ATM 到 £QTM 的归约的原因 。
^ ^
是接受 。在 / 和 g 中 ,M 接受 w 当且仅当 ] 2 接受所有串 。 在 g 中 ,M 接受 w 当且仅当

5.1 证 明 £QCFG 是不可判定的 。

_
5.2 证 明 EQCFG 是补图灵可识别的 。
5.3 请找岀下面波斯特对应问题 ( PCP) 实例中的一个匹配:
r b_

^
J
' "
ab aba
abab T j aa
j
5.4 如果 A < m B 且 B 是一个正则语言 ,这是否蕴涵着 A 也是一个正则语言?为什么?
A5 . 5 证明 ATM 无法映射归约到 ETM 。 换句话说 ,也就是证明没有可计算函数可以将 ATM 归约为 Etm 。
( 提示 :用 ATM 和 ETM 的一些已知的矛盾和事实来证明 。

A5 . 6 证 明<m 是一个传递关系 。
A5 . 7 证 明 :如 果 A 是图灵可识别的 ,且 A<mA ,则 A 是可判定的 。
A 5.8 在定理 5.11 的证明中 ,修改了图灵机 M,使得它永不试图将其读写头移出带子的左端点 。假设
如果不做这样的修改 ,将不得不对 PCP 做怎样的修改来处理这种情形?

问题
5.9 设 |G 是歧义的 CFG }。 证明 AMBJGCFG 是不可判定的 。( 提示 : 使用来自 PCP
AMBJGCFG = {〈 G〉
的归约 。 给定一个 PCP 的实例

p= tl

: .
, tk
_
I K bk
用下列规则构造一个 CFG G:

-
S^ T \ B
T -^ ti Ta\ | | tkTak Ui ^ i I -I
*
tkak
B-^ bi Ba\ | ••• | bkBak \ b\ a\ \ ••• \ bkak
其中 a\ J ••• , ak 是新的终结符号 。证明这个归约可行 。

5.10 证明当且仅当 A < m ATM 时 ,A 是图灵可识别的 。
5.11 证明当且仅当 A < m 0 * 1 * 时 ,A 是可判定的 。

.
5 12 设 J= 丨对于某个:r 6 ATM 有 w= 0x , 或对于某个: ATM 有 w= l y ) 0 证明 / 和 7 都不是图灵可识别
的。
5.13 给出一个不可判定语言 B 的例子 ,使得 B<mB。
.
5 14 定 义 二 头 有 穷 自 动 机 ( two- headed finite automaton ,2 DFA ) 为确定型有穷自动机 ,它有两个双向
只读头 ,只读头部从输入带的左端点开始 ,可以独立地向左或向右移动 。 2 DFA 的带子是有限的 ,
正好包含输人和两个额外空白带子方格 。这两个空白带子方格一个在左端点 ,一个在右端点 ,它
们被用作定界符 。2 DFA 通过进入一个特殊的接受状态来接受它的输人 。例如 ,2 DFA 可以识别

^
语言 { anbncn|n 0 } o
a. 设 A 2 DFA = 〈 :
{ M,c >|M 是个 2DFA 且接受 :c } 。证明 A 2 DFA 是可判定的 。
{ M 〉| M 是个 2 DFA 且 L( M)= 0 }。证明 £2 DFA 不是可判定的 。
b. 设 £2 DFA =〈
.
5 15 一 个 二 维 有 穷 自 动 机 ( two-dimensional finite automaton ,2DIM DFA ) 的 定 义 如 下 :输 人 是 个 -
mX « 矩形 ( 对任意 m ,TZ>2 )。沿着矩形边界的方格包含符号 # ,而内部方格包含输人字母表 2 中
152 第二部分可计算性理论

的符号 。转移函数 R ,U ,
QX { L, D } 用来指示下一个状态和读写头的新位置
( 左 ,右 ,上 ,下)。当它进人事先设定的接受状态中的某一个时 ,机器就接受 。如果它试图移
出输入矩形或永不停机 ,它就拒绝 。 如果两个这样的机器接受相同的矩形 ,那么它们是等价
的 。考虑检査两个这样的机器是否等价的问题 。将这个问题表达成语言,并证明它是不可判定的。
A *
.
5 16 赖 斯 定 理 设 P 是任何图灵机的语言的非平凡属性 。证明确定某一图灵机的语言是否具有属性
P 这一问题是不可判定的 。 更正式地说 ,设 P 是一个语言 ,它由图灵机的描述组成 ,且 P 满
足下列两个条件 :首先 ,P 是非平凡的 它包含某些图灵机的描述 ,但不是所有的 ;其次 ,
P 是图灵机的语言的属性 无论何时 UMDsUAA ),当且仅当〈 M2 〉GP 时 ,有 〈 MP 6
P,此 处 的 和 从2 是 任 意 图 灵 机 。证 明 P 是一个不可判定语言 。
5.17 证 明 在 问 题 5. 16 中的两个条件对于证明 P 的不可判定性是不可缺少的 。
5.18 使 用 问 题 5. 16 中的赖斯定理 ,证明下列语言是不可判定的 :

Aa. IiVP7iVrr£ TM = 〈
{ iVf〉| iVf 是一个图灵机 ,且 JL ( Af ) 是一个无限语言 }。
b.〈{ M> | M 是一个图灵机 , 且 10116 L ( M)}。
c. ALLTM = { < M> | M 是一个图灵机 ,
且 L ( M ) = 2 * }。
5.19 对 于 任 意 自 然 数 x,设
3x + l x 为奇数
x/2 r 为偶数

_

如果从整数:T 开始 ,对 / 进行迭代 ,将可以获得如下序列: X , /(x), /( /( X)),… ,当碰到 1


便停止 。例如 ,如果 1= 17 ,则可以得到序列 17 ,52 ,26 ,13 ,40 ,20 ,10 ,5 ,16 ,8 ,4 ,
2 , 1。大量的计算机测试显示 ,在 1 到一个正整数的区间内任选一点作为起始点 ,都可以得到
一个以 1 为结尾的序列 。但是 ,是否以任意的正整数为起始点所得到的序列都能以 1 为结尾还
尚未得证 ,此问题被称为 3:r + l 问题 。
假设图灵机 H 可以判定 ATM ,请用 H 来描述另一个图灵机 ,该图灵机能够满足 3:r + l 问题 。
5.20 证明下列两种语言是不可判定的 :
a. OV£RLAPCFG ={〈 G,H〉| G 和 H 均是 CFG , 且 L( G )|
f L( H )关 0 }。( 提示 :与问题 5.9 的
提示相同 。

: - :
b.PR £ FJX Fi

^
ECFG ={ < G〉| G 是一个 CFG,且 L( G ) 是前缀无关的 }。
5.21 考虑这样的问题 :确定 PDA 是否接受某些形式为 { |加 6 { 0 ,
1 广 } 的串 ,用计算历史的方
法证明该问题是不可判定的 。
5.22 SX ={〈 M,w >|M 是一个单带图灵机 ,且 M 从不修改带子上包含输入 u;的那一部分 }。请问 X
是可判定的吗? 证明你的结论 。
5.23 对 CFG G 中的变元 A ,如果 A 出 现 在 某 字 符 串 的 所 有 派 生 中 ,则 称 A 是必要的 (neces -
:: ^ =〈 { G,
sary)。设 iV£ C£ SSAi A|〉A 是 G 的一个必要变元 }。
CFG

a. 证明 iVECf:

^
SSAi 是图灵可识别的 。
CFG

b. 证明 iVECESSA尺 yCFG 是不可判定的 。


*
5.24 对 一 个 CFG ,如果移除其任何一个规则都会改变其产生的语言 ,则称该 CFG 是 最 小 的 。 设
MINCFG = { ( G ) \ G 是一个最小的 CFG }。
a. 证明 MZiVCFG 是图灵可识别的 。
b. 证明 MIiVCFG 是不可判定的 。
5.25 设了 是一个图灵机 ,
每当 M 接受 w 时 ,
M 也 接 受 证 明 T 是不可判定的 。 :
A 5.26 考虑这样的问题 :一个双带图灵机 ,当它在输入 w 上运行时 ,检査它是否在第二条带子上写下
一个非空白符 。 将这个问题形式化为一个语言 ,并证明它是不可判定的 。
A 5.27 考虑这样的问题 :一个双带图灵机 ,检査在计算任意输入串的过程中它是否在第二条带子上写
下一个非空白符 。将这个问题形式化为一个语言 ,并证明它是不可判定的 。
第5章 可 归 约 性 153

5.28 考 虑 这 样 的 问 题 :一 个 单 带 图 灵 机 ,检 査 在 计 算 任 意 输 入 串 的 过 程 中 它 是 否 在 非 空 白 符 上 写 下 一
个 空 白 符 。 将 这 个 问 题 形 式 化 为 一 个 语 言 ,并 证 明 它 是 不 可 判 定 的 。
5.2 9 图 灵 机 的 一 个 无 用 状 态 ( useless state) 是 对 任 何 输 入 它 都 不 会 进 入 的 状 态 。考 虑 检 査 一 个 图 灵 机
是 否 有 无 用 状 态 的 问 题 。将 这 个 问 题 形 式 化 为 一 个 语 言 ,并 证 明 它 是 不 可 判 定 的 。
5.3 0 考 虑 这 样 的 问 题 :检 査 图 灵 机 在 输 入 w 上 当 其 读 写 头 处 于 带 子 最 左 方 格 时 ,是 否 曾 经 试 图 将 读 写
头 向 左 移 。将 这 个 问 题 形 式 化 为 一 个 语 言 ,并 证 明 它 是 不 可 判 定 的 。
5.31 考 虑 这 样 的 问 题 :检 査 图 灵 机 在 输 入 上 是 否 曾 经 在 计 算 过 程 的 某 个 地 方 试 图 将 读 写 头 向 左 移。

^

5.32 设 厂= { 0 ,
1
|
_
将 这 个 问 题 形 式 化 为 一 个 语 言 ,并 证 明 它 是 可 判 定 的 。

|} 是 此 问 题 中 所 有 图 灵 机 的 带 子 字 母 表 。下 面 是 勤 劳 函 数 ( busy beaver function)
的 定 义 :对 于 々 的 每 个 取 值 ,考 虑 所 有 有 々 个 状 态 的 图 灵 机 ,当 以 空 白 带 为 开 始 时 该
图 灵 机 停 机 。设 是 这 些 图 灵 机 的 带 子 上 所 留 下 的 1 的 最 大 个 数 ,证 明 是 不 可 计 算
函数。
5.3 3 证 明 波 斯 特 对 应 问 题 P ( P) 在 一 元 字 母 表 上 (即 在 字 母 表 上) 是 可 判 定 的 。
.
5 34 证 明 波 斯 特 对 应 问 题 P ( P ) 在 二 元 字 母 表 上 ( 即 在 字 母 表 2= { 0 ,
1 } 上) 是 不 可 判 定 的 。
5.3 5 对 于 简 易 波 斯 特 对 应 问 题 (silly Post Correspondence Problem ,SPCP),在 每 个 对 中 ,顶 部 的 串 与
其 底 部 的 串 长 度 相 同 ,证 明 SPCP 是 可 判 定 的 。
5.36 证明存在 < 1广 的 子 集 是 不 可 判 定 的。

习题选解
5.5 为 了 得 到 矛 盾 ,我 们 假 定 通 过 归 约 / 有 A T M <m E T M 。根 据 映 射 可 归 约 的 定 义 ,用 同 样 的 归 约 函

^
4却 不 是 图 灵 可

数 /可 得 出 然 而 是 图 灵 可 识 别 的 ( 参 见 练 习 4 . 5 的 解 答 ),
识 别 的 ,这 与 定 理 5.2 2 矛 盾 。
5.6 假 定 A<m B,B<m C ,那 么 有 可 计 算 函 数 / 和 g 使 得 x G A㈡ ㈡g( :y )G C。考 虑
复 合 函 数 M:
r )= g( /( x )),构 造 一 个 图 灵 机 按 以 下 方 式 计 算 /i: 首 先 ,用 一 个 图 灵 机 模 拟 /,输 人

为 ,输 出 为 :y ( 由 于 已 经 假 设 / 是 可 计 算 的 ,所 以 这 样 的 图 灵 机 是 存 在 的 );然 后 ,用 一 个 图 灵
X

机 模 拟 心 输 人 为:V ,输 出 为 M r )= g( /(:r )),因 此 /i 是 可 计 算 函 数 ,且 x 6 A㈡M:r )e C。故 此 ,


*

通 过 归 约 函 数 /i 有 A<m C。
5.7 假 定 A<m S,那 么 通 过 同 样 的 映 射 归 约 有 A<m A。因 为 A 是 图 灵 可 识 别 的 ,所 以 根 据 定 理 5 . 2 2
可 推 出 A 也 是 图 灵 可 识 别 的 ,再 由 定 理 4.1 6 可 以 推 出 A 是 可 判 定 的 。
5.8 需 要 处 理 这 样 的 情 况 :读 写 头 已 经 到 达 带 子 的 最 左 端 格 子 上 ,但 仍 然 试 图 向 左 移 动 。为 此 对 于 每
个 g ,r Q 和 a ,b e r , 可 增 加 如 下 的 骨 牌 :
~

[ ^ qa
此 处 (K g ,
a )=( r,
6,L )。 此 外 ,若 读 写 头 在 第 一 步 试 图 向 左 移 动 ,则 将 第 一 个 骨 牌 替 换 为
#
- # # <?0
5.16 用 反 证 法 ,设 P 是 满 足 属 性 的 可 判 定 语 言 ,并 设 就 是 一 个 判 定 P 的 图 灵 机 。现 在 证 明 如 何 通
过 构 造 图 灵 机 S , 用 尺P 来 判 定 AT M 。首 先 设 是 一 个 总 是 拒 绝 的 图 灵 机 ,即 L( T0 )= 0。不 失
,
一 般 性 ,可 以 假 定 < T 0 ) 乐 P 因 为 若〈了0 〉 6 P , 那 么 就 可 以 用 P 替 代 P 来 进 行 了。由 于 P 是
非 平 凡 的 ,所 以 存 在 一 个 图 灵 机 丁 使 得〈 丁> 6 P。下 面 利 用 能 够 区 别 和 了 的 能 力 设 计 一
个可以判定 A T M 的 图 灵 机 S:
S=“对 于 输 人
1. 用 M 和 i t;构 造 下 面 的 图 灵 机
=‘ 对 于 输 入 :
T:
154 第二部分可计算性理论

a. 在 w 上模拟 M ,如果停机和拒绝 ,那么拒绝 。 •

如果接受 ,则进人第 2 阶段 。
b. 在 :
r 上模拟 7\ 如果接受 ,那么接受 。’
2. 用图灵机尺P 确定是否有〈MW 〉6 P。如果返回是 ,那么接受 ;如果返回否 ,那么拒绝。

如果 M 接受 w ,那么图灵机I可以模拟了。 如果 M 接受 w 还接受 0 ,那么 L( M W) 等于
L( T)。因此 ,当且仅当 M 接受加时
5.18 a. iiVRrivrrf : 是一个关于图灵机描述的语言 ,它满足赖斯定理的两个条件 :首先 ,由于某些图
TM

灵机有无限的语言 ,但另一些却没有 ,所以它是非平凡的 ;其次 ,它仅仅依赖于语言。所以如


果两个图灵机识别同一个语言 ,那么这两个图灵机要么都有 ,或要么都没有相应的描述在
INFINITETM 之中 。因此 ,由赖斯定理可以推出 JiVFJivrrf:
TM 是不可判定的 。

5. 26

^^
设 3 = {〈] ,
加〉|] 是一个双带图灵机 ,当 M 运行在《
•;上时 ,它在其第二个带子上写一个非空白
符 } 。 证明 ATM 可归约到 B。 为了得到矛盾 ,设图灵机尺可判定 B 。 构造图灵机 S,它用尺来判定
ATM 0

S = “ 对于输入
1. 用 M 构造下面的双带图灵机了。
‘ 对于输人 X :
.
a 在:r 上用第一个带子模拟 M。

_
b. 如果模拟表明 M 接受 ,则在第二个带子上写一个非空白符 。

2 在 上 运 行 尺,确 定 在 输 人 w 上 :T 是否在第二个带子上写了一个非空白符。
3 . 如果尺接受 ,则 M 接受 W , 因此接受 ,否则拒绝 。

5. 2 7 SC = 〈
{ M〉 是双带图灵机 ,
| M 当它运行在某些输人上时 , 它在其第二个带子上写一个非空白符 }。
证明 ATM 可归约到 C。 为了得到矛盾 ,设图灵机尺可判定 C 。 构造图灵机 S , 它用尺来判定 Atm 。
S =“对于输人
1. 用 M 和 m 构造下面的双带图灵机 7\
& =‘ 对于任何输入 :
.
a 在 w 上用第一个带子模拟 iVT。
b. 如果模拟表明 M 接受 ,则在第二个带子上写一个非空白符 。

2 在 D 上运行尺,确定是否在第二个带子上写了一个非空白符 。
3 . 如果尺接受 ,则 M 接受 W , 因此接受 ;否则拒绝 。

I 第6章
Introduction to the Theory of Computation , 3 e

可计算性理论的高级专题

本章更深入地研究可计算性理论中的下列四个专题 :(1 ) 递归定理 ;(2 ) 逻辑理论;


( 3 ) 图灵可归约性 ;
(4 ) 描述复杂性 。除了在逻辑理论一节的结尾应用了递归定理外 ,本
章各节基本上相互独立 。本书中第三部分也不依赖于本章的内容 。

6. 1 递归定理
递归定理 ( recursion theorem ) 是一个数学结论 ,在可计算性理论的高级研究中起着
重要的作用。它与数理逻辑 、自再生系统理论以及计算机病毒都有联系 。
为介绍递归定理 ,考察与生命科学相关的一个悖论 ,此悖论是关于制造这样一个机
器 ,它要构造它自己的复制品 。 这个悖论可以概述如下 :
1. 生物都是机器 。
2. 生物都能自再生 。
3. 机器不能自再生 。
第一句话是现代生物学的一个宗旨 ,人们认为生物体是以机械方式运作的 。第二句话
明显成立 ,自再生能力是每个生物物种的本质特征 。对第三句话作如下讨论 。 考虑构造其
他机器的一个机器 ,比如生产小汽车的自动生产线 。原材料从一端进人 ,加工机器人根据
指令运行 ,完整的汽车从另一端岀来 。
可以断言 ,在如下意义下 ,生产线肯定要比它制造的汽车复杂 :设计生产线要比设计
汽车更困难 。这个结论必然是真的 ,因为生产线的设计中除了含有加工机器人的设计之
外 ,还含有汽车的设计。同样的原因适用于构造机器 B 的机器 A : A 肯定要比 B 复杂。但
一个机器不会比它自己更复杂 。因此没有机器能够制造它自己 ,故自再生是不可能的 。
怎么才能解决这个悖论呢? 答案很简单 :第三句是不正确的 。 制造能生产自己的机器
是可能的 ,递归定理就是说明怎么做到这一点 。

6 . 1 .1 自引用
本节从制造一个图灵机开始 ,此图灵机忽略输入 ,且打印岀它自己的描述 。 我们称这
个机器为 SELF。 为描述 SELF , 需要下面的引理 。
ctnaaih 存 在 可 计 算 函 数 ,对 任 意 串 zv 9 q( zv ) 是 图 灵 机 的 描 述 ,
Pu;打印出 1JU , 然 后 停 机 。
证明一旦懂得这个引理的叙述 ,证明就容易了。显然 ,可以任取一个字符串 W ,然
后从它构造一个图灵机 ,使得此图灵机将 W 内装在一个表中。这样 ,当此图灵机开始运行
后 ,它只要简单输岀 W 即可 。下列图灵机 Q 计算
“对于输入串 XJU :

1. 构造下列图灵机 Pw
=‘ 对于任意输入 :
156 第二部分可计算性理论

a. 抹去输入 。
b. 在带上写下 zu 0


c. 停机。
2. 输出 ( Pw )099
图灵机 SELF 有两个部分 ,分别叫作 A 和 B 。将 A 和 B 想象成两个分离的过程 ,它

^
们一起组成 SELF。我们希望 3 1 打印出 〈SfXF〉 。
=〈 AB〉
A 部分首先运行 ,再根据完成情况将控制传给 B。A 的任务是打印出 JB 的描述 。反过
来 ,B 的任务是打印出 A 的描述 ,结果就是希望的 SELF 的描述 。 这两个任务相似 ,但
它们的实现却不同 。先来说明怎么构造 A 部分。
使 用 机 器 来 定 义 A ,其中 P〈s> 用函数 g 在 〈 B〉处的值 g(〈 B > ) 描述 ,这样 ,A
部分是一个打印出〈 B〉的图灵机 。A 的描述依赖于是否已经有了 B 的描述 ,所以在构造
出 B 之前 ,无法完成 A 的描述 。
对于 B 部分 ,你也许十分想用 g(〈 A 〉 ) 来定义 ,但这不可行 。 这样做将是用 A 来定
义 B ,而定义 A 又要根据 B 。 此 即 所 谓 循 环 定 义 ( circular definition ),是违背逻辑法则
的 。 用另一种方法来定义 B ,使之能打印 A: B 从 A 产 生 的 输 岀 来 计 算 A 。
定义 〈A 〉是 g(〈 B〉 )。下面是棘手部分 : 如果 B 能得到 〈 B > ,它就能应用 g 来得到
〈A〉 。但 B 怎么做才能得到〈 B〉呢? 当 A 结束时 ,它被留在带子上 。所以 B 只要看着带
子就能得到 ( B ) 在 计 算 g(
0 〈 A 〉之后 ,B 将之加到带子的前面 ,然后将 A 和 B 组
〈 B > )=
合成一个机器并在带子上写下它的描述〈 AB > =〈 Sf LF > 。总之 , :
A = P ( B) 且
B =“对于输人 ( M ),其中 M 是一个图灵机的一部分 :
1. 计算 g( )。
〈 M〉
2. 将其结果与 〈 M〉结合来组成一个完整的图灵机描述 。
3. 打印这个描述 ,然后停机 。

-
至此 ,完成了 SELF 的 构 造 。 图 6 1 为 SELF
的示意图 。
的控制器
如果现在运行 SELF ,能观察到如下动作 :
1. 首先 A 运行 ,它在带子上打印 ( B ); 图 6- 1 SELF 的示意图 ,一个打印
2.B 开始运行,它查看带子,找到它的输入〈B〉
; 它自己的描述的图灵机

3.B 计算 g(〈 B > )= ;


,然后将之与 〈 B〉合并 ,构成图灵机 SELF 的描述〈SELF〉
〈A〉
4.B 打印这个描述 ,且停机 。
容易用任何程序设计语言实现这个构造 ,即得到一个程序 ,输岀就是它自己 。 甚至用
普通的英语都能做到这一点。假如想构造一个英语句子 ,它要求读者打印出与这个句子相
同的句子 。 一个方法是造下面的句子 :
打印这个语句
这个语句有我们想要的含义 ,因为它指示读者打印出这个语句本身 。但它没有明确地翻译
成程序设计语言 ,因为这个句子中的自引用词 “这个” 通常没有对应物 。 但在构造这样的
句子时 ,也不是非要用自引用词不可 。考虑下面的变换 :
打 印 下 面 语 句 的 两 个 副 本 ,在 第 二 个 副 本 上 加 引 号 :
“打 印 下 面 语 句 的 两 个 副 本 ,在 第 二 个 副 本 上 加 引 号 :

第6章可计算性理论的高级专题 157

在这个句子中 ,自引用词被一个同样的构造所取代 ,这样的构造曾被用来制造图灵机


SELF 。本引理中 ,B 部分的构造是如下的句子 :
打 印 下 面 语 句 的 两 个 副 本 ,在 第 二 个 副 本 上 加 引 号 :
A 部分与之相同 ,只是用引号将之括起来 。A 提供了 B 的一个副本给 B ,所以 B 就可以像
图灵机一样来处理那个副本 。
递归定理提供了以任意程序设计语言实现自引用词 “ 这个” 的能力 。 利用这个能力 ,
任何程序设计语言都有引用它自己的描述的能力 。下面将看到它的一些应用 ,在讨论应用
之前 ,先给出递归定理本身的叙述 。递归定理扩展了在构造 SELF 时使用过的技术 ,使得
一个程序不仅能得到它自己的描述 ,而且还能用这个描述继续进行计算 ,而不是仅仅将之
打印出来 。

计 算 函 数 r:2 *


( 递 归 定 理) 设 了 是 计 算 函 数
2 的 一 个 图 灵 机 R ,使 得 对 每 一 个 w,有 :
*
2* X 2*

r ( zv ) = t ( ( R ) zv )
初看之下 ,此定理的叙述技术性很强 ,但实际上 ,它代表的事情很简单 。为了制造一
9

2* 的 一 个 图 灵 机。 则 存 在

个能得到自己的描述 ,并用它计算图灵机 ,只需要制造一个在上述定理中称为了的图灵


机 ,使之以自己的描述作为输入的一部分 。然后递归定理就产生一个新的机器尺 ,它和 T :
一样运行 ,只是尺的描述被自动地装在了中 。
证 明 此 证 明 与 SELF 的构造类似 ,分三部 ( = P<B T> )
分 A 、 B 和:T 来构造图灵机尺 ,其中 T 由定理的 :
_
的控制器
-
叙述给出 。图 6 2 是尺的图示 。
图 6- 2 尺 的 图 示
A 是由 9(〈 6了〉) 描述的图灵机 P < BT > 。为了
保持输入 W ,我们重新设计 & 使得 ABD 印出任何预先在带子上存在的串的输出 。 在 A
运行之后 ,带子上包含 w 。
〈 B T〉 :
B 还是如下的过程 :检查带子 ,并将 g 应用于带子内容 ,结果是〈 A 〉 。然后 B 将 A 、

B 和 T 组 合 成 一 个 图 灵 机 并 得 到 它 的 描 述 最 后 ,描 述 的 编 码 和 w 结合 ,在
带子上形成结果串〈尺 , 加〉 ,并将控制传给 T。 : ■

6. 1 . 2 递归定理的术语
递归定理指出图灵机可以输岀自己的描述 ,然后还能用它继续进行计算 。初一看 ,这
个能力只是对一些无意义的任务有用 ,如制造一个打印它自己的备份的机器 。 实际上 ,下
面会介绍递归定理是解决某些与算法理论有关的问题的有力工具 。
在设计图灵机算法时 ,可用如下方式使用递归定理 。如果你正在设计一个图灵机 M ,
则可以在 M 的算法的非形式描述中包含如下短语 :“得到自己的描述〈 M > ”。一旦得到自
己的描述 ,M 就能像使用其他已计算出来的值一样使用这个描述 。 例如 ,JVT 可以简单打
印出 〈 M〉,就像前面在图灵机 SELF 遇到的一样 ;或者计算 〈 M > 中的状态数 ;或模拟
< M ) 为了说明这个方法 ,用递归定理来描述机器 SELF:
C

S£XF=“对于任意输入 :
1. 利用递归定理得到它自己的描述 < S E L F ) 0


2. 打印 ( S E L F ) 。,
递归定理展示了怎样实现 “获得自己的描述” 的构造 。为了产生机器 SELF,首先写
158 第二部分可计算性理论

下以下机器了:
了=“对于输入〈M,
w〉:
1. 打印〈 M〉并停机 。

图灵机了得到图灵机 M 和它输入的串 w 的描述 ,它打印了 M 的描述 〈 M〉
。 然后递
归定理展示怎样获得在输入 w 上的图灵机 R ,像 了 在 输 入 上 那 样 操 作。 因 此 i?
打印出尺的描述 ,恰好是机器 SELF 所需要得到的 。

6 . 1 .3 应 用
计算机病毒 (computer virus ) 是一个计算机程序 ,它被设计成在计算机中传播它自
己 。顾名思义 ,它与生物病毒有许多共同的地方 。计算机病毒作为一段代码而单独存在
时 ,是不活动的 ,但是 ,当把它适当地放人宿主计算机从而 “感染 ” 它时 ,它就变得很活
跃 ,传染它自己的副本给其他易受感染的机器 。很多媒介都能传播病毒 ,包括互联网络和
可存取磁盘 。 为了实现自复制的基本任务 ,一个病毒可能就包含递归定理的证明中所描述
的结构 。
现在讨论用递归定理来证明的三个定理 ,还有一个应用出现在 6.2 节的定理 6.15 中 。
首先回到 ATM 不可判定性的证明 。以前在定理 4.9 中曾用康托对角化法证明过它 ,递
归定理提供了一个新的 、 更简单的证明方法 。
ATM 是 不 可 判 定 的 。
证明为了得到矛盾 ,假设图灵机 H 可判定 ATM 。构造下列图灵机 B。
•8 =“对于输入
1. 由递归定理得到自己的一个描述 ( B ) 0

2. 在输入 ( B , zv ) 上运行 H。
3. 得到与 H 相反的结果 ,8卩 :如果 H 拒绝 ,则接受 ;如果 H 接受 ,则拒绝 。

对输入 w ,B 的结果与 H 相反 ,所以 H 不可能判定 ATM 。 证毕 。
下面是递归定理的另一个应用。
如 果 M 是 一 个 图 灵 机 ,则 M 的 描 述 〈 M> 的 长 度 是 描 述 M 的 串 中 所 含 符 号
的 个 数 。 如果没有与 M 等 价 的 图 灵 机 有 更 短 的 描 述 ,则 称 M 是最小的 (minimal )。令
iWiVTM = {〈M|
> M 是一个最小图灵机}
M I N T M 不是图灵可识别的 。
证明假设图灵机 :枚举 MZN 然后试图来得到矛盾 。构造下列图灵机 C。
C = “ 对于输入 u;
:
.
1 由递归定理得到它自己的一个描述〈C〉 。
. :
2 运行枚举器 ,直到一个比 C 的描述更长的机器 D 出现 。
3. 在输入功上模拟 D 。

因为 MJiVTM 是无限的 ,故 :的序列中必定含有图灵机 ,其描述比 C 的描述更长 。 因
此 ,C 的第二步最终将在某个图灵机 D 上终止 ,且 D 比 C 更长 。然后 C 就模拟 D ,且与
之等价 ,因为 C 比 D 短且与之等价 ,故 D 不可能是最小的 ,但 D 又在 :产生的序列中出
现 ,这样就得到了矛盾 。
递归定理的最后一个应用是一类不动点定理 。 函数的一个不动点 (fixed point ) 是
襄夕章可计算性理论的高级专题 159

个值 ,函数施加在该值上 ,得到的结果还是它 。 现在考虑图灵机描述的可计算的转换函


数 ,我们将证明 :对任意一个这样的转换 ,都存在一个图灵机 ,使得它的行为不随这个转
换而改变 。这个定理被称为递归定理的不动点形式 。
祕 通
《 2 * 是 一 个 可 计 算 函 数 ,则 存 在 一 个 图 灵 机 F,使得〆< F > ) 描

述 一 个 与 F 等 价 的 图 灵 机。 这 里 假 设 如 果 串 不 是 一 个 正 确 的 图 灵 机 编 码 , 那 么 它 描 述 的 图
灵 机 立 即 拒 绝。
在这个定理中 ,〖 起着转换的作用 ,F 是不动点 。
证明设 F 是下列图灵机 。
“对于输入 w :
1. 由递归定理得到它自己的一个描述〈 F〉。
2. 计算 K〈 F > ) 得到一个图灵机 G 的描述 。
3. 在输人 w 上模拟 G 。 ”
显然 , )=〈G〉描述了等价的图灵机 ,因为 F 模拟 G 。
〈 F〉和 K〈 F〉

6.2 逻辑理论的可判定性
数理逻辑是数学的一个分支 ,它研究数学本身 。它关心如下的问题 :什么是定理? 什
么是证明? 什么是真? 算法能判定哪些命题是真的呢?所有真命题都是可证的吗? 在这个
丰富而迷人的领域中 ,我们将接触某些专题 。
我们关心的焦点是这样的问题 : 能否确定一个数学命题是真还是假以及这种问题的可
判定性 。答案依赖于命题勾勒的数学域 。我们将检查两个域 :对于其中一个 ,能给出算法
来判定真假 ;对于另一个 ,这个问题是不可判定的 。
首先需要建立一个精确的语言来将这些问题形式化 。 我们的要求是能够考虑如下数学
命题:
: : 一
1. V g 彐 V r,
2. W a ,b,
c,
* y[户
n [(a,

6,
c〉 0 八 n〉 2 ) a”
—^
八(x ,y > l xjy # /? ) ]

^
3. Vg 彐户 V r ,y L p> q A ( x ,y>l - ( x y 9^ p f\ x y
p+2 \ ))
*

^
命题 1 称 ,有无限多个素数存在 ,在大约 2300 年以前的欧几里得时代 ,就已知道这
个命题是真的 。命题 2 称 为 费 马 大 定 理 ( Fermat ’ s last theorem ),这个命题在 1994 年由
安德鲁 威尔士 ( Andrew Wiles ) 证明为真 。最后 ,命题 3 称 ,有无限多个素数对 存
在 ,这 被 称 为 孪 生 素 数 猜 想 ( twin prime conjecture )。它到现在还未被解决 。
为了研究能否将确定真命题的过程自动化 ,首先把命题都仅仅看作串 ,再定义一个语
言 ,这个语言由所有的真命题组成 ;然后问 :这个语言是否是可判定的 。
为了将之进一步精确化 ,现在描述这个语言的字母表 :
{ 八 ,V ,
’,,
( ),V,
工,3,
J?i 9 •••
*Rk }
符号 A , V ,~I 称为布尔运算 ( Boolean operation ); “ (” 和 “)” 是括号 ( parenthesis );
符号 V 和 3 是 量 词 ( quantifier );符 号 用 来 代 表 变 元 ( variable ); 符号仏 ,
…,沁称为

© 素 数 对 是 指 两 个 差 为 2 的 素 数。
@ 如果在同一个公式中写多个变元 ,使用符号 y * 2:或 :
n, 等。为了保持字母表的有限性 ,不罗列所有
无限多个可能 。取而代之 ,只罗列变量符号 1,使用:r 串来指示其他变元 ,如 : r:c 代表 x2 , 代表 J:
3 ,等等。
160 第二部分可计算性理论

关 系 ( relation ) 0

公 式 ( formula ) 是 这 个 字 母 表 上 的 良 构 串 。 为 完 整 起 见 ,这 里 将 概 略 地 叙 述 良 构 公
式 ㊀(well formed formula ) 的 技 术 上 的 定 义 。你 可 以 忽 略 这 部 分 内 容 从 下 一 段 继 续 ,不 影
-

响 学 习 。形 如 尺 / ( xi ,
…,x) ) 的 串 是 原 子 公 式 (atomic formula ) 。值 )是 关 系 符 号 見 的 元
数 (arity )。一 个 良 构 公 式 中 所 有 出 现 的 相 同 关 系 符 号 必 须 有 相 同 的 元 数 。 据 此 ,一 个 串
必如满足以下条件 ,则 是 一 个 公 式 :
1. 是 一 个 原 子 公 式 ;
2. 具 有 形 式 #1 A 和 或 # 1 V #2 或 #1 ,其 中 和 #2 是 更 小 的 公 式 ;
3. 具 有 形 式 3 A[和 ] 或 V x,[0 ],其中和是更小的公式 。
数 学 命 题 中 的 量 词 可 能 出 现 在 任 何 地 方 。它 的 辖 域 ( scope ) 是 公 式 的 如 下 部 分 :紧
跟 在 量 词 化 变 元 后 的 一 对 括 号 中 的 部 分 。现 在 假 设 所 有 公 式 都 是 前 束 范 式 ( prenex normal
form ) , 即 所 有 量 词 都 岀 现 在 公 式 的 前 面。没 有 被 量 词 的 辖 域 所 约 束 的 变 元 称 为 自 由 变 元
( free variable ) 没 有 自 由 变 元 的 公 式 称 为 句 子 ( sentence ) 或 命 题 ( statement )。
0

dQEl 在 F 列 公 式 中 ,只 有 最 后 一 个 是 句 子 :
1.R\ ( x\ ) A 尺2( 工1 ,
工2 ,
工3 )

2. V X \[i? i { x\ ) A i? 2( 工1 ,
工2 工3 ) ]

3. V X i 彐工2 彐工3[尺1( 工1 ) 八尺2( 工1 , 工2 ,


工3 )]

建 立 了 公 式 的 语 法 之 后 ,现 在 来 讨 论 它 们 的 含 义 。 布 尔 运 算 和 量 词 与 通 常 的 含 义 相
同 。为 了 确 定 变 元 和 关 系 符 号 的 含 义 ,需 要 说 明 两 个 方 面 :一 个 是 论 域 ( universe ) , 覆 盖
变 元 可 能 的 取 值 ;另 一 个 是 将 关 系 符 号 指 定 为 确 定 的 关 系 。正 如 0.2 节 所 描 述 的 ,关 系 是
从 论 域 上 的 A 元 组 到 { TRUE , FALSE } 的 函 数 。关 系 符 号 的 元 数 必 须 和 指 派 给 它 的 关 系
和 元 数 一 致。
论 域 连 同 关 系 到 关 系 符 号 的 指 派 一 起 称 为 模 型@ ( model )。形 式 上 ,我 们 说 一 个 模 型
M 是 一 个 元 组 0/,
巧,…,
R ),其 中 U 是 论 域 ,h 到 匕 是 指 派 给 符 号 M 到 私 的 关 系 。
有 时 称 下 列 公 式 的 集 合 为 模 型 语 言 :这 些 公 式 只 使 用 此 模 型 指 派 的 关 系 符 号 ,且 对 每 个 关
系 符 号 ,使 用 正 确 的 元 数 。如 果 0 是 某 个 模 型 语 言 中 的 句 子 ,则 # 在 这 个 模 型 中 不 为 真 就
为 假 。如 果 0 在模型 A1 中 为 真 ,则 说 M 是 0 的 一 个 模 型 。
如 果 你 感 到 这 些 概 念 难 以 理 解 ,请 将 注 意 力 集 中 在 叙 述 它 们 的 目 的 上 ,即 我 们 想 建 立
一 个 陈 述 数 学 命 题 的 精 确 语 言 ,使 得 我 们 能 问 :某 个 算 法 能 否 确 定 哪 些 是 真 命 题 、 哪 些 是
假 命 题? 下 面 的 例 子 应 能 有 助 于 理 解 。
< ®
1 设 0 是 句 子 V i V y DRI ( ^ ,
30 Vi? i ( 3 )],模 型 是 如 下 的 模

^
^ ^
型 : 它的论域是自然数集 ,它 将 “小 于 或 等 于” 关 系 分 配 给 符 号 1 。 显 然 # 在人 中为
真 ,因为对任意两个自然数 a 和 6 , 和 6< 必 有 一 个 成 立 。但如果 M i 将 “小于” 关

^
^
系 (而不是 “小 于 或 等 于” 关 系) 指 派 给 i ,则 # 将 不 真 ,因 为 当 x 和 y 相 等 时 ,它 不
再成立 。
如 果 事 先 知 道 什 么 关 系 将 指 派 给 尺 ,就 可 以 使 用 这 个 关 系 的 惯 用 记 号 来 代 替 尺 ,且
按 习 惯 ,如 果 习 惯 上 有 ,就 使 用 中 缀 记 法 而 不 是 前 缀 记 法 。 这 样 ,对 于 模 型 A ,可 以 将

© 良构公式在有些书中被称为合式公式 。
模型又被称为解释或结构。
—译者注
^
第6 章 可 计 算 性 理 论 的 高 级 专 题 161

參写成 V 工 V :
y V:
y <x] 0

dQD 设 M 2 是 如 下 的 模 型 :它 的 论 域 是 实 数 集 R ,且 将 关 系 PLUS 指 派 给 Ri ,
其 中 :只 要 当 时 PLUSU ,6,c )= TRUE ,则 M2 是 必 = * [R ] ( u ,
} )] 的

一 个 模 型 。 但 如 果 用 N 代 替 R 作 为 的 论 域 ,则 此 句 子 为 假 。
如 同 前 一 个 例 子 ,因 为 事 先 已 经 知 道 加 法 关 系 将 指 派 给 故 可 将 0 写 为 V 3:
r
y 3 x [ _Ri ( x ,
[_ x+ x= y\ 以 取 代 V : :
^
~
:c,y )]。 ■

如 例 6.9 说 明 的 那 样 ,可 以 用 关 系 来 表 示 函 数 ,如 用 关 系 代 替 加 法 函 数 。类 似 地 ,还
可 以 用 关 系 来 表 示 常 量 ,像 0 和 1。
现 在 给 出 最 后 一 个 定 义 ,为 下 一 节 做 准 备 。如 果 是 一 个 模 型 ,这 个 模 型 语 言 中 所 有
真 句 子 的 集 合 称 为 A1的 理 论 系 统 ,简 称 为 理 论 ,记 为 Th( M )。

6.2. 1 — 个可判定的理论
数 论 是 最 古 老 、 最 困 难 的 数 学 分 支 之 一。许 多 关 于 自 然 数 及 其 加 法 和 乘 法 运 算 的 命 题
看 起 来 很 简 单 ,但 几 个 世 纪 以 来 ,数 学 家 对 此 都 束 手 无 策 ,如 前 面 提 到 的 孪 生 素 数 猜 想 。
数 理 逻 辑 最 值 得 庆 贺 的 发 展 之 一 是 :在 哥 德 尔 工 作 的 基 础 上 , 丘 奇 证 明 了 存 在 这 样
的 数 论 命 题 ,使 得 没 有 算 法 能 够 判 定 它 的 真 假 。 形 式 上 ,以 ( N ,+ ,X ) 标 记 如 下 的 模
型 :它 的 论 域 是 自 然 数 集 e ,具 有 通 常 的 + 和 x 关 系。丘 奇 证 明 了 这 个 模 型 的 理 论
+ ,X ) 是 不 可 判 定 的 。
Th( N ,
在 研 究 这 个 不 可 判 定 理 论 之 前 ,先 来 介 绍 一 个 可 判 定 理 论 。设 ( N , ) 是 一 个 同 样 的 +
模 型 ,只 是 没 有 X 关 系 。它 的 理 论 是 Th( N , ),例 如 公 式 V x V y + D r +:
r = 30 是真的,
+
因 而 是 T h( N , ) 的 一 个 元 素 。但 公 式 V y 3 I[I + T ] 是 假 的 ,因 而 不 是 T h( N ,+ )
= 3;
的一个元素。

+) 是可判定的。
T h( N ,
证 明 思 路 此 证 明 是 第 1 章 介 绍 的 有 穷 自 动 机 理 论 的 一 个 有 意 思 的 、 非 平 凡 的 应 用。
我 们 要 用 到 问 题 1.37 中 关 于 有 穷 自 动 机 的 如 下 事 实 : 如 果 输 入 符 合 某 种 特 定 形 式 ,则 有
穷 自 动 机 能 够 做 加 法 。输 入 并 行 地 描 述 三 个 数 ,方 法 是 :用 一 个 符 号 来 表 示 每 个 数 中 的 一
位 ,此 符 号 取 自 一 个 含 8 个 符 号 的 字 母 表 。下 面 将 用 的 方 法 是 这 个 方 法 的 一 个 推 广 ,用 含

-

21 个 符 号 的 字 母 表 中 的 符 号 来 表 示 数 的 f 元 组 。
下 面 给 出 一 个 算 法 ,对 输 入 为 ( N ,+ ) 的 语 言 中 的 句 子 检查其在模型中是否为
真 。设
( j> = Q\ X \ Q2 X 2 …Q#心]
其 中 :Q!,
…,Q/ 表 示 V 或 3 ,4 是 一 个 无 量 词 的 公 式 ,且 含 有 变 元 Tl , …
• yXl 。对 于 从 o到
/ 的 每 一 个 值 ,令 公 式 为
j> i = Qi +1 0CiJr\ Qi+2 OCi +2 •••QlXl[0]
这 样 ,<f>0 = 且 #
公式 & 有 〗 个 自 由 变 元 ,对 于 G N , 在 #,中 用 a 1 ,
… 替换变元 , ,
:?:

^
參 參 參
9 /

得到的句子记为勿(ai ,
…,a ,)。

为了方便 ,本章将 1,
N 的通常定义改变成 { 0 , 2 ,… }。
162 第二部分可计算性理论

,它 识 别 如 下 串 的 集 合

对于从 0 到 Z 的每一个值
算法构造了一个有穷自动机 A: :

这些串表示使心为真的数的 。算 法 先 直 接 构 造 Az ,构 造 方 法 是 解 问 题 1 . 3 7
/ 元组 所用方
法 的 推 广 。然 后 ,对 从 / 向 下 到 1 的 每 个 〗,它 用 A , 构 造 最 后 ,一 旦 得 到 A ,算 。
法 就 检 查 AQ 是 否 接 受 空 串 。如 果 接 受 ,则 彡 为 真 ,算 法 也 就 接 受 。

证 明 对 >0 , 定 义 字 母 表
0 0 0 0

li =
0 0
0 0
则叉包含了所有由 0 和 1 构成的 ‘
Z 元 列 向 量 。2, 上 的 每 个 串 表 示 f 的 二 进 制 整 数 ( 沿 行

读)。令 2 ={[ ]},其 中 [] 是 一 个 符 号 。
+
现 在 介 绍 判 定 Th(N, ) 的 算 法 。对 于 输 入 0 ( 其 中 0 为 句 子 ),算 法 如 下 运 行 :写
下 令 ,且 对 从 0 到 Z 的 每 个 如 同 在 证 明 思 路 中 介 绍 的 那 样 定 义 七 。再 对 每 个 这 样 的 / ,

由 卜 构 造 有 穷 自 动 机 A;,使 得 只 要 f ( , … , ) 为 真 ,它 就 接 受 叉 上 对 应 于 / 元 组

-
a\ 的 串。
为构造第一个机器
的 构 造 如 下:
^ ^ + ) 的 语 言 中,
Az ,注 意 到 和 = 0 是 原 子 公 式 的 布 尔 组 合 。 Th( N,
原 子 公 式 只 有 单 个 加 法 。对 每 个 这 样 的 单 个 加 法 ,可 以 构 造 一 个 有 穷 自 动 机 来 计 算 这 样 的
单 个 加 法 所 对 应 的 关 系 ,然 后 将 这 些 有 穷 自 动 机 组 合 起 来 ,就 能 给 岀 自 动 机 A;。 这 样 做
要 涉 及 正 则 语 言 类 对 于 交 、并 和 补 的 封 闭 性 ,以 计 算 原 子 公 式 的 布 尔 组 合 。
接 下 来 说 明 怎 么 由 A ,+ 1 来 构 造 A ,。如 果 = 3:
rl + 1 + 1 ,则 构 造 A: 使 得 它 的 运 行

几 乎 与 Al+ 1
接 收。

^
样 ,区 别 在 于 A , 非 确 定 地 猜 的 值 ,而 不 是 将 它 作 为 输 入 的 一 部 分 而

更 精 确 地 说 ,对 于 Al+ 1 的 每 个 状 态 ,A: 包 含 一 个 与 之 对 应 的 状 态 ;且 九 还 包 含 一 个
新 的 起 始 状 态 。每 当 八,读 下 列 符 号 时 ,
bi

bi-\
bt
这 里 每 个 是 数 a/ 的 某 一 位 ,它 非 确 定 地 猜 测 z 6 { 0 ,
l },且 在 下 列 输 入 符 号 上
模拟 Am 。
「 心1 1

bi-\
bi

最 初 ,A , 非确定地猜测 A +1 的 引 导 位 ,这 些 引 导 位 对 应 于 到 a, 中 隐 藏 的 引 导 0 。 猜 测

^
的 方 法 是 :从 它 新 的 起 始 状 态 到 所 有 状 态 非 确 定 性 地 使 用 r 转 移 进 行 分 叉 ,这 些 状 态 是
八1+1 以 五+1 中 下 列 符 号 的 串 为 输 入 、 从 它 的 开 始 状 态 所 能 到 达 的 所 有 状 态 。
如 果 = V 1+1

6.2. 2

^
个不可判定的理论

+
如前所述 ,Th( N , ,
_ -
「0 1

显 然 ,如 果 存 在 a , + i ,使 得 A / +!接受 (
0
L0 J

a出),$ |
第6章 可 计 算 性 理 论 的 高 级 专 题

厂01

贝! A, 接 受 ( <2 i ,

… ,a )。
, 它等价于 3 A + 1 4+ 1 o 首先构造识别语言 Al+1 的补的有穷
自动机 ,然后应用上述对于 3 量词的构造 ,最后再一次应用补来得到 A ,。
有穷自动机 AQ 接受某个输入 ,当且仅当和为真 。所以算法的最后步骤是检查
否接受 e 。如果是 ,则 0 为真 ,且算法接受它 ;否则 ,就拒绝 。

X ) 是一个不可判定的理论 ,不存在算法能够判定数学命题的
+ ,X ) 的语言上也是如此 。这个定理在哲学上具有极大的重要性 ,
真假 ,即使限制到 ( N ,
因为它说明了数学不能被机械化 。 现在陈述这个定理 ,但只给出一个简短的证明概要 。

163

Ao 是
*

+ ,X ) 是 不 可 判 定 的 。
Th( N ,
虽然这个定理的证明包含很多细节 ,但在概念上并不困难 。它使用了第 4 章中介绍的
不可判定性证明的模式 ,即通过将 + ,X )
ATM 归约到 Th( N , +
来 证 明 Th( N , ,X ) 的不
可判定性 ,也使用了计算历史的方法 。归约的存在性依赖于下列引理 。
设 + ,X ) 的语
M 是一个图灵机 ,w 是 一 个 串 ,从 M 和 i t;能构造 ( N,
言 中 的 公 式 彡M, , 使得它只包含单个自由变元 X ,且句子 3 为真当且仅当 M 接
受w 0

证 明 思 路 公 式 “说” x ( 经 过 适 当 编 码 ) 是 妨 在 加 上 的 一 个 接 受 计 算 历 史 。
当然 ,:
T 实际上只是一个相当大的整数 ,但它表示计算历史的方式可以使用 + 和 X 运算来
检查 。
多 的 实 际 构 造 太 复 杂 ,难 于 在 这 里 介 绍 。它 在 带 有 + 和 X 运算的计算历史中抽取个
体符号来检查 M 在 W 上的起始格局是否正确 ,检查每个格局是否是它前一个格局的合法
转移 ,最后检查最后的格局是否被接受 。
定理 6 . 1 1 的 证 明 下 面 给 出 一 个 从 ATM 到 Th( N ,+ ,X ) 的映射归约。这个归约应用
引理 6.12 从输入 ( M ,
w ) 构 造 公 式 必M,W ,然后它输出句子 3 T # M o *

下面大致说明值得庆贺的哥德尔 ( Kurt Godel 's ) 不 完 全 性 定 理 ( incompleteness the -


orem ) 的证明 。非形式地 ,这个定理称 : 任何关于数论可证性概念的形式系统中都含有不
可证的真命题 。
粗 略 地 说 ,一 个 命 题 S2 ,… ,
# 的 形 式 证 明 ( formal proof );r 是命题的一个序列 Si ,
St , 其中 S/ 二 厂 且 每 个 S, 都是如下得到的 :由它前面的一些命题和一些关于数的基本公
理 ,应用简单而精确的应用规则得到 。为节省篇幅 ,本书没有定义这个证明的概念 ,就我
们的目的而言 ,关于证明的下面两个合理性质已足够使用 :
1. 命题证明的正确性可以由机器来检查 。形式上表示 , {〈 ,

^
|
7r 〉;r是 0 的一个证明}
是可判定的 。
2. 证明系统是可靠的 ,即一个命题如果是可证的 (即有一个证明),则它为真 。
164 第二部分可计算性理论

如果一个可证性系统满足这两个条件 ,则下面三个定理成立 。
+ ,X ) 中可证命题的集合是图灵可识别的 。
Th( N ,
证 明 如 果 # 是 可 证 的 ,则下列算法 P 接受其输入 0 。算法 P 使用在可证性性质 1 中
所说的证明检查器 ,检查每个可能成为彡的证明的候选串。如果发现一个候选串正是一个
证明 ,则 接 受 它 。 *
现在使用前面的定理来证明不完全性定理。
+ ,X ) 中存在不可证的真命题 。
Oiggll Th( N ,
证 明 用 反 证 法 。假设所有真命题都是可证的 ,利用这个假设来构造判定命题是否为
真的算法 D,与定理 6.11 矛 盾 。
对于输人 h 算法 D 如下运行 :在 输 人 0 和 上 并 行 地 运 行 定 理 6.13 的证明中给岀
的算法 P。这两个命题总有一个为真 ,根据假设 ,总有一个是可证的 。因 而 P 在其中一个
输 人 上 停 机 。根 据 可 证 性 性 质 2 , 如 果 # 是 可 证 的 ,则 0 为 真 ;如 果 是 可 证 的 ,则必
为假 。所以算法 D 能判定

^
的 真 假 性。 ■

作为本节的最后一个定理 ,用递归定理明确地给岀 ( N , + ,X ) 的语言中的一个句子 ,

_
它为真 ,但却不可证 。定 理 6.14 说明存在这样的句子 ,但 没 有 像 现 在 所 做 的 这 样 ,将 它
实际地描述出来 。
本定理的证明中描述的句子 0unpr vable 是 不 可 证 的 。
()

证 明 思 路 使 用 递 归 定 理 得 到 自 引 用 ,构造一个句子 ,称 “这个句子是不可证的”。
证 明 设 S 是 如 下 运 行 的 图 灵 机。
s =“对于任意的输入 :
1. 由递归定理得到它自己的描述 〈 S> 。
2. 用引理 6.12 构造句子 0= 3 c[A,]。 。
^
3. 在 输 人 0 上运行定理 6.13 给出的算法 P。
4. 如果上一步接受 ,就接受 。 ”
设 Anprovable 是算法 S 的第二步所描述的句子 0。0 为 真 ,当是仅当 S 不接受 0 ( 串 0 是
随意选择的)。
如果 S 能找到心npn vable 的 一 个 证 明 ,S 就 接 受 0 , 这 个 句 子 也 就 因 之 为 假 。一个假句
)

子 是 不 能 被 证 明 的 ,所 以 这 种 情 形 不 可 能 发 生 。 剩 下 的 唯 一 的 可 能 性 是 S 不 能 找 到
0 unprovabie 的 证 明 ,因 而 S 不接受 0。但我们已宣布过 0unprQvable 为真 。
6.3 图灵可归约性
第 5 章 引 人 可 归 约 性 概 念 ,其核心思想是利用一个问题的解来解另一个问题。如果 A
可 归 约 到 J3 , 且可以找到 B 的一个解 ,就能得到 A 的 一 个 解 。随 后 ,又 描 述 了 映 射 可 归 约
性 ( mapping reducibility ),它 是 可 归 约 性 的 一 个 特 殊 形 式 。 但 映 射 可 归 约 性 是 否 已 经 在
最广泛的意义下完全刻画了可归约性的直观概念呢? 没 有 。
:

^
例如 ,考虑两个语言 ATM 和 ,直观上 ,它们能够互相归约 ,因 为 它 们 中 任 一 个 问

^
题的解都可被用来求解另一个问题 ,只要将答案反过来即可 。但是 , 不能映射可归约
到 ATM ,因为 A ,而 却不是 。 现在将介绍一种更广义的可归约性 ,
叫作图灵可归约性 ( Turing reducibility ), 它更深刻地刻画了可归约性的直观概念 。
^
襄 章可计算性理论的高级专题 165

语言 B 的一个谕示 (oracle ) 是一个能够报告莱个串 w 是否为 B 的成员


的外部装置 。一个谕示图灵机 ( oracle Turing machine ) 是一种修改过的图灵机 ,它有询
问 一 个 谕 示 的 额 外 能 力。 为 对 语 言 B 有谕示的谕示图灵机。
我们不关心谕示的内部工作机制 。使用 “谕示 ” 这个术语就意味着一种神奇的能力 ,
意味着将考虑不能由普通算法判定的语言的谕示 ,如下面例子所示 。
9D ATM 的一个谕示 。带 ATM 的谕示的一个谕示图灵机比普通的图灵机能
考虑
判定更多的语言 ,这样的图灵机能够判定 ATM 自身 (显然成立 ),它只要对输入询问它的
: ,即图灵机的空性质检查问题 ,用的是下面称为 T夂

谕示即可 。它也能判定 f TM M 的过程 :

^
7 TM ,其中 M 是一个图灵机 :
=“对于输人〈 〉
1. 构造下面图灵机 iV:
N =‘ 对任意输人 :

a. 对 S * 中的所有串并行运行 M。
b. 如果 M 接受它们中的任何一个串 ,则接受 。’
2. 询问谕示以确定 ( N ,0 ) GATM 是否成立 。
3. 如果谕示回答 ‘ 不 ’,则接受 ;如果回答 ‘ 是’ ,则拒绝 。” B

如果 M 的语言不空 ,则 N 将接受每个输入 ,特别地 ,将接受 0 。从而谕示将回答


“是”,且 将 拒 绝 。相 反 地 ,如 果 M 的 语 言 是 空 的 ,则 将 接 受 。 所 以 T M 判定
ETMO 我们说 ETM 是相对于 ATM 可判定的 (decidable relative )。这就给我们带来图灵可归
约性的定义 。
~

^^
> 1邇 漏 物 语 言 A 图灵可归约 ( Turing reducible ) 到 B,如果 A 相对于 B 是可判
定的 ,记作 A<TB。
例 6.17 证明 £TM 图灵可归约到 ATM 。图灵可归约性满足可归约性的直观概念 ,下面
定理证明之 。
A<TB 且 B 是可判定的 ,则 A 也是可判定的 。
如果
证 明 如 果 B 是可判定的 ,则可以用判定 B 的实际过程来替换 B 的谕示 。这样就用
判定 A 的普通图灵机取代了判定 A 的谕示图灵机 。 ■

图灵可归约性是映射可归约性的一个推广 。如果 A<mB , 因 为 此 映 射 归


约可以被用来给出一个相对于 B 判定 A 的谕示图灵机 。
带 ATM 的谕示的谕示图灵机十分强大 ,它能解许多不能由普通图灵机解决的问题。但
即使是这样一个强大的图灵机 ,也不能判定所有语言 (参见练习 6.4 )。

6.4 信息的定义
算法和信息是计算机科学中的基本概念 。但丘奇 图灵论题在给出算法的广泛而实用 -
的定义的时候 ,却没有关于信息的同等广泛的定义 。不同于单一而广泛的定义 ,使用的是
多个依据应用的定义 。 在本节中 ,用可计算性理论来给出一个定义信息的方法 。
以一个例子开始 。考虑下列两个二进制数序列的信息量 :
A = 0101010101010101010101010101010101010101
B = 1110010110100011101010000111010011010111
直观上 ,序列 A 包含较少的信息 ,因为它只是将 01 重复了 20 次 。相比之下 ,序列 B
166 第二部分可计算性理论

看起来包含了更多的信息 。
上例表明了将要介绍的信息定义背后的思想 。包含在一个对象中的信息量将被定义为
这个对象的最小表示或描述的大小。对象的描述是指这个对象的精确且无歧义的特征 ,使
得单从这个描述就能重新产生那个对象 。 这样 ,序列 A 包含了很少的信息 ,因为它有一个
很短的描述 ,然而 ,序列 B 看起来包含了更多的信息 ,因为它看起来没有简明的描述 。
在确定对象的信息量的时候 ,为什么只考虑最短的描述呢? 我们总是可以通过在描述
中放置对象的一个副本的方式来描述一个对象 ,比如一个串 。用此方法 ,能以含 B 的一个
副本的一个 40 位长的表来描述前面的串 B。 这种描述永远不会比对象本身短 ,也不会告
诉我们关于信息量的任何东西 。但是 ,一个真的较短的描述蕴涵着包含在对象中的信息可
以被压缩到更小 ,所以信息量也就不可能更大 。因而最短的描述的大小决定了信息量 。
为了将这个直观思想形式化 ,须做一些准备 。 首先 ,将注意力集中于这样的对象 ,它
们是由二进制数构成的串 ,其他对象可以表示为由二进制数构成的串 ,所以这个条件并没
有限制理论的范围 。 第二 ,我们只考虑这样的描述 ,它们是由二进制数构成的串。利用这
些要求 ,可以很容易地对比对象的长度与它描述的长度 。 下节将考虑所允许描述的类型 。

6.4 . 1 极小长度的描述
许多类型的描述语言可以用来定义信息 。选择使用什么样的语言影响着定义的特征 ,
我们的描述语言是基于算法的 。
用算法来描述串的方法之一是 :先构造一个图灵机 ,使得若它以空白带幵始运行 ,就
能打印岀这个串 ;然后将此图灵机本身也表示成一个串。这样 ,表示图灵机的串就是原来
那个串的一个描述 。 这个方法的缺点是 ,图灵机不能用它的转换函数简明地表示信息表 。
表示一个 n 位的串也许就要用到 n 个状态和要有〃行的转换函数表 ,这将导致一个相对我
们的目的来说过长的描述 。因此使用下列更简洁的描述语言 。
用图灵机 M 和它的二进制数的输人加来描述二进制数的串 X ,描述的长度是表示 M
和 w 的 组 合 长 度 。对 于 将 多 个 对 象 编 码 成 一 个 二 进 制 数 串 采 用 常 用 的 记 号 来 记
这个描述 。但这里必须格外注意编码操作 〈 , ,因为产生的结果必须是简明的 。方

w ) 为 ( M )w ,即直接将二进制数串 w 简单连接到 M 的二进制编码的
法是 :定义串 ( M ,
后面 。除了下一段中叙述的微妙之处外 ,M 的二进制编码 〈 M〉可以使用任何标准方法 。
( 在第一遍阅读中 ,不要担心这个微妙之处 。你可以暂且忽略下一段和图 6 3 。
) -
将 w 连接到 〈 M〉的后面来产生 i 的一个描述 ,如果〈 M〉结束和 w 开始的地方不
能从这个描述自身分辨出来的话 ,那么将可能会遇到麻烦 。 如果这样 ,就可能有多个对描
w 进行划分的方法 ,这些方法都会产生语法上正确的图灵机和一个输入 ,从而这
述〈M〉
个描述将是含糊的 ,因此也是无效的 。用来避免这个问题的方法是 :保证在 〈 M〉w 中能
确定 ( M ) 和加的分界位置 。做到这点的一种方法是 :将 〈M〉的每一位写两遍 ,即将 0
写成 00 , 将 1 写成 11 ,再在其后写下 01 来标记分界位置 。 图 6 3 说明了这个思想 ,此图 -
描绘了某个串 x 的描述 ( M ,w ) Q

分界符

〈M,
w〉= 11001111001100…1100 01101011 -- 010
( M)
图 6- 3 串:
T 的描述 〈 iVf , 的格式示例
襄夕章可计算性理论的高级专题 167

既然已定下了描述语言 ,下面就要定义一个测量串的信息量的度量 。
设 是 二 进 制 数 的 串 ,x 的 最 小 描 述 ( minimal description ) ( 记 为
cl( x )) 是 最 短 的 串 〈 M,
w〉,其中 : 图灵机 M 在 输 入 w 上 停 机 时 ,x 在 带 子 上 。 如 果 有
多 个 这 样 的 串 存 在 ,则 在 其 中 选 择 字 典 序 下 的 第 一 个 串 。工 的 描 述 复 杂 性 ( descriptive
complexity ) 己 为 K(:r ),是
K( x ) =
|d ( x )|
换句话说 , K U ) 是:r 的最小描述的长度 。 K U ) 的定义是为了刻画串 x 中的信息量
这个直观概念的 。 接下来 ,建立关于描述复杂性的一些简单结果 。

^^
001 彐 c V 工 [ K(:rX||
工 + c]。

这个定理称 ,一个串的描述复杂性最多比它的长度多一个固定的常量 ,这个常量是通


用的 ,即不依赖于这个串。
证明为证明此定理给出的 K( x ) 的上界 ,只需给出一个不长于这个上界的 x 的描
述 。i 的最小描述可能比这个描述更短 ,但不会更长 。
考虑串 :
T 的下列描述 。设 M 是这样一个图灵机 :它一启动就停机 。 此图灵机计算恒

等函数—输出与输入是一样的函数 。:
T 的一个描述是 <M )X 0 令 C 是 〈 M〉 的长度 ,就
可完成证明 。 ■

定理 6.21 说明了怎么使用图灵机的输人来表示这样的信息 :在存储而不是使用此图


灵机的转换函数时 ,此信息要求一个真正大的描述 。它与我们的直觉是一致的 ,即一个串
包含的信息量不可能 (实质性地) 多于它的长度 。类似地 ,直觉也告诉我们 ,串 xx 包含
的信息不会真的多于 I 所包含的信息 。下面的定理验证了这个事实 。
3 cM x [K( xx ) K( x )+ c]o

^
证 明 考 虑 下 列 图 灵 机 M,它要形如 ( N ,
它的一个输人 。
w ) 的输入 ,其中 iV 是一个图灵机 ,加是

“对于输人 ( N ,v u ) ,其中 iV 是一个图灵机 ,w 是一个串 :


1. 在 w 上运行 N 直到停止 ,且产生输出串 s。
2. 输出串 SSo
的一个描述是 〈 MW( x )。回忆一下 ,d ( x ) 是:r 的最小描述 ,这个描述的长度是
I < M ) \ + \ d U ) \ , 即 为 c+ K( x ),其中 c 是〈M〉的长度。 ■

下面检查串 :
r和 的连接的描述复杂性与它们的单个复杂性间的关系。定理 6.21

^
可能会使我们相信 ,连接的复杂性最多是单个复杂性的和 (加上一个固定的常量 ),但实
际上组合两个描述的代价是导致了一个更大的上界 ,如下面的定理所述 。
3cV (:r) + K())+ c]。

^
证 明 构 造 图 灵 机 M,它将输入 w 拆成两个单独的描述 。在第二个描述 ( 30 岀现以
前 ,第一个描述 d(:r ) 的所有位都被写两遍且以 01 结束 ,如图 6 3 所示 。在得到两个描 -
述之后 ,它们就开始运行 ,得到串 :
r与 及产生
显然 ,13;的这个描述的长度是:r 的复杂性的两倍加上
固定常量 c 。此和为 ^ ^
的复杂性 ,再加上描述 M 的

描述复杂性有时也称柯尔莫哥洛夫 ( Kolmogorov )
- -
复 杂 性 或 柯 尔 莫 哥 洛 夫 伽 廷 ( Kolmogorov Chaitin) 复 杂 性 。
_
168 第二部分可计算性理论

2 K ( x ) 十 K( y ) + c
这就完成了证明 。 ■

可以用一个更有效的方法来指出两个描述之间的分离之处 ,从而可以稍微改进这个定
理 。这 是 一 个 避 免 双 写 的 数 位 的 方 法 。用 二 进 制 整 数 表 示 J U ) 的 长 度 ,但 它 已 被
双写 ,使得它不同于 d(: r )。 这个描述仍然包含足够的信息来对之进行解码 ,从而得到 : r
和 3 的描述 。现在 ,它的长度最多为

^ 21og 2 ( K ⑴ )+ K(:C ) + K ( 3 ) + C
还可以做一些不大的改进 。但如问题 6.19 所指出的 ,不能达到界 K U )+ K( 30 + C。

6 . 4.2 定义的优化
下面 ,在描述复杂性的初等性质的基础上发挥某些直觉 ,来讨论此定义的一些特点。
在用算法来定义描述复杂性的所有可能的方法中 ,刚才关于 K(:c) 的定义具有一个优化性
质。假如将一般的描述语言 ( description language ) 看作一个可计算函数 / ,并定义
相对于{ 的最小描述为满足 P( s )=:r 的 标 准 字 符 串 顺 序 中 的 第 一 个 串 记 为 A U )。因
此 ,s 是 :
r 最短描述按字典序排列的第一个 。定义
例如 ,将一个程序设计语言 ( 比如 Python ( 编码成二进制数 )) 看作描述语言 ,则
Python( X ) 将是输出 :
T 的最小 Python 程序 ,KPython ( x ) 将是这个极小程序的长度 。
^ 下面的定理说明 ,任何此种类型的描述语言都不会明显地比原先定义的图灵机和输入
语言更简洁 。
讎置纖 对 任 何 描 述 语 言{,存 在 一 个 只 与 p 有 关 的 常 量 C ,使 得

^ ^]
VxCKCxXKpCx) -

证明思路用 Python 例子来说明证明思路。假设 r 有一个短的 Python 描述比。令 M:


是一个能解释 Python 的图灵机 ,且以 x 的 Python 程序 w 作为输入。则 < M,xc; > 是x的
一个描述 ,且它比:r 的 Python 描述只大一个固定的量 。多出的长度是 Python 解释器 M。
证明对于输入语言考虑下列图灵机
M=“对于输入
1 输 出 p( w ) ” 0

则 ⑽d p U ) 是 : r 的一个描述 ,它的长度至多比 K p (:r ) 大 一 个 固 定 常 量 ,此 常 量 为


< M> 的 长 度 。 ■

6 . 4. 3 不可压缩的串和随机性
定 理 6.21 证明了串的最小描述绝不会比串本身长太多 。 对于某些信息稀疏的串 ,它
们的描述可能要短得多 。 是不是某些串没有更短的描述呢? 换句话说 ,是不是某些串的最
小描述实际上和串本身一样长呢?下面将证明这样的串是存在的 。对于这些串 ,简单地将
它们写出来就是最简洁的描述 。
设 x 是 一 个 串 ,如 果

^
K( x ) |x| c
则称:
r 是 c 可压缩的 (^ compressible ) 。如 果 工 不 是 c 可 压 缩 的 ,则称是不可压缩 c 的
( incompressible by c ) 。 如 果 :
c 是 不 可 压 缩 1 的 ,则称是不可压缩的 (incompressible )。
系夕章可计算性理论的高级专题 169

换 言 之 ,如 果 x 有 一 个 比 它 的 长 度 短 c 位 的 描 述 ,则:r 是 c 可 压 缩 的 。否 则 ,x 是 不
可 压 缩 c 的 。最 后 ,如 果:T 没 有 比 它 本 身 更 短 的 描 述 ,则:T 是 不 可 压 缩 的 。先 来 证 明 不 可
压 缩 的 串 是 存 在 的 ,然 后 再 讨 论 它 们 的 一 些 有 意 思 的 性 质。特 别 地 ,将 证 明 不 可 压 缩 的 串

_
看 起 来 就 像 是 随 机 拋 硬 币 得 到 的 串。
*

^
|通繼 对 于 每 个 长 度 ,都 存 在 不 可 压 缩 的 串 。
证 明 思 路 长 度 为〃的 串 的 个 数 比 长 度 小 于《 的 描 述 的 个 数 要 大 。 每 个 描 述 最 多 描 述
一 个 串。所 以 某 个 长 度 为〃的 串 不 能 由 任 何 长 度 小 于〃的 描 述 来 描 述 。 这 个 串 就 是 不 可 压
缩 的。
证 明 长 度 为〃的 二 进 制 数 串 的 个 数 是 2 % 每 个 描 述 都 是 一 个 非 空 的 二 进 制 数 串 ,故
长 度 小 于〃的 描 述 的 个 数 最 多 为 长 度 小 于 等 于〃一 1 的 串 的 个 数 之 和 ,即 :

E 21 = 1 + 2 + 4 + 8 H h- 2 1
= 2”一 1
^
所 以 较 短 描 述 的 个 数 小 于 长 度 为〃的 串 的 个 数 。因 此 ,至 少 有 一 个 长 度 为〃的 串 是 不 可 压
缩 的。
至 少 有 2 W — 2” - + 1 个 长 度 为 7? 的 串 是 不 可 压 缩 C 的 。
证 明 在 定 理 6.2 6 证 明 基 础 上 扩 展 ,每 个 C 可 压 缩 串 的 描 述 的 长 度 至 多 为 。这
样 ,最 多 有 — 1 个 描 述 会 出 现 。因 此 ,长 度 为 n 的 2”个 串 中 最 多 有 2” 一1 个串
有 这 样 的 描 述 。剩 下 的 至 少 2 — (2”- 一 1) 个 串 都 是 不 可 压 缩 c 的。
不 可 压 缩 的 串 有 许 多 性 质,这 些 性 质 都 是 我 们 希 望 随 机 选 择 串 所 具 有 的 。例 如 ,可 以
证 明 :长 度 为《 的 不 可 压 缩 串 大 致 含 有 相 同 个 数 的 0 和 1。 长 度 为 /2 的串可能含有连续为
0 的 子 串 ,这 种 子 串 的 最 大 长 度 大 致 为 log2 n ,这 些 正 如 我 们 希 望 在 随 机 串 中 发 现 的 那 样 。
证 明 这 样 的 命 题 将 把 我 们 带 到 远 离 主 题 的 组 合 数 学 和 概 率 论 ,但 下 面 将 证 明 的 定 理 构 成 这
些 命 题 的 基 础。
这 个 定 理 表 明 ,对 于 任 何 可 计 算 性 质,如 果 它 对 “几 乎 所 有” 的 串 都 成 立 ,则 对 所 有
足 够 长 的 不 可 压 缩 串 也 成 立 。 如 0 . 2 节 提 到 的 那 样 ,关 于 串 的 一 个 性 质 就 是 一 个 简 单 函 数
/,它 将 串 映 射 到 { TRUE , FALSE }。 如 果 长 度 为 n 、值 为 FALSE 的 串 所 占 的 部 分 在 rz
增 大 时 趋 向 于 0 , 就 说 一 个 性 质 对 几 乎 所 有 串 成 立 。一 个 计 算 性 质 如 果 对 几 乎 所 有 的 串 都
成 立 ,则 对 随 机 选 择 的 长 串 也 可 能 成 立 。因 此 随 机 串 和 不 可 压 缩 串 都 有 这 样 的 性 质。
设 / 是 一 个 对 几 乎 所 有 串 成 立 的 性 质 ,则 对 任 意 6>0 ,性 质 / 只 在 有 限
多 个 不 可 压 缩 6 的 串 上 的 值 是 FALSE。
证 明 设 M 是下列算法:
“对 于 输 入 〖,其 中 i 是 一 个 二 进 制 整 数 :
1. 在 标 准 字 符 串 顺 序 下 ,找 到 使 得 /G )= FALSE 的 第 / 个 串 5 。
2. 输 出 串 5。”
可 以 用 M 来 得 到 不 具 有 性 质 / 的 串 的 更 短 描 述 ,方 法 如 下 :设:r 是 这 样 的 串 ,将 所
有 不 具 有 性 质 / 的 串 排 成 一 个 序 列 ,序 列 是 按 字 符 串 顺 序 排 序 (即 ,按 长 度 排 列 ,对 同 一
长 度 的 按 字 典 序 排 列 )。令 G 是 x 在 这 个 序 列 中 的 位 置 或 序 标 ( index )。则 〈 M,
G 〉是 /
的 一 个 描 述 。这 个 描 述 的 长 度 为 UJ + G 其 中 c 是 〈M〉的 长 度 。因 为 没 有 性 质 / 的 串 较
少 ,故:r 的 序 标 是 小 的 ,它 的 相 应 描 述 也 是 短 的 。
任 取 数 6>0 。选 择 使 得 :在 所 有 长 度 小 于 或 等 于〃的 串 中 ,至 多 有 1/ 26夂+ 1 不 具
170 第二部分可计算性理论

有 性 质 /。 所 有 足 够 大 的〃都 满 足 这 个 条 件 ,因 为 / 对 几 乎 所 有 的 串 成 立 。令 x 是 长 度 为
的 没 有 性 质 / 的 串 ,长 度 小 于 等 于〃的 串 有 2 M+1 一 1 个 ,因 此 ,

^ 2 M+1 — 1
2 ^+ c + i <
2n— b —c

( n — b — c ) + c= n — b Q
从而 1 1 <”一 6 — C ,故 ( M ,i x )

^
: 的长度至多为 这意味着
—b

^
K( X ) /2

这 样 ,使 得 不 具 有 性 质 / 的 每 个 足 够 长 的 i 都 是 可 压 缩 6 的 。因 此 ,只 有 有 限 多 个 不 具 有
性 质 / 的 串 是 不 可 压 缩 6 的 。证 毕 。 ■

现 在 是 展 示 一 些 不 可 压 缩 串 的 适 当 时 候 了。但 如 问 题 6.16 所 要 求 证 明 的 那 样 ,复 杂
性 测 度 K 是 不 可 计 算 的 。 而 且 ,根 据 问 题 6.17 , 没 有 算 法 能 够 一 般 性 判 定 串 是 不 是 不 可
压 缩 的 。确 实 ,根 据 问 题 6.1 8 , 它 们 没 有 无 限 子 集 是 图 灵 可 识 别 的 ,所 以 没 有 办 法 得 到 长
的 不 可 压 缩 串 ,即 使 有 ,也 没 有 办 法 来 检 查 这 个 串 是 不 是 不 可 压 缩 的 。下 面 的 定 理 描 述 了
一 些 几 乎 是 不 可 压 缩 的 串 ,但 它 也 没 有 提 供 明 确 的 展 示 方 法 。
存 在 常 量 幻 使 得 对 每 个 串 工 ,x 的 最 小 描 述 d(:r ) 都 是 不 可 压 缩 6 的 。
证 明 考 虑 下 列 图 灵 机 M:
M=“对 于 输 人〈1? ,y 〉 ,其 中 尺 是 一 个 图 灵 机 ,J 是 一 个 串 :
1. 在 y 上 运 行 尺 ,且 在 它 的 输 出 不 具 有 形 式〈S, z > 时 ,拒 绝 。
2. 在 z 上 运 行 S ,且 将 它 的 输 出 放 在 带 子 上 后 停 机 。”
令 6 为| 〈 M|> +1 ,证 明 6 满 足 本 定 理 。 如 不 然 ,则 对 某 个 串 x ,d ( x ) 是 6 可 压 缩
的 。从 而

^
|d ( d ( x )|
) |d ( x |
) b
但 ( M )d ( d U ) ) 是:r 的 一 个 描 述 ,它 的 长 度 至 多 为
|M | < > + | i W (:r ) ) | < ( 6 — 1 ) + ( \ d ( x |
(

:T 的 这 个 描 述 比 d(:T ) 更 短 。这 与 后 者 的 最 小 性 矛 盾 。
) ~
b)= \ d( x ) \
—1
练习
6.1 用 一 个 实 际 的 程 序 设 计 语 言 ( 或 它 的 一 个 合 理 的 近 似 ) 写 一 个 本 质 上 反 映 递 归 定 理 的 例 子 ,它
将其自身打印岀来。
6.2 证 明 :MJNTM 的 任 何 无 限 子 集 都 不 是 图 灵 可 识 别 的 。
A 6.3 证 明 : 如 果 A<TB 且 B<TC,则 八<丁( 。 :

^
6.4 设 ATM'= { ! M 是 一 个 谕 7K 图 灵 机, 接 受 串 w}。证 明 :A M 相对 ATM 是 不 可 判 定 的 。
A 6.5 命 题 B i V y O+ j y s j y] 是 否 为 Th( N , rV :
+ ) 的 成 员? 为 什 么? 3: y[x +:
y =:
r] 呢?

问题
6.6 l ,令 Zm ={ 0 ,
对 每 个 m〉 l,2 ,… ,
m — 1},且 令 + ,X ) 是 如 下 模 型 :它 的 论 域 是 Z m ,
=( Zm ,
它有对应于模 m 计算的 + 和 X 关 系 。证 明 :对 每 个 m ,理 论 Th(7m ) 是 可 判 定 的。
6.7 证 明 :对 于 任 意 两 个 语 言 A 和 B ,存 在 语 言 J 使 得 A<T / 且 八
6.8 证 明 :对 任 意 语 言 A ,存 在 语 言 B ,使 得 且 B $TA 。
*
6.9 证 明 :存 在 两 个 语 言 A 和 B 是 图 灵 不 可 比 的 ,即 使 得 且 B <TA。
*
6.10 设 A 和 B 是 两 个 不 交 的 语 言。如 果 AGC 且 BGC,则 称 语 言 C 分 离 A 和 B 。描 述 两 个 不 交 的 图
灵 可 识 别 语 言 ,使 得 它 们 不 可 由 任 何 的 可 判 定 语 言 分 离 。
第6章可计算性理论的高级专题 171

6.1 1 证 明 EQTM 可 由 一 个 带 ATM 的 谕 的 图 灵 机 识 别 。


6.12 在 推 论 4.1 5 中 ,我 们 证 明 了 所 有 语 言 构 成 的 集 合 是 不 可 数 的 。 利 用 这 个 结 果 证 明 :存 在 不 可 由
带 ATM 的 谕 示 的 谕 示 图 灵 机 来 识 别 的 语 言 。
6.1 3 回 忆 一 下 5 . 2 节 定 义 的 波 斯 特 对 应 问 题 及 其 相 关 的 语 言 PCP。证 明 PCP 相 对 于 ATM 是可判
定的。
6.1 4 说 明 怎 么 使 用 ATM 的 谕 示 来 计 算 串 的 描 述 复 杂 性 KU )。
6.1 5 使 用 问 题 6 .1 4 的 结 论 来 给 岀 一 个 相 对 于 ATM 的 谕 示 是 可 计 算 的 函 数 /,使 得 对 每 一 个〃, f i n )
是 一 个 长 度 为《 的 不 可 压 缩 串 。
6.1 6 证 明 函 数 K(:r ) 不 是 可 计 算 函 数 。
6.1 7 证 明 不 可 压 缩 串 的 集 合 是 不 可 判 定 的。
6.18 证 明 不 可 压 缩 串 的 集 合 不 包 含 无 限 的 图 灵 可 识 别 子 集。
6.1 9 证 明 : 对 任 意 c ,存 在 串:
和 :y ,使 得 K(:r y )>K (:r ) : : + K(:
y )+ c。
6.20 设 S = { < M>|M 是 一 个 图 灵 机 并 且 L( M)= {〈 M〉}}。 证明 S 和 S 都 不 是 图 灵 可 识 别 的 。
6.21 设 尺 是 一 个 々 元 关 系 。如 果 可 以 给 出 一 个 带 々 个 自 由 变 元: ,
…,A 的公式 0 使得对所有
a\ • ,ak G N , /> ( a \ ,• ••
(

( definable )。证 明 下 述 每 个 关 系 在
A a. 尺
0 ={0}
-
Ok ) 只 在 a\
+ ) 中 是 可 定 义 的。
Th( N , ^
,… , 6 尺 时 为 真 ,则 称 尺 在 丁11( 1\ ,+ ) 中是可定义的

b. 尺 i = { 1 }
Ac. R = = { ( a , a ) | a G N }
d.i?< ={ U , ) a,
6| 6 eN 并且 a<b )
6.2 2 描 述 两 个 不 同 的 图 灵 机 M 和 iV , 使 得 以 任 意 输 人 开 始 时 ,M 输 出 ( N ),且 iV 输 岀 〈 M〉

.

^
6 23 在 递 归 定 理 的 不 动 点 形 式 (定 理 6 . 6 ) 中 ,令 变 换 〖 是 互 换 图 灵 机 描 述 中 的 状 态 和
到 的 函 数 。 给 出 f 的 不 动 点 的 一 个 例 子。
accept
^ reject

.
*
6 24
A 6.25
证 明 :EQTM
^ mEQ TM o

用 递 归 定 理 给 出 问 题 5.1 6 中 赖 斯 定 理 的 另 一 种 证 明 。
A 6.26 给出下列句子的一个模型:
必eq = V ( X ,X )]

.^
A ix V x ,y \ R \ 9

A V x y z iRi ( x ,y ) A R \ ( y z )) - R \ ( x ,z )]
^^^

6.2 7 设 釦 如 问 题 6.26 所 定 义 ,给 出 下 列 句 子 的 一 个 模 型 : ^
知 = eq

A oc , y\_R\ { x , y ) 1 i~
2(
^ )]

^^
?


A V ( , ) - ( R z ( x , y ) ㊉ 尺 2 (:
y,工))]
' R\ x y

A V x ,3;, 2:[ ( i?2 A 尺2 (: y, z) ) 尺2( 工, ?)]


_
A V I 彐:y[ R 2 ( 工 ,)]

A6.28
<) 是 有 论 域 N 和 “小 于” 关 系 的 模 型 ,证 明 Th( N ,
设 (N, <) 是 可 判 定 的 。 ^
习题选解
6.3 设 Mf 判定 A, 判 定 B。用 谕 示 图 灵 机 M3 , 使 得 判 定 A 。机 器 模 拟 ,每 次 Mi 向
它 的 谕 示 查 询 串 1,机 器 iVf 3 检 验 是 否: res 并 将 结 果 提 供 给 Mlc > 因 为 M3 没 有 B 的 谕 示 且 不 能
直 接 执 行 检 验 ,因 此 它 在 输 入 I 上 模 拟 M2 以 获 得 那 些 信 息 。因 为 机 器 M3 * M2 使 用 相 同 的 谕
示 C,因 此 M3 能 获 得 直 接 查 询 的 结 果 。
172 第二部分可计算性理论

6.5 命 题 3: :> +:
rV y [ y =:
y] 是 Th( N ,+ ) 的成员 ,因为在论域 N 上关于 “+ ” 的标准解释下 ,这个命

题是真的 。回忆我们在本章中令 N = { 0 ,
1,2 ,… ,故可取 :
r = 0。 3 x \/ y l x J r y = x ] 不是 Th
'


+
( N , ) 的成员 ,因为命题对这个模型不再是真的 。 比如 ,z 取论域中的任意值 ,y = l , 都 会 引

起 x \ y = x 为假 。
~ ~

_。

6.21 + ) 中是可定义的 ,因 为 和(:
a.尺 在 Th( N, :
r + y = y]。
r )= V y[: ::
+
c. R = 在 Th( N , ) 中是可定义的 ,因 为 參 = ( M ,
T )= V i[和
; I ]。
(x ) :c 十 M = ;
.
6 25 用反证法 。 假设有图灵机 X 判定性质 P ,P 满足赖斯定理的条件 。 这些条件中有一条如下 :存在
图灵机 A 和 B ,满 足 < A〉6 P 且 < B ) 乐 P 。用 A 和 B 构造图灵机尺 :
尺 =“在输入加上 :

1. 使用递归定理获得自己的描述 〈尺 > 。
2 在 〈尺〉上运行 X。
.
3 如果 X 接受 < R ),在 w 上模拟 B 。如果 X 拒绝 ( R ), 在 w 上模拟 A 。

如果 〈尺〉6 P ,那么 X 接受 〈只〉且 1 0 0 = 1X 5)。但是 < B )乐 P , 与〈尺〉 矛 盾 ,因 为 P
^
和图灵机有相同的语言。如果 0 0 乐 P ,我们得到一个类似的矛盾 。因此 ,我们的初始假设是错
误的 ,每个满足赖斯定理的条件的性质是不可判定的 。
.
6 26 命 题 卜q 用等号关系给出三个条件 。模型 ( A ,R O 是 的一个模型 ,其中 A 是任何域 ,凡 是 A
上的等价关系 。例如 ,A 是整数域 z ,R Ui o u“
} 就是一个模型 。ez
6.28 把 Th( N, +
<) 归约到 Th( N , ), 这我们已经证明是可判定的

^ ^。证明如何把 (N ,
+ ) 的语言上的句子扣 ,当它们在各自的模型中同时保持真或假 。 对和中 /<
句 子 和 转 换 成 (N ,
)的每个出现 ,用扣中的公式 3 々[ G +々= j)

<) 的语言上的

代替 ,这里的々每次都是不同的变量 。
” 意味着我们对 ;
句 子 和 与 句 子 h 是相等的 ,因为 “ t 小于) 。判
增加一个非 0 值就能得到 )
+ ) 的算法需要把扣写成前束范式 ,需要一点点额外工作。新的存在量词带到了句子的
定 Th( N ,
前面 ,为此 ,这些量词必须穿过句子中出现的布尔运算 。量词穿过 A 和 V 时不改变 ,而穿过 I时
3 变为 V ,V 变 为 3 。这 样 - ,
- -
^
变 成 等 价 的 表 达 式 VA 变 成
第三部分
Introduction to the Theory of Computation , 3e

复杂性理论
第 7 章|
Introduction to the Theory of Computation , 3 e

时间复杂性

如 果 求 解 一 个 问 题 需 要 过 量 的 计 算 资 源 ( 时 间 或 存 储 量 ),那 么 即 使 它 在 理 论 上 是 可
判 定 的 ,实 际 上 它 仍 然 可 能 是 不 可 解 的 。本 书 的 最 后 这 一 部 分 介 绍 计 算 复 杂 性 理 论
门 研 究 求 解 计 算 问 题 所 需 要 的 时 间 、 存 储 量 或 者 其 他 资 源 的 理 论 。先 从 时 间 开 始 。
本 章 旨 在 介 绍 时 间 复 杂 性 理 论 的 基 础 知 识 。首 先 要 介 绍 一 种 度 量 求 解 问 题 时 所 需 时 间
的 方 法 ,然 后 介 绍 怎 样 根 据 所 需 要 的 时 间 来 给 问 题 分 类 ,最 后 讨 论 某 些 可 判 定 问 题 需 要 耗
费 极 大 量 时 间 的 情 况 ,以 及 当 遇 到 这 样 的 问 题 时 该 怎 样 识 别 它 们 。

7. 1 度量复杂性
考 察 下 列 例 子 。 语 言 A = { 0q

>0 }。显 然 A

^
是 一 个 可 判 定 的 语 言。 单 带 图 灵 机 需
要 多 少 时 间 来 判 定 A 呢? 考 察 下 面 判 定 A 的 单 带 图 灵 机 。我 们 给 出 该 图 灵 机 的 低 级 描
述 ,包 括 读 写 头 在 带 子 上 的 实 际 运 动 ,从 而 可 以 计 算 运 行 时 所 经 过 的 步 数 。

^
iV =“对 输 入 串
1. 扫 描 带 子 ,如 果 在 1 的 右 边 发 现 0 , 就拒绝 。
2. 如 果 带 子 上 既 有 0 也 有 1 ,就 重 复 下 一 步 。
3. 扫 描 带 子 ,删 除 一 个 0 和 一 个 1。
4. 如 果 所 有 1 都 被 删 除 以 后 还 有 0 , 或 者 所 有 0 都 被 删 除 以 后 还 有 1 ,就拒绝 。
否 则 ,如 果 在 带 子 上 既 没 有 剩 下 0 也 没 有 剩 下 1 ,就接受 。

^
我 们 将 分 析 判 定 A 的 图 灵 机 ]1 的 算 法 所 需 的 时 间 。 对 此 ,首 先 介 绍 一 些 术 语 和
记 法。
在 一 个 特 定 的 输 入 上 ,算 法 所 使 用 的 步 数 可 能 与 若 干 参 数 有 关 。 例 如 , 如 果 输 入 是 一
个 图 ,则 步 数 可 能 依 赖 于 图 的 结 点 数 、 边 数 和 最 大 度 数 ,或 者 这 些 因 素 的 组 合 ,或 者 它 们
与 其 他 因 素 的 某 种 组 合 。 为 了 简 单 起 见 ,把 算 法 的 运 行 时 间 纯 粹 作 为 表 示 输 入 字 符 串 的 长
度 的 函 数 来 计 算 ,而 不 考 虑 其 他 参 数 。在 最 坏 情 况 分 析 ( worst-case analysis ) 中 ,即 这 里
考 察 的 形 式 ,考 虑 在 某 特 定 长 度 的 所 有 输 人 上 的 最 长 运 行 时 间 。 在 平 均 情 况 分 析 ( aver -
age-case analysis ) 中 ,考 虑 在 某 特 定 长 度 的 所 有 输 人 上 的 运 行 时 间 的 平 均 值 。

( running

整 数 集 合 , f U ) 是 M 在 所 有 长 度 为 n 的 输 入 上 运 行 时 所 经 过 的 最 大 步 数 。 若 /U ) 是
M 的 运 行 时 间 ,则 称 iVf 在 时 间 /U ) 内 运 行 ,M 是 /U ) 时 间 图 灵 机 。 通 常 使 用 rz 表 示
输 入 的 长 度。

令 M 是 一 个 在 所 有 输 入 上 都 停 机 的 确 定 型 图 灵 机。M 的 运 行 时 间
time ) 或 者 时 间 复 杂 度 ( time complexity ) 是 一 个 函 数 /:N N , 其 中 N 是 非 负

7. 1 . 1 大 0 和小 o 记法

因 为 算 法 的 精 确 运 行 时 间 通 常 是 一 个 复 杂 的 表 达 式 ,所 以 一 般 只 是 估 计 它 的 趋 势 和 级
别。通 过 一 种 被 称 为 渐 近 分 析 ( asymptotic analysis ) 的 方 便 的 估 计 形 式 ,可 以 试 图 了 解
第 7章 时 间 复 杂 性 175

算法在长输人上的运行时间 。 为此 ,只考虑算法运行时间的表达式的最高次项 ,而忽略该


项的系数和其他低次项 ,因为在长输入上 ,最高次项的影响相比其他项占据主导地位 。
例如 ,函数 /( n )= 6 n 3 + 2 r22 + 20 /2 + 45 有四项 ,最高次项是 6 V 。 忽略系数 6 ,称 /
渐近地不大于 n 3 。 表达这种关系的渐近记法 ( asymptotic notation ) 或 大 0 记 法 ( big -
O notation ) 是 /U )= 0( n 3 )。在下面的定义中 ,把这一概念形式化 。 令是大于 0 的实


数集 。
设 / 和 g 是 两 个 函 数 / ,g : N R+ 0 称 f ( n ) = 0 ( g ( n )) , 若 存 在 正 整 数
:
( 和 72 。,使 得 对 所 有 有
当 /( n )= 0( g( w )) 时 , 称 g( n ) 是 f ( n ) 的上界 ( upper
f(n)
^ c g( n )
bound ) , 或 更 准 确 地 说 ,
g ( n ) 是 /( n ) 的渐近上界 ( asymptotic upper bound ) , 以 强 调 没 有 考 虑 常 数 因 子 。
直观地讲 ,f ( n ) = 0 ( g ( n ) ) 意味着如果忽略一个常数因子的差别 ,那么 / 将小于或

_
者等于 g 。 可以把 0 看作代表一个隐藏的常数 。 在实践中 ,大部分可能碰到的函数 / 都有
一个明显的最高次项 A 。在这种情况下 ,写成 /(〃)= 0( g(〃)),这里 g 是不带系数的 A 。
设 /iU ) 是 函 数 5 V + 2 V + 2277 + 6 。 保留最高次项 5 V ,并且舍去它的系
数 5 , 得 到 /JrO OU 3 )。
^
验证一下这个结果是否满足上面的形式定义 。为此令 c 等于 6 , 等 于 10, 则 对 于 所

”>10 ,有 5 w3 + 2 + 22 T? + 6
??
2
^ 6 ?? 3
0

此外 ,有 /1( /0 = 0( 4
,因为 V 比 V 大 ,所 以 它 也 是 的 一 个 渐 近 上 界 。
)
但是 ,A ( n ) 不等于 0( n 2 )。不论给 c 和 n 赋什么值 ,始终不能满足定义的要求 。 。
大 o 记法以一种特别的方式与对数相互影响 。 通常写对数时必须指明基数
( 或称为对数的底 ),如:r = l 0 g2这里基数 2 表明该等式等价于等式 P logw 的值随
着基数 6 的改变而乘以相应的常数倍 ,因为有恒等式 logw = log2 2 / logj。所以 , 写 f ( n )=

O d o g n ) 时不必再指明基数 ,因为最终要忽略常数因子 。
令 /2 ( n ) 是函数 3 nlog 2 W + 5 nlog2 log2 + 2。此时有 /2
W ( n ) = 0 ( n\o g n ) , 因为 log 比
"
log logn 更占支配地位 D

大 0 记法也可以出现在算术表达式中 ,如表达式 /(〃)= OU 2 ) + OU )。此时符号 O


的每一次出现都代表一个不同的隐蔽的常数 。 因为 OU ) 相比 0(〃) 更占支配地位 ,所 2

以该表达式等价于 / U )= OU 2 )。 当符号 O 出现在如表达式 / U )= 2 G⑹ 中的指数上时 ,


含义也一样 。该表达式代表 F 的一个上界 ,其中 c 是某个常数 。
在某些分析中会出现表达式 /( 二沙 。由恒等式 72 = 21 得 Y = 2 2 ”,可以看 …… ~
… ^
(

出 代 表 # 的 一 个 上 界 ,其 中 c 是 常 数 。 表 达 式 以 另 一 种 方 式 代 表 了 同 样 的 界 ,
因为表达式 0( 1 ) 代表不超过某个固定常数的值 。

我们经常导岀形如 # 的界 ,其中 c 是大于 0 的常数 。 这种界称为多项式界 ( polynomi


<J
-
al bound )。 形如 2U )
的界当 5 是大于 0 的实数时 ,称为指数界 (exponential bound )。
与大 O 记法相伴的有小 o 记法 (small-o notation )。大 O 记 法 指 一 个 函 数 渐 近 地 不 大
于另一个函数 。 要说一个函数渐近地小于另一个函数 ,则用小 o 记法 。大 0 与小 o 记法的
区别类似于<与<之间的区别 。
0 0® 设 / 和 g 是 两 个 函 数 /, R + 。如 果
176 第三部分复杂性理论

f ( n)
lim (W)
=0
n-*- oo
^
则称 / U ) = o ( g ( r? ) ) 。换 言 之 , f U ) = o { g { n ) ) 意 味 着 对 于 任 何 实 数 c > 0 ,存 在 一 个 数
no , 使得对所有 /( n X c Cw )
^ o

dBO 容 易 验 证 下 面 的 等 式。
1. ^ / n = o ( n )
2. w = o ( rzlog ( log n ) )
3. nlogClog n ) = o ( n\og n )
4. wlog n= o ( n 2 )
5. n 2 = o ( n3 )
但 是 , f U ) 不 会 等 于 0( /( 72 ))。 ■

7 . 1 .2 分析算法
本 小 节 分 析 语 言 八 = { 0 4叫 >0 } 对 应 的 图 灵 机 算 法 。为 了 便 于 阅 读 ,这 里 重 述 一 遍
此 算 法。
Mi =“对 输 入 串 w: ^
1. 扫 描 带 子 ,如 果 在 1 的 右 边 发 现 0 , 就 拒 绝 。
2. 如 果 带 子 上 既 有 0 也 有 1 ,就 重 复 下 一 步 。
3. 扫 描 带 子 ,删 除 一 个 0 和 一 个 1。
4. 如 果 删 除 所 有 1 后 还 有 0 , 或 者 所 有 0 都 被 删 除 以 后 还 有 1 ,就 拒 绝 。否 则 ,
如 果 在 带 子 上 既 没 有 剩 下 0 也 没 有 剩 下 1 ,就 接 受 。

为了分析 ,把 它 的 四 个 步 骤 分 开 来 考 虑 。步 骤 1 中 ,机 器 扫 描 带 子 以 验 证 输 入 的
形 式 是 0 * 1 * 。执 行 这 次 扫 描 需 要〃步 。如 前 面 约 定 的 ,通 常 用 n 表 示 输 入 的 长 度 。将 读
写 头 重 新 放 置 在 带 子 的 左 端 另 外 需 要〃步 。所 以 这 一 步 骤 总 共 需 要 2 n 步 。 用 大 O 记 法 ,
称 这 一 阶 段 需 要 O( n ) 步 。注 意 ,在 机 器 描 述 中 没 有 提 及 重 新 放 置 读 写 头 的 操 作 。渐 近 记
法 允 许 在 机 器 描 述 中 忽 略 那 些 对 运 行 时 间 的 影 响 不 超 过 常 数 倍 的 操 作 细 节。
在 步 骤 2 和 3 中 ,机 器 反 复 扫 描 带 子 ,在 每 一 次 扫 描 中 删 除 一 个 0 和 一 个 1。 每 一 次
扫 描 需 要 OU ) 步 。因 为 每 一 次 扫 描 删 除 两 个 符 号 ,所 以 最 多 扫 描 n / 2 次 。 于 是 步 骤 2 和
3 需 要 的 全 部 时 间 是 ( rz / 2 )OU )= OU 2 ) 步 。
在 步 骤 4 中 ,机 器 扫 描 一 次 来 决 定 是 接 受 还 是 拒 绝 。这 一 步 需 要 的 时 间 最 多 是 OU )。
所以 ,iV 在长度为 n 的输入上总共耗时为 0( rz )+0( 722 )+0( 72 ),或 0( n 2 )。换言之 ,

TIMEU ( rO )
^ —
它的运行时间是 OU 2 )。这就完成了对该机器的时间分析 。
为 了 根 据 时 间 需 求 来 给 语 言 分 类 ,下 面 定 义 一 些 记 法 。
令 纟:N R + 是 一 个 函 数 。 定 义 时 间 复 杂 性 类 ( time complexity class )
O U U ) ) 时 间 的 图 灵 机 判 定 的 所 有 语 言 的 集 合。
为由
回 忆 语 言 A ={ 0* 1M 々>0 }。前 面 的 分 析 表 明 ,因 为 在 时 间 OU2 ) 内 判 定 A ,而
TIMECn2 ) 包 括 所 有 在 时 间 OU 2 ) 内 可 以 判 定 的 语 言 ,所 以 A 6 TIME( n 2 )。
是 否 存 在 渐 近 更 快 地 判 定 A 的 机 器 呢?换 言 之 ,是 否 对 于 某 个 K « )= o( n 2 ),A 属 于
TIME( Krz ))? 在 每 一 次 扫 描 中 删 除 两 个 0 和 两 个 1 , 而 不 仅 仅 是 各 一 个 ,就 可 以 减 少 运 行
第尸章时间复杂性 177

时 间 ,因 为 这 么 做 把 扫 描 次 数 减 少 了 一 半 。但 是 这 样 只 使 得 运 行 时 间 提 高 了 2 倍 ,不 影 响
渐 近 运 行 时 间 。下 面 的 机 器 M2 采 用 不 同 的 方 法 ,可 以 渐 近 更 快 地 判 定 A 。 它 表 明
TIME( log n )
” 0

“对 输 入 串
1. 扫 描 带 子 ,如 果 在 1 的 右 边 发 现 0 , 就 拒 绝 。
2. 只 要 在 带 子 上 还 有 0 和 1,就 重 复 下 面 的 步 骤 。
3. 扫 描 带 子 ,检 查 剩 余 的 0 和 1 的 总 数 是 偶 数 还 是 奇 数 。若 是 奇 数 ,就 拒 绝 。
4. 再 次 扫 描 带 子 ,从 第 一 个 0 开 始 ,隔 一 个 删 除 一 个 0; 然 后 从 第 一 个 1 开 始 ,
隔 一 个 删 除 一 个 1。
5. 如 果 带 子 上 不 再 有 0 和 1 ,就 接 受 。否 则 ,拒 绝 。

在 分 析 M2 之 前 ,先 来 验 证 它 的 确 可 以 判 定 A 。在 步 骤 4 中 ,每 执 行 一 次 扫 描 ,剩 余
的 0 的 总 数 就 减 少 一 半 ,其 他 的 0 被 删 除 了。因 此 ,如 果 开 始 时 有 1 3 个 0 , 那 么 在 步 骤 4
执 行 一 次 以 后 就 只 剩 下 6 个 0。随 后 每 次 执 行 分 别 剩 下 3 个 、1 个 和 0 个 0 。该 步 骤 对 1 的
数 目 有 同 样 的 效 果。
现 在 来 检 查 在 每 次 执 行 步 骤 3 时 0 和 1 的 数 目 的 奇 偶 性。再 次 假 定 开 始 时 有 1 3 个 0
和 1 3 个 1。第 一 次 执 行 步 骤 3 时 ,有 奇 数 个 0 ( 因 为 1 3 是 奇 数 ) 和 奇 数 个 1,以 后 每 次 执
行 时 分 别 只 剩 下 偶 数 个 ( 6 个 )、 然 后 是 奇 数 个 (3 个)、 又 是 奇 数 个 (1 个) 0 和 1。由 于
步 骤 2 指 定 的 循 环 条 件 ,当 剩 下 0 个 0 或 0 个 1 时 ,步 骤 3 不 再 被 执 行 。对 于 得 到 的 奇 偶
序 列 ( 奇 、 偶 、 奇 、 奇 ),如 果 把 偶 替 换 成 0 , 把 奇 替 换 成 1 ,并 且 反 排 这 个 序 列 ,就 得 到
1 1 0 1 ,即 1 3 , 这 是 开 始 时 0 和 1 的 数 目 的 二 进 制 表 示 。该 奇 偶 序 列 总 是 以 反 排 的 方 式 给 出
二 进 制 表 示。
当 步 骤 3 检 查 剩 下 的 0 和 1 的 总 数 是 偶 数 时 ,实 际 上 是 在 检 查 0 数 目 的 奇 偶 性 与 1 数
目 的 奇 偶 性 是 否 一 致 。如 果 这 两 个 奇 偶 性 始 终 一 致 ,那 么 0 和 1 的 数 目 的 二 进 制 表 示 就 一
致 ,从 而 这 两 个 数 目 就 相 等 。
为 了 分 析 以2 的 运 行 时 间 ,首 先 注 意 ,每 一 步 骤 都 消 耗 OU ) 的 时 间 ,然 后 确 定 每
一 步 骤 需 要 执 行 的 次 数 。 步 骤 1 和 5 执 行 一 次 ,共 需 要 0( 7 2 ) 的 时 间 。 步 骤 4 在 每 一 次
执 行 时 至 少 删 除 一 半 的 0 和 1 ,所 以 至 多 l + log2 « 次 循 环 就 可 以 把 全 部 字 符 删 除 。 于 是
步 骤 2 、3 和 4 总 共 消 耗 时 间 ( l + \og 2 n ) 0( n ) 即 O( Mogrz )。M2 的 运 行 时 间 是 O( rz )+
9

Oinlogn ) = 0 0 1ogw )。
前 面 已 经 证 明 A 6 TIMEU 2 ),而 现 在 有 更 好 的 界 ,即 AGTIMEUlogn )。 这 个 结 果
在 单 带 图 灵 机 上 不 可 能 进 一 步 改 进 。实 际 上 ,单 带 图 灵 机 在 ohiogn ) 时 间 内 判 定 的 语 言
都 是 正 则 语 言 ,问 题 7.2 0 要 求 证 明 这 一 点 。
如 果 图 灵 机 有 第 二 条 带 子 ,就 可 以 在 OU ) 时 间 (也 称 为 线 性 时 间 ( liner time )) 内
判 定 语 言 A 。下 面 的 双 带 图 灵 机 M3 在 线 性 时 间 内 判 定 A 。 机 器 的 运 行 方 式 和 上 面 那
些 判 定 A 的 机 器 不 同 ,它 只 是 简 单 地 将 所 有 0 复 制 到 第 二 条 带 子 上 ,然 后 拿 来 和 1 进 行
匹 配。

^
3 =“对输入串
1. 扫 描 带 子 1 ,如 果 在 1 的 右 边 发 现 0 , 就 拒 绝 。
2. 扫 描 带 子 1 上 的 0 , 直 到 第 一 个 1 时 停 止 ,同 时 把 0 复 制 到 带 子 2 上 。
3. 扫 描 带 子 1 上 的 1 直 到 输 入 的 末 尾 。每 次 从 带 子 1 上 读 到 一 个 1 ,就 在 带 子 2
178 第三部分复杂性理论

上 删 除 一 个 0 , 如 果 在 读 完 1 之 前 所 有 的 0 都 被 删 除 ,就拒绝 。
4. 如 果 所 有 的 0 都 被 删 除 ,就接受 。如 果 还 有 0 剩 下 ,就拒绝 。

这 个 机 器 分 析 起 来 很 简 单 。四 个 步 骤 的 每 一 步 明 显 地 需 要 OU ) 步 ,所 以 全 部 运 行 时
间 是 0(〃),因 而 是 线 性 的 。 注 意 ,这 是 可 能 的 最 好 运 行 时 间 ,因 为 光 是 读 输 人 就 需 要
步。
总 结 一 下 关 于 A 的 时 间 复 杂 度 的 结 果 ,即 判 定 A 所 需 要 的 时 间 。 给 出 一 个 单 带 图 灵
机 純 ,能 够 在 时 间 OU2 ) 内 判 定 A , 而 一 个 更 快 的 单 带 图 灵 机 M2 , 能 够 在 时 间
O( nlogn ) 内 判 定 A 。问 题 7.2 0 的 证 明 将 指 出 ,不 存 在 更 快 的 单 带 图 灵 机 。 随 后 将 给 出 一
个 双 带 图 灵 机 M3 , 能 够 在 时 间 OU ) 内 判 定 A 。因 此 A 在 单 带 图 灵 机 上 的 时 间 复 杂 度 是
O( logrz ), 在 双 带 图 灵 机 上 是 O( n )。注 意 ,A 的 复 杂 度 与 选 择 的 计 算 模 型 有 关 。

^ 上 面 的 讨 论 突 出 了 复 杂 性 理 论 与 可 计 算 性 理 论 之 间 的 一 个 重 大 区 别。 在 可 计 算 性 理 论
-
中 ,丘 奇 图 灵 论 题 断 言 ,所 有 合 理 的 计 算 模 型 都 是 等 价 的 ,即 它 们 所 判 定 的 语 言 类 都 是
相 同 的 。 在 复 杂 性 理 论 中 ,模 型 的 选 择 影 响 语 言 的 时 间 复 杂 度 ,如 在 一 个 模 型 上 线 性 时 间
内 可 判 定 的 语 言 在 另 一 个 模 型 上 就 不 一 定 是 线 性 时 间 内 可 判 定 的。
在 复 杂 性 理 论 中 ,根 据 计 算 问 题 的 时 间 复 杂 度 来 对 问 题 分 类 。但 是 用 哪 种 模 型 来 度 量
时 间 呢?同 一 个 语 言 在 不 同 的 模 型 上 可 能 需 要 不 同 的 时 间 。
幸 运 的 是 ,对 于 典 型 的 确 定 型 模 型 ,时 间 需 求 的 差 别 不 是 太 大 。 所 以 ,只 要 分 类 体 系
对 复 杂 性 上 相 对 较 小 的 差 异 不 是 很 敏 感 ,那 么 对 确 定 型 模 型 的 选 择 就 关 系 不 大 。在 下 面 几
节 中 ,将 进 一 步 讨 论 这 一 想 法 。

7.1.3 模型间的复杂性关系
现 在 考 察 计 算 模 型 的 选 择 怎 样 影 响 语 言 的 时 间 复 杂 度。考 察 三 种 模 型 :单 带 图 灵 机 、
多 带 图 灵 机 和 非 确 定 型 图 灵 机。
设 KT? ) 是 一 个 函 数 ,t ( n ) 则 每 一 个 iU) 时 间 的 多 带 图 灵 机 都 和 某
一 个 OU 2( /
0 ) 时 间 的 单 带 图 灵 机 等 价。
^ nQ

证 明 思 路 此 定 理 的 证 明 思 想 非 常 简 单 。 回 忆 一 下 ,定 理 3 .8 说 明 了 怎 样 把 一 个 多
带 图 灵 机 转 变 为 一 个 模 拟 它 的 单 带 图 灵 机 。 分 析 这 种 模 拟 ,确 定 它 需 要 多 少 额 外 的 时
间 。证 明 模 拟 多 带 机 的 每 一 步 最 多 需 要 单 带 机 的 0(〆〃)) 步 。 因 此 总 共 需 要 时 间 为
0( P( n)) 步 。
证 明 设 M 是 一 个 在 时 间 〆 幻 内 运 行 的 々 带 图 灵 机 。构 造 一 个 在 时 间 OG2 U )) 内
运 行 的 单 带 图 灵 机 S。
机 器 S 模 拟 M 运 行 ,正 如 定 理 3.8 所 描 述 的 那 样 。 回 忆 一 下 ,S 用 它 的 一 条 带 子 表 示
M 的 所 有 々 条 带 子 的 内 容 。这 些 带 子 连 续 存 放 ,M 的 读 写 头 的 位 置 都 标 在 恰 当 的 方 格 上 。
开 始 时 ,S 让 它 的 带 子 形 成 表 示 M 的 所 有 带 子 的 格 式 ,然 后 模 拟 M 的 步 骤 。 为 了 模 拟
M 的 一 步 ,S 扫 描 带 子 上 的 所 有 信 息 ,确 定 在 M 的 读 写 头 下 的 符 号。然 后 S 再 次 扫 描 带 子 ,
更 新 带 子 内 容 和 读 写 头 位 置 。如 果 M 的 读 写 头 向 右 移 动 到 带 子 上 以 前 没 有 读 到 的 位 置 ,那 么
S 必 须 增 加 分 配 给 这 条 带 子 的 存 储 空 间。为 此 ,它 把 自 己 的 带 子 的 一 部 分 向 右 移 动 一 格 。
现 在 来 分 析 这 种 模 拟 。对 于 M 的 每 一 步 ,机 器 S 两 次 扫 描 带 子 上 活 跃 的 部 分。第 一
次 获 取 决 定 下 一 步 动 作 所 必 需 的 信 息 ;第 二 次 完 成 这 一 步 的 动 作 ,S 的 带 子 上 活 跃 部 分 的
第 /章 时 间 复 杂 性 179

长 度 决 定 了 S 扫 描 一 次 需 要 多 长 时 间 ,所 以 必 须 确 定 这 个 长 度 的 上 界 。为 此 取 M 的 々 条
带 子 上 活 跃 部 分 的 长 度 之 和 。因 为 在 步 中 ,如 果 M 的 读 写 头 在 每 一 步 都 向 右 移 动 ,
则 M 用 掉 个 带 子 方 格 。若 它 还 向 左 移 ,则 不 用 那 么 多 ,所 以 每 一 个 活 跃 部 分 的 长 度
最 多 是 i U )。于 是 S 扫 描 一 次 它 的 活 跃 部 分 需 要 O U( n )) 步 。
模 拟 M 的 每 一 步 ,S 执 行 两 次 扫 描 ,还 可 能 最 多 向 右 移 动 丨 次 。 每 一 次 用 时
O( U n )), 所 以 ,模 拟 M 的 一 步 操 作 ,S 总 共 耗 时 O U( /2 ))。
现 在 来 界 定 模 拟 所 需 要 的 全 部 时 间 。 在 开 始 阶 段 ,S 让 它 的 带 子 形 成 恰 当 的 格

_
式 ,这 需 要 O U ) 步 。 随 后 ,S 模 拟 M 的 M W 步 操 作 ,每 模 拟 一 步 需 要 O U U ))
步 ,所 以 模 拟 部 分 需 要 M n ) X O U U )) = O Q2 ( /0 ) 步 。 因 此 ,整 个 M 的 模 拟 过 程 需 要
O ㈤ + O U2 ㈤) 步 。
假定 (这 是 合 理 的 假 定 ,因 为 如 果 时 间 更 少 ,M 连 输 入 都 读 不 完 ),则 S 的
运行时间是 O U 2( n ))
,证 毕 。 裼

下 面 考 察 对 非 确 定 型 单 带 图 灵 机 的 类 似 定 理。证 明 这 种 机 器 所 判 定 的 语 言 在 确 定 型 单
带 图 灵 机 上 也 是 可 判 定 的 ,但 需 要 更 多 的 时 间 。在 此 之 前 ,必 须 定 义 非 确 定 型 图 灵 机 的 运
行 时 间 。回 忆 一 下 ,一 个 非 确 定 型 图 灵 机 当 它 的 所 有 计 算 分 支 在 所 有 输 入 上 都 停 机 时 ,成
为 一 个 判 定 机。


设 i v 是 一 个 非 确 定 型 图 灵 机 ,并 且 是 个 判 定 机 。i V 的运行时间 ( running
time) 是 函 数 /:N N ,其 中 /U ) 是 在 任 何 长 度 为 rz 的 输 入 上 所 有 计 算 分 支 中 的 最 大 步
-
数 ,如 图 7 1 所 示 。

确定型 非确定型

f{n ) 拒绝 /⑷

'
// 接受

V 接受/拒绝 拒绝

图 7- 1 测量确定型和非确定型时间

非确定型图灵机运行时间的定义不是用来对应任何实际的计算设备的 。相 反 ,稍 后 将
说 明 ,它 是 一 个 有 用 的 数 学 定 义 ,有 助 于 刻 画 一 类 重 要 的 计 算 问 题 的 复 杂 性 。
紐 他 设 iU ) 是 一 个 函 数 ,tdn )>n 0 则每一个〆/2 ) 时 间 的 非 确 定 型 单 带 图
灵机都与某一个 ”时 间 的 确 定 型 单 带 图 灵 机 等 价。
证 明 设 iV 是 一 个 在 时 间 Kn ) 内 运 行 的 非 确 定 型 图 灵 机 ,同 定 理 3.1 0 的 证 明 一 样 ,
构 造 确 定 型 图 灵 机 D,D 通 过 搜 索 N 的 非 确 定 型 计 算 树 来 模 拟 N 。现 在 分 析 这 种 模 拟。
在 长 度 为〃的 输 入 上 ,N 的 非 确 定 型 计 算 树 的 每 一 个 分 支 的 长 度 最 多 是 Mn),树 的 每
一 个 结 点 最 多 有 6 个 子 女 ,其 中 6 是 N 的转移函数所决定的合法选择的最大值 。因 此 树 叶
的 总 数 最 多 是 以0 0 。
模 拟 过 程 以 宽 度 优 先 法 探 查 这 棵 树 。 换 言 之 ,在 访 问 深 度 为 +1 的 结 点 之 前,
180 第三部分复杂性理论

先访问所有深度为 d 的结点 。定理 3 .10 的证明中给出的算法当访问某个结点时 ,就


从根出发下行到那个结点 。 这种做法效率很低 ,但即使改进这种低效率也不会使当前
定理发生改变 ,所以不用改进它 。 树中结点的总数小于最大叶数的两倍 ,因此用
0( 作为它的上界 。从根出发下行到一个结点的时间是 O( KTO )。 因此 ,D 的运
) = 20( ”))。

^
行时间是 OUU )6 )

正如定理 3.10 中所描述的 ,图灵机 D 有三条带子 。按照定理 7.8 , 把它转变为单带
图灵机最多使运行时间乘方 。 这样 ,单带模拟机的运行时间是
2 G(心)),定理得证 。 ■

7.2 P类
定理 7.8 和定理 7.10 显示岀一个重要的差别 。一方面 ,问题的时间复杂度在确定型
单带和多带图灵机上最多是平方或多项式的差异 ;另一方面 ,在确定型和非确定型图灵机
上 ,问题的时间复杂度最多是指数的差异 。

7.2. 1 多项式时间
运行时间的多项式差异可以认为是较小的 ,而指数差异则被认为是大的 。看一下为什
么要选择区分多项式和指数 ,而不是选择别的某两类函数 。
首先 ,注意到典型的多项式 (如〃3 ) 与典型的指数 ( 如 2”) 在增长率上存在巨大的
差异 。例如 ,令〃是 1000 , 这是一个算法输人的合理规模。在这种情况下 ,V 是 10 亿 ,
虽然是大数 ,但还可以处理 。然而 ,2” 则是一个比宇宙中的原子数还大得多的数 。多项式
时间算法就很多目的而言是足够快了 ,而指数时间算法则很少使用。
典型的指数时间算法来源于通过搜索解空间来求解问题 ,这 称 为 蛮 力 搜 索 ( brute -
force search ) 例如 ,分解一个数为素数因子的一种方法是搜遍所有可能的因子 。搜索空
0

间的规模是指数的 ,所以这种搜索需要指数时间 。有时候 ,通过更深人地理解问题 ,可以


避免蛮力搜索 ,从而可能会找到更实用的多项式时间算法 。
所有合理的确定型计算模型都是多项式等价的 ( polynomially equivalent ), 也就是说 ,
它们中任何一个模型都可以模拟另一个 ,而运行时间只增长多项式倍 。 当称所有合理的确
定型模型都多项式等价时 ,我们并不是想定义什么是合理的 。但是在心里有一个概念 ,它
足够广泛 ,能容纳那些和实际计算机运行时间近似的模型 。例如 ,定理 7.8 表明确定型单
带和多带图灵机模型是多项式等价的 。
从现在起 ,我们关注时间复杂性理论中不受运行时间仅有多项式差异影响的方面 。忽
略这样的差异让我们可以不依赖于选择具体计算模型来研究理论 。记住 ,我们的目标是给
出计算的基本性质,而不是图灵机或其他特殊模型的性质。
读者可能感到忽略运行时间的多项式差异是荒谬的 。实际上 ,程序员当然在乎这种差
异 ,而且他们拼命干就是为了能让程序运行快两倍 。但是 ,前面介绍渐近记法的时候 ,忽
略了常数因子 。现在又建议忽略比这大得多的多项式差异 ,如时间 n 和 n 3 这样的差异 。
决定忽略多项式差异并不是说这样的差异不重要 ,相反 ,时间〃和〃3 之间的差异是
重要的。但是某些问题 (如因数分解问题) 是多项式的还是非多项式的确实与多项式差异
无关 ,而且这些问题也很重要 。在这里仅仅关注这种类型的问题 。撇开树看森林并不意味
着一样比另一样更重要—它只是提供一种不同的视角 。
第 7章 时 间 复 杂 性 181

现在给出复杂性理论中的一个重要定义 。
BDI
^ P 是 确 定 型 单 带 图 灵 机 在 多 项 式 时 间 内 可 判 定 的 语 言 类 。换 言 之 ,
P = UTIME ( )
k ^
在理论中 ,P 类扮演核心的角色 ,它的重要性在于 :
1. 对于所有与确定型单带图灵机多项式等价的计算模型来说 ,P 是不变的 。
2.P 大致对应于在计算机上实际可解的那一类问题 。
第 1 条表明 ,在数学上 ,P 是一个稳健的类 ,它不受所采用的具体计算模型的影响 。
第 2 条表明 ,从实用的观点看 ,P 是恰当的 。 当一个问题在 P 中的时候 ,就有办法在
时间 V (々是常数) 内求解它 。至于这么长时间是否实用就依赖于々和实际的应用情况 。
当然 , 100
的运行时间不太可能有任何实际应用。不管怎样 ,把多项式时间作为实际可解
性的标准已经被证明是有用的 。一旦为某个原先似乎需要指数时间的问题找到了多项式时
间算法 ,则一定是了解了它的某些关键的方面 ,通常就能进一步降低它的复杂性 ,达到实
用的程度 。

7.2. 2 P 中的问题举例

当给出多项式时间算法的时候 ,给出的是算法的高层描述 ,没有提及具体计算模型的


特点 。这样做回避了带子和读写头运动的烦琐细节 。在描述算法的时候 ,需遵从一定的习
惯 ,以便可以分析它的多项式性 。
我们继续把算法描述成带编号的步骤 。在图灵机上实现算法的一个步骤通常需要图灵
机的许多步 。 因此 ,我们必须敏感于图灵机实现算法每一步的步数和算法的步骤总数 。
当分析一个算法 ,证明它在多项式时间内运行时 ,需要做两件事 。首先 ,必须为算法
在长为〃的输入上运行时所需要的步骤数给出多项式上界 (一般用大 O 记法 )。其次 ,必
须考察算法描述中的每一步 ,保证它们都可以由合理的确定型模型在多项式时间内实现。
在描述算法时 ,仔细确定它的步骤 ,以使第二部分分析容易进行 。 当两部分工作都完成以
后 ,就可以下结论 :算法在多项式时间内运行 。因为已经证明它需要多项式个步骤 ,所以
每一步骤可以在多项式时间内完成 ,而多项式的组合还是多项式 。
需要注意的是问题所用的编码方法 。我们继续采用括号记法 〈 〉来指出把一个或多
个对象变成字符串的合理编码 ,而不规定任何具体的编码方法 。现在 ,合理的方法就是允
许在多项式时间内把对象编码 / 解码为自然的内部表示或其他合理的编码。对于图 、 自动
机及类似事物的熟知的编码方法都是合理的 。但请注意 ,编码数字的一进制记法 ( 如数字
17 编码为一进制字符串 m m i i i i i i n i i i ) 是不合理的 ,因为它比真正合理的编码 ( 如
以任何々>2 为基的记法) 大指数倍 。
本章碰到的许多计算问题都包含图的编码 。图的一种合理编码是它的结点和边的列
表 ,另一种是相邻矩阵 (adjacency matrix ),其中若从结点 i 到结点 )有边 ,则第 ( i ,j )
项为 1 ,否则为 0。当分析图上的算法时 ,运行时间可能会根据结点数而不是表示图的大
小来计算 。在合理的图表示方法中 ,表示的大小是结点数的多项式 。因此 ,如果分析某个
算法 ,并证明它的运行时间是结点数的多项式 ( 或指数),那么就知道它是输人长度的多
项式 (或指数) 了。
第一个问题与有向图有关 。有向图 G 包含结点 s 和 ,如图 7 2 所示 。 PATH 问题就 -
182 第三部分复杂性理论

是要确定是否存在从 s 到〖 的有向路径 。令
P A T H ={( G ,s ,t )| G 是 具 有 从 s 到 f 的有向路径的有向图 }

图 7- 2 PA 丁H 问题 :存在从 s 到( 的路径吗

PATHePo
证明思路通过给出判定 PATH 的多项式时间算法来证明该定理。在描述算法之前 ,
要注意到该问题的蛮力算法是不够快的 。
PATH 的蛮力算法通过考察 G 中所有可能的路径来确定是否存在从 s 到 f 的有向路
径 。一条可能路径就是 G 中长度最多为 m 的结点序列 ,m 是 G 中的结点数 。( 如果从 s 到
f 存在有向路径 ,那么就存在长度不超过 m 的有向路径 ,因为路径上不需要重复结点 。

但是这些可能的路径数是 m 这是 G 中结点数的指数倍 。因此该蛮力算法消耗指数时间 。
'
为了获得 PATH 的多项式时间算法 ,必须设法避免蛮力搜索 。一种办法是采用图搜
索方法 ,如宽度优先搜索。连续标记 G 中从 s 岀发 ,长度为 1 ,2 , 3 , 直 到 m 的有向路径
可达的所有结点 。用多项式可以容易地界定该策略的运行时间 。
证明 P A T H 的一个多项式时间算法 M 运行如下 :
对输入 < G , t ),G 是包含结点 s 和 的有向图 :
s,
1. 在结点 s 上做标记 。
2. 复重下面步骤 3 , 直到不再有结点被标记 。 ^
3. 扫描 G 的所有边 。如果找到一条边 ( a ,6 ), a 被标记而 6 没有被标记 ,那么标
记 6。
4. 若〖 被标记 ,则 接 受 ;否则 ,拒绝 。

分析该算法 ,证明它在多项式时间内运行 。显然 ,步骤 1 和 4 只执行一次。步骤 3 最
多执行 m 次 ,因为除最后一次外 ,每一次执行都要标记 G 中的一个未标记的结点。所以
用到的总步骤数最多是 l +1 + m ,是 G 的规模的多项式 。
M 的步骤 1 和 4 很容易用任何合理的确定型模型在多项式时间内实现 。步骤 3 需要扫
描输入 ,检查某些结点是否被标记 ,这也容易在多项式时间内实现 。所以 M 是 PATH 的
多项式时间算法 。 ■

看另一个多项式时间算法的例子 。称两个数是互素的 ( relatively prime ), 若 1 是 能 同


时整除它们的最大整数 。例如 ,10 和 21 是互素的 ,虽然它们自己都不是素数 。但是 10 和
22 不是互素的 ,因为它们都能被 2 整除 。令 i ELPi ME 代表检査两个数是否互素的问
题 ,即

■MR! RELPRIMEePo
〈:r,
^^
y〉 :
|:c 与 y 互素 }
襄尸章时间复杂性 183

证 明 思 路 解 决 该 问 题 的 一 种 算 法 是 搜 遍 这 两 个 数 的 所 有 可 能 的 公 因 子 ,如 果 没 有 发
现 大 于 1 的 公 因 子 ,就 接 受 。然 而 ,用 二 进 制 或 其 他 任 何 以 々 为 基 的 记 法 ( k >2 ) 表 示 的
数 字 的 大 小 是 它 表 示 长 度 的 指 数 倍 。因 此 该 蛮 力 算 法 需 要 搜 遍 指 数 多 个 可 能 的 因 子 ,消 耗
指 数 的 运 行 时 间。
我 们 改 用 一 种 古 老 的 数 值 过 程 来 求 解 该 问 题 ,称 为 欧 几 里 得 算 法 (Euclidean algorithm ),
以 此 计 算 最 大 公 因 子。两 个 自 然 数:r 和 的 最 大 公 因 子 ( greatest common divisor ) 记 为 gcd
(x,
3;),是 能 同 时 整 除:r 和y
^
的 最 大 整 数 。 例 如 gcd( 1 8 ,2 4 )= 6 。显 然 ,:
r 和 y 是互素的充
30 = l 。在 证 明 中 把 欧 几 里 得 算 法 描 述 为 算 法 E , 它 使 用 函 数 mod ,
分 必 要 条 件 是 gcd( x ,
x mod 3 等 于 用 J 去 整 除:r 所 得 的 余 数 。

^
证 明 欧 几 里 得 算 法 E 如下:
对 输 入〈:ra〉,:
r 和 y 是二进制表示的自然数:
1. 重 复 下 面 的 操 作 ,直 到 :y = 0。
2.
3.
赋 值 oc
交换
4. 输 出 x 。

T
— x mod :y 。

和 y 的 值。

算 法 1? 以 :为 子 程 序 求 解 RfXPRJME 。
尺 =“对 输 入 〈X ,7 > ,:
T 和y 是二进制表示的自然数:
1 在〈:r ,W 上 运 行 。
2. 若 结 果 为 1 ,就 接 受 ;否 则 ,就 拒 绝 。 ”
显 然 ,若 E 在 多 项 式 时 间 内 运 行 且 正 确 ,则 i? 也 在 多 项 式 时 间 内 运 行 且 正 确 。所 以
只 需 分 析 E 的 时 间 和 正 确 性 。该 算 法 的 正 确 性 是 众 所 周 知 的 ,不 在 这 里 进 一 步 讨 论 它 。
为 了 分 析 E 的 时 间 复 杂 度 ,首 先 证 明 步 骤 2 的 每 一 次 执 行 (除 了 第 一 次 有 可 能 例 外)
都 把 x 的 值 至 少 减 少 一 半 。执 行 步 骤 2 以 后 ,由 函 数 mod 的 性 质 知:r<3; 。步 骤 3 后 ,有
x>3N 因 为 这 两 个 值 已 经 交 换 。于 是 当 步 骤 2 随 后 执 行 时 有 : r>3 。若:
y = 3::
y<y x /2 , x 至 少 减 少 一 半 。笔 x l K y ,贝lj 工 mod :

_ 则: r mod

^
y<i/ 2 ,x 至 少 减 少 一 半 。
*

每 一 次 执 行 步 骤 3 都 使:r 和 的 值 相 互 交 换 ,所 以 每 两 次 循 环 就 使 得 x 和 原先的值

^
至 少 减 少 一 半 。于 是 步 骤 2 和 3 执 行 的 最 大 次 数 是 21og2:r 和 21og2 3;中 较 小 的 那 一 个 。 这
两 个 对 数 与 表 示 的 长 度 成 正 比 ,步 骤 的 执 行 次 数 是 OU )。
所 以 整 个 运 行 时 间 是 多 项 式 的。
^
:的 每 一 步 仅 消 耗 多 项 式 时 间 ,

最 后 一 个 多 项 式 时 间 算 法 的 例 子 表 明 ,每 一 个 上 下 文 无 关 语 言 是 多 项 式 时 间 可 判 定 的。
每一个上下文无关语言都是 P 的成员。
证 明 思 路 定 理 4.8 证 明 了 每 一 个 CFL 都 是 可 判 定 的 ,并 且 为 每 一 个 CFL 给 出 了 判
定 算 法 。如 果 那 个 算 法 在 多 项 式 时 间 内 运 行 ,那 么 本 定 理 作 为 推 论 就 必 然 成 立 。回 忆 一 下
那 个 算 法 ,看 它 运 行 得 是 否 够 快 。
令 L 是 一 个 由 CFGG 产 生 的 CFL,G 是 乔 姆 斯 基 范 式 。由 问 题 2.3 8 知 :因 G 是 乔 姆
斯 基 范 式 ,故 任 何 得 到 字 符 串 W 的 推 导 都 有 2〃一 1 步 ,7 2 是 w 的 长 度 。当 给 L 的 判 定 机
输 入 长 为 n 的 字 符 串 时 ,它 通 过 试 遍 所 有 可 能 的 2〃一 1 步 推 导 来 判 定 L 。如 果 其 中 有 一 个
得 到 w 的 推 导 ,该 判 定 机 就 接 受 ;否 则 ,就 拒 绝 。
分 析 一 下 该 算 法 可 知 ,它 不 能 在 多 项 式 时 间 内 运 行。々 步 推 导 的 数 量 可 能 达 到 々 的 指
184 第三部分复杂性理论

数 ,所 以 该 算 法 可 能 需 要 指 数 时 间 。
为 了 获 得 多 项 式 时 间 算 法 ,在 此 介 绍 一 种 强 有 力 的 技 术 ,称 为 动 态 规 划 ( dynamic
programming )。这 种 技 术 通 过 累 积 小 的 子 问 题 的 信 息 来 解 决 大 的 问 题 。把 子 问 题 的 解 都 记
录 下 来 ,这 样 就 只 需 对 它 求 解 一 次 。 为 此 ,把 所 有 子 问 题 编 成 一 张 表 ,当 碰 到 它 们 时 ,把
它 们 的 解 系 统 地 填 入 表 格。
在 本 例 中 ,考 虑 G 的 每 一 个 变 元 是 否 产 生 加 的 每 一 个 子 串 这 样 的 子 问 题 。 算 法 把 子
问 题 的 解 填 入 一 张〃X〃表 格 。 对 于 表 的 第 ( i ,j ) 项 包 含 产 生 子 串 1 …叫 的

所 有 变 元。 的 表 项 没 有 使 用。
算 法 为 w 的 每 一 子 串 填 写 表 项 。 首 先 为 长 为 1 的 子 串 填 写 表 项 ,然 后 是 长 为 2 的 子
串 ,依 此 类 推 。它 利 用 短 子 串 的 表 项 内 容 来 辅 助 确 定 长 子 串 的 表 项 内 容 。
例 如 ,假 定 该 算 法 已 经 确 定 了 由 哪 些 变 元 产 生 所 有 长 度 不 超 过 々 的 子 串 。 为 了 确 定 变

— -
元 A 是否产生某一长为々 + 1 的 子 串 ,算 法 把 该 子 串 以 々 种 可 能 方 式 分 裂 为 非 空 的 两 段 。
对 于 每 一 种 分 裂 方 式 ,算 法 考 察 每 一 条 规 则 A BC,利 用 以 前 计 算 的 表 项 来 确 定 是 否 B
产 生 第 一 段 而 且 C 产 生 第 二 段 。 如 果 B 和 C 都 产 生 各 自 的 段 ,那 么 A 就 产 生 该 子 串 ,并
且 被 加 入 相 关 联 的 表 项 。算 法 从 长 为 1 的 串 开 始 ,对 规 则 A 6 考察表格。
证 明 下 面 的 算 法 D 实 现 了 这 一 证 明 思 路。 令 G 是 产 生 CFL L 的 乔 姆 斯 基 范 式 的
CFG。假 设 S 是 起 始 变 元 。(回 忆 一 下 ,空 串 在 乔 姆 斯 基 范 式 文 法 中 被 特 殊 处 理 。算 法 在
) 注 释 写 在 方 括 号 中。
步 骤 1 中 处 理 泌= 6 的 特 殊 情 况。


D =“ 对 输 入
1. 若 切 = 且 5 e 是 一 条 规 则 ,则 接 受 。否 则 拒 绝 。 [w = e 的 情 况]
2. 对 i =
^ [考 察 每 一 长 为 1 的 子 串]


3. 对 每 一 变 元 A:
4 检查 A 6 是 否 是 一 条 规 则 ,其 中 6
5 若 是 ,把 A 放 入 table( i ,
i) 0

6. 对 / = 2 n: [Z 是 子 串 的 长 度 ]
7. 对
” / +1 : D 是 子 串 的 起 始 位 置]

8 令 j =i +L l [j 是 子 串 的 结 束 位 置]


~
0

9. 对 k =i j — 1: Ik 是 分 裂 位 置]
10. 对每一条规则 A BC:
11 . 若 tabled 9 k ) 包 含 B 且 tabLe( k ~\~ l 9 j ) 包 含 C,则 把 A 放 人 tabled ,j )
0

1 2. 若 S 在 加6心(l, n) 中 ,则 接 受 ;否 则 ,拒绝 。 ”
现 在 分 析 D。每 一 步 很 容 易 在 多 项 式 时 间 内 运 行 。步 骤 4 和 5 最 多 运 行 ㈣ 次 ,其 中 v
是 G 中 的 变 元 数 ,是 与 n 无 关 的 固 定 常 数 ;因 此 这 两 步 运 行 O( n ) 次 。 步 骤 6 最 多 运 行
次 。步 骤 6 每 运 行 一 次 ,步 骤 7 最 多 运 行; z 次 。步 骤 7 每 运 行 一 次 , 步 骤 8 和 9 最 多 运 行
n 次 。步 骤 9 每 运 行 一 次 ,步 骤 1 0 运 行 r 次 ,这 里 r 是 G 的 规 则 数 ,是 另 一 个 固 定 常 数 。
所 以 步 骤 1 1 ( 即 该 算 法 的 内 层 循 环 ) 运 行 0( n3 ) 次 。 总 计 D 执 行 0( /z3 ) 步 。

7. 3 NP 类
如 7.2 节 所 揭 示 的 ,许 多 问 题 可 以 避 免 蛮 力 搜 索 而 获 得 多 项 式 时 间 解 法 。但 是 ,在 某
些 其 他 问 题 (包 括 许 多 有 趣 而 有 用 的 问 题) 中 ,避 免 蛮 力 搜 索 的 努 力 还 没 有 成 功 ,求 解 它
第尸章时间复杂性 185

们 的 多 项 式 时 间 算 法 还 没 有 找 到。
为 什 么 对 这 些 问 题 寻 找 多 项 式 时 间 算 法 还 没 有 取 得 成 功 呢? 我 们 不 知 道 这 个 重 要 问 题
的 答 案 是 什 么 。 可 能 这 些 问 题 具 有 基 于 未 知 原 理 的 多 项 式 时 间 算 法 ,但 至 今 还 没 有 被 发
现 ,或 者 它 们 中 的 某 些 问 题 就 是 不 能 在 多 项 式 时 间 内 解 决 。 它 们 可 能 是 固 有 地 难 计 算 的 。
关 于 该 问 题 的 一 个 不 寻 常 的 发 现 是 ,许 多 问 题 的 复 杂 性 是 联 系 在 一 起 的 。发 现 其 中 一
个问题的多项式时间算法可以用来解决整个一
类 问 题 。从 一 个 例 子 开 始 来 理 解 这 一 现 象 。
有 向 图 G 中 的 哈 密 顿 路 径 ( Hamiltonian
path ) 是 通 过 每 个 结 点 恰 好 一 次 的 有 向 路 径。考
虑 这 样 一 个 问 题 :验 证 一 个 有 向 图 是 否 包 含 一 条
-
哈 密 顿 路 径 连 接 着 两 个 指 定 的 结 点 ,如 图 7 3 所
示 。令 图 7- 3 哈密顿路径经过每个结点恰好一次

^^ ^
只八] / \ 77 = {〈00,〉
|0 是包含从 5 到 z 的哈密顿路径的有向图}
通 过 修 改 定 理 7.1 2 给 出 的 P A T H 的 蛮 力 算 法 ,很 容 易 获 得 HAM P A T H 问 题 的 指 数
时 间 算 法 。 只 需 增 加 一 项 检 查 ,验 证 可 能 的 路 径 是 哈 密 顿 路 径 。没 有 人 知 道 HAMPATH
是 否 能 在 多 项 式 时 间 内 求 解。
HAMPATH 问 题 还 具 有 一 个 特 点 ,称 为 多 项 式 可 验 证 性 ( polynomial verifiability ),
这 对 于 理 解 它 的 复 杂 性 很 重 要 。虽 然 还 不 知 道 一 种 快 速 (即 多 项 式 时 间 ) 的 方 法 来 确 定 图
中 是 否 包 含 哈 密 顿 路 径 ,但 是 如 果 以 某 种 方 式 ( 可 能 采 用 指 数 时 间 算 法 ) 找 到 这 样 的 路
径 ,就 能 很 容 易 让 人 相 信 它 的 存 在 ,这 只 需 给 出 它 即 可 。换 言 之 ,验 证 哈 密 顿 路 径 的 存 在
性 可 能 比 确 定 它 的 存 在 性 容 易 得 多。
另 一 个 多 项 式 可 验 证 的 问 题 是 合 数 性 。回 忆 一 下 ,当 一 个 自 然 数 是 两 个 大 于 1 的 整 数
的 乘 积 时 ,称 该 自 然 数 为 合 数 (composite ) ( 即 合 数 就 是 非 素 数 的 数)。令
COMPOSITES = { x \ x= pqy 整 数 p ,
q>l }
虽 然 不 知 道 判 定 该 问 题 的 多 项 式 时 间 算 法 ,但 是 能 轻 易 地 验 证 一 个 数 是 合 数—只 需 要 该
数 的 一 个 因 子 即 可 。最 近 ,发 现 了 一 个 可 验 证 某 数 是 素 数 还 是 合 数 的 多 项 式 时 间 算 法 ,但
它 比 前 面 提 到 的 合 数 性 验 证 方 法 更 复 杂。
有 些 问 题 可 能 不 是 多 项 式 可 验 证 的 。 例 如 ,HAM PATH , 即 H AMPA 问题的补
问 题。尽 管 能 够 (以 某 种 方 式 ) 判 定 图 中 没 有 哈 密 顿 路 径 ,但 如 果 不 采 用 原 先 做 判 定 时 用
的 那 个 指 数 时 间 算 法 ,就 没 有 其 他 办 法 让 别 人 验 证 它 的 不 存 在 性 。下 面 是 形 式 化 的 定 义 。
语言 A 的验证机 ( verifier ) 是 一 个 算 法 V ,这 里
|对 某 个 字 符 串 c ,V 接 受〈 w ,
A = { u; c〉}
因 为 只 根 据 w 的 长 度 来 度 量 验 证 机 的 时 间 ,所 以 多 项 式 时 间 验 证 机 ( polynomial time veri-
fier ) 在 i t; 的 长 度 的 多 项 式 时 间 内 运 行 。 若 语 言 A 有 一 个 多 项 式 时 间 验 证 机 ,则 称 它 为 多
项 式 可 验 证 的 ( polynomially verifiable )。
验 证 机 利 用 额 外 的 信 息 ( 在 定 义 7.15 中 用 符 号 c 表 示) 来 验 证 字 符 串 c 是 A 的 成 员 。
该 信 息 称 为 A 的 成 员 资 格 证 书 ( certificate ) 或 证 明 ( proof ) 注 意 ,对 于 多 项 式 验 证 机 ,
0

证 书 具 有 多 项 式 的 长 度 的 长 度),因 为 这 是 该 验 证 机 在 它 的 时 间 界 限 内 所 能 访 问 的 全
部 信 息 长 度 。把 该 定 义 应 用 到 语 言 HAMPATH 和 COMPOSITES 上 。
186 第三部分复杂性理论

对 于 问 题 ,字 符 串 〈 G ,
6,
《〉eHAMPATH 的证书就只是一条从 6 到 z
的哈密顿路径 。 对于 COMPOSITES 问题 ,合数 :
r 的证书只是它的一个因子 。 在这两种
情况下 ,当把证书交给验证机以后 ,它就能在多项式时间内检查输人是否在语言中 。
NP 是 具 有 多 项 式 时 间 验 证 机 的 语 言 类 。
NP 类是重要的 ,因为它包含许多具有实际意义的问题。从前面的讨论可知 ,HAMPATH
和 COMPOSITES 都是 NP 的成员 。COMPOSITES 也是 NP 的子集 P 的成员 ,但要证明
这个更强的结论非常困难 。 术语 NP 即非确定型多项式时间 ( nondeterministic polynomial
time ) , 来源于使用非确定型多项式时间图灵机的另一特征 。 在 NP 中的问题有时被称为
NP 问题 。
下面是一个在非确定型多项式时间内判定 HAMPATH 问 题 的 非 确 定 型 图 灵 机
( NTM )。 回忆一下 ,在定义 7.9 中 ,定义非确定型机器的时间为最长计算分支所用的
时间 。
“对输入 < G , 0 , 这里 G 是包含结点 s 和 f 的有向图 :
s,
1. 写一列 m 个 数 ,/?2 , ,
P 參
m 是 G 的结点数 。 列中每一个数都是从 1 到
中非确定地挑选 。
2. 在列中检查重复性 ,若发现有重复 ,则拒绝 。
3. 检查 s = 和 = 是否都成立 。若有一个不成立 ,则拒绝 。

^
4 . 对 于 1 到 m — l 中的每一个 f ,检查 ( A ,
个不是 ,则拒绝 。否则 ,所有检查都通过了 ,接受 。

A + I ) 是 否 是 G 的一条边 。若有一

为了分析该算法并且验证它在非确定型多项式时间内运行 ,考察它的每一步骤 。 在步
骤 1 中 ,非确定的选择显然在多项式时间内运行 。在步骤 2 和 3 中 ,每一步是一次简单的
检查 ,所以合起来它们仍在多项式时间内运行 。 最后 ,步骤 4 显然也在多项式时间内运
行 。于是 ,该算法在非确定型多项式时间内运行 。
一个语言在 NP 中 ,当 且 仅 当 它 能 被 某 个 非 确 定 型 多 项 式 时 间 图 灵 机 判 定。
证明思路我们证明怎样把一个多项式时间验证机转化为等价的多项式时间 NTM 以
及怎样反向转化 。 NTM 通过猜想证书来模拟验证机 ,验证机通过把接受分支作为证书来
模拟 NTM。
证明对于该定理从左向右的方向 ,设 A G N P,要证 A 被多项式时间 N T M iV 判定 。
由 N P 的定义 ,存在 A 的多项式时间验证机 V。 假设 V 是一个在时间 W 内运行的图灵机 ,
构造 N 如下 :
N 对长为 n 的输人 w:
1. 非确定地选择最长为 V 的字符串
2. 在输入 < vu ,
c ) 上运行 V。
3. 若 V 接受 ,则接受 ;否则拒绝 。 ” ^
为了证明该定理的另一个方向 ,假设 A 被多项式时间 N T M N 判定 ,构造多项式时间
验证机 V 如下 :
V =“对输人〈 w ,
c〉,这里 w ,c 是字符串 :
1. 在输入 w 上模拟 N ,把 c 的每一个符号看作是对每一步所做的非确定性选择
的描述 (正如在定理 3.10 的证明中那样)。
第尸章时间复杂性 187

2. 若 iV 的当前计算分支接受 ,则接受 ;否则拒绝 。


” ■

类似于确定型时间复杂性类 TIME( KrO ),定义非确定型时间复杂性类 NTIMEUh ))。


N T I M E C )) = a|L 是 一 个 被 O U U ))时 间 的 非 确 定 型 图 灵 机 判 定 的
语 言 }。
職腦 ■
NP = b NTIMEC V )。
NP 类对于合理的非确定型计算模型的选择不敏感 ,因为所有这些模型都是多项式等
价的 。在描述和分析非确定型多项式时间算法时 ,遵循前面的确定型多项式时间算法的习
惯 。非确定型多项式时间算法的每一步必须在合理的非确定型计算模型上 ,在非确定的多
项式时间内应该可以明显地实现 。分析算法以证明每一分支最多使用多项式个步骤 。

7. 3. 1 NP 中的问题举例
无向图中的一个团 ( clique ) 是 一 个 子 图 ,其 中 每 两 个 结 点 都 有 边 相 连 。 6 团 ( t
-
clique ) 就 是 包 含 々 个 结 点 的 团 。图 7 4 展 示 一 个 包 含 5 团
的 图。
团问题旨在判定一个图是否包含指定大小的团 。令
CLJQU£ = { < G,〉G 是 包 含 々 团 的 无 向 图 }
々|

CLJQLTf 属 于 NP。
证 明 思 路 团 即 是 证 书。
证 明 下 面 是 C L I Q U E 的验证机 V。
-
图7 4 包含 5 团的图

对输人 < < G , > ,c > :

^
1. 检查 c 是否是 G 中々个结点的子图。
2. 检査 G 是否包含连接 c 中结点的所有边 。
3. 若两项检查都通过 ,则接受 ;否则 ,拒绝 。

另一种证明如果读者喜欢从非确定型多项式时间图灵机的角度来理解 NP 类 ,那么
可以通过给岀判定 C L I Q U E 的图灵机来证明本定理 。注意这两种证明的相似性 。
N =“ 对输人 〈 G ,
々〉,这里 G 是一个图 :
1. 非确定地选择 G 中々个结点的子集 c 。
2. 检查 G 是否包含连接 c 中结点的所有边 。
3. 若是 ,则接受 ;否则拒绝 。
” ■

…,
下面考虑与整数算术有关的问题 SUBS£T Sl M 。 给定一个数集:n , 々和一个目 - ;
标数 h 要判定在这个集合中是否有一个加起来等于( 的子集 。即
SUBSET- SUM = { ( s ,t ) \ s ,
…,A },且存在
{,…,
=
:y / } { 3:
i,…,
& }使得 2 y i = t )

^
i *

例如 ,<{ 4 ,11 ,16 ,21 ,27 },25 > e SUBSET-SUM , 因 为 4 + 2 1 = 2 5。注 意 {叫 ,


…, 和
…,
{% , 3 / } 被看作是多重集 ( multiset ),因此允许元素重复 。

^ SUBSET- SUM
证 明 思 路 子 集 就 是 证 书。
NP。

证 明 下 面 是 SUBSET- SUM 的一个验证机 V。


< S,
对输入 〈 0,c〉:
188 第三部分复杂性理论

1. 检 查 c 是 否 是 加 起 来 等 于〖 的 数 的 集 合 。
2. 检 查 S 是 否 包 含 c 中 的 所 有 数 。
3. 若 两 项 检 查 都 通 过 ,则 接 受 ;否 则 拒 绝 。

另 一 种 证 明 还 可 以 通 过 给 出 判 定 SUBSET- SUM 的 非 确 定 型 多 项 式 时 间 图 灵 机 来 证
明 本 定 理 ,如 下 所 示 :
iV =“ 对 输 入 iS t ) :

1. 非 确 定 地 选 择 S 中 的 数 的 一 个 子 集 合 c 。
2. 检 查 c 是 否 是 加 起 来 等 于〖 的 数 的 集 合 。
3. 若 检 查 通 过 ,则 接 受 ;否 则 拒 绝 。

注 意 这 些 集 合 的 补 集 ( CLIQUE和SUBSET-SUM ) 不 是 很 明 显 地 属 于 NP。 验 证 某 种
事 物 不 存 在 好 像 要 比 验 证 它 存 在 更 加 困 难 。 我 们 定 义 另 外 一 个 复 杂 性 类 ,称 为 coNP ,它
包 括 NP 中 的 语 言 的 补 语 言 。 还 不 知 道 coNP 是 否 与 NP 不 同 。

7.3. 2 P 与 NP 问题
如 前 所 述 ,NP 是 在 非 确 定 型 图 灵 机 上 多 项 式 时 间 内 可 解 的 语 言 类 ,或 者 等 价 地 说 ,
是 成 员 资 格 可 以 在 多 项 式 时 间 内 验 证 的 语 言 类 。P 是 成 员 资 格 可 以 在 多 项 式 时 间 内 判 定 的
语 言 类 。 把 这 些 内 容 总 结 如 下 ,其 中 ,把 多 项 式 时 间 可 解 的 粗 略 地 称 为 “快 速 地 ” 可
解 的。
?= 成 员 资 格 可 以 快 速 地 判 定 的 语 言 类 。
NP = 成 员 资 格 可 以 快 速 地 验 证 的 语 言 类 。
前 面 已 经 给 出 了 语 言 的 例 子 ,如 :
和CUQUf ,它们是 NP 的 成 员 ,但 不
知 道 是 否 属 于 P。多 项 式 可 验 证 性 的 能 力 似 乎 比 多 项 式 可 判 定 性 的 能 力 大 得 多 。但 难 以 想
象 的 是 ,P 和 NP 也 有 可 能 是 相 等 的 。现 在 还 无 法 证 明 在 NP 中 存 在 一 个 不 属 于 P 的 语 言 。
P = NP 是 否 成 立 的 问 题 是 理 论 计 算 机 科 学 和 当 代 数 学 中 最 大 的 悬 而 未 决 的 问 题 之 一 。
如 果 这 两 个 类 相 等 ,那 么 所 有 多 项 式 可 验 证 的 问 题 都 将 是 多 项 式 可 判 定 的 。 大 多 数 研 者
相 信 这 两 个 类 是 不 相 等 的 ,因 为 人 们 已 经 投 入 了 大 量
的 精 力 为 NP 中 的 某 些 问 题 寻 找 多 项 式 时 间 算 法 ,但
没 人 取 得 成 功 。研 究 者 还 试 图 证 明 这 两 个 类 是 不 相 等
的 ,但 是 这 要 求 证 明 不 存 在 快 速 算 法 来 代 替 蛮 力 搜 索 。
目 前 科 学 研 究 还 无 法 做 到 这 一 步 。图 7 - 5 显 示 了 两 种
可 能 性。
已 知 最 好 的 判 定 语 言 是 NP 的 确 定 型 方 法 使 用 指
图 7- 5 这两个可能中有一个是正确的
数 时 间 。换 言 之 ,可 以 证 明

^
NP£ EXPTIME = UTIME( 2 )
k
但 是 ,不 知 道 NP 是 否 包 含 在 某 个 更 小 的 确 定 型 时 间 复 杂 性 类 中 。

7.4 NP 完全性
在 p 与 NP 问 题 上 的 一 个 重 大 进 展 是 在 2 0 世 纪 7 0 年 代 初 由 斯 蒂 芬 • 库 克 ( Stephen
Cook ) 和 列 奥 尼 德 列 文 ( Leonid Levin ) 完 成 的 。 他 们 发 现 NP 中 某 些 问 题 的 复 杂 性 与
第 7章 时 间 复 杂 性 189

整 个 类 的 复 杂 性 相 关 联 。 这 些 问 题 中 任 何 一 个 如 果 存 在 多 项 式 时 间 算 法 ,那 么 所 有 NP 问
-
题 都 是 多 项 式 时 间 可 解 的 。这 些 问 题 称 为 NP 完 全 的 ( NP complete )。 NP 完 全 性 现 象 对
于 理 论 与 实 践 都 具 有 重 要 意 义。
在 理 论 方 面 ,试 图 证 明 P 不 等 于 NP 的 研 究 者 可 以 把 注 意 力 集 中 到 一 个 NP 完 全 问 题
上 。如 果 NP 中 的 某 个 问 题 需 要 多 于 多 项 式 时 间 ,那 么 NP 完 全 问 题 也 一 定 如 此 。 而 且 ,
试 图 证 明 P 等 于 NP 的 研 究 者 只 需 为 一 个 NP 完 全 问 题 找 到 多 项 式 时 间 算 法 就 可 以 达 到 目
的 了。
在 实 践 方 面 ,NP 完 全 性 现 象 可 以 防 止 为 某 一 具 体 问 题 浪 费 时 间 去 寻 找 本 不 存 在 的 多
项 式 时 间 算 法 。虽 然 ,可 能 缺 乏 足 够 的 数 学 依 据 来 证 明 该 问 题 在 多 项 式 时 间 内 不 可 解 ,但
是 我 们 相 信 P 不 等 于 NP,所 以 ,证 明 一 个 问 题 是 NP 完 全 的 就 成 为 它 的 非 多 项 式 性 的 一
个 强 有 力 的 证 据。
给 出 的 第 一 个 NP 完 全 问 题 称 为 可 满 足 性 问 题 ( satisfiability problem )。 回 忆 一 下 ,

-
取 值 为 TRUE 和 FALSE 的 变 量 称 为 布 尔 变 量 ( Boolean variable ) ( 见 0.2 节 )。通 常 用 1
表 示 TRUE ,用 0 表 示 FALSE。 布 尔 运 算 ( Boolean operation ) AND , OR , NOT 分 别
表示为 A , V , 这 些 运 算 在 下 表 中 描 述 。用 上 横 线 作 为 符 号 的 缩 写 ,所 以 的意思

^

是 ' •To
'"

0 A 0=0 0 V 0 =0 0=1
0 A 1 =0 0 V 1 =1 1=0
1 A 0=0 1 V 0 =1
0 八 1 =1 1 V 1=1
布 尔 公 式 ( Boolean formula ) 是 包 含 布 尔 变 量 和 运 算 的 表 达 式 。例 如 ,

多 = O A y ) V ( x 八 艺)
是 一 个 布 尔 公 式 。如 果 对 变 量 的 某 个 0 , 1 赋 值 使 得 一 个 公 式 的 值 等 于 1 ,则 该 布 尔 公 式 是
可 满 足 的 (satisfiable )。 上 面 的 公 式 是 可 满 足 的 ,因 为 赋 值:r = 0 , )= 1 ,% = 0 使得多的
值 为 1。称 该 赋 值 满 足 #。可 满 足 性 问 题 (satisfiability problem ) 就 是 判 定 一 个 布 尔 公 式
是 否 是 可 满 足 的。令
S A T ={〈 p k 是 可 满 足 的 布 尔 公 式 }
现 在 表 述 一 个 把 SAT 问 题 的 复 杂 性 与 NP 中 所 有 问 题 的 复 杂 性 联 系 起 来 的 定 理 。
SATGP , 当 且 仅 当 P = NP。
下 面 叙 述 该 定 理 证 明 的 核 心 方 法。

7.4 . 1 多项式时间可归约性
在 第 5 章 中 ,定 义 了 把 一 个 问 题 归 约 到 另 一 个 问 题 的 概 念 。 当 问 题 A 归 约 到 问 题 B
时 ,B 的 解 就 可 以 用 来 求 解 A 。现 在 定 义 一 种 关 于 计 算 效 率 的 可 归 约 性 。当 问 题 A 有 效 地
归 约 到 问 题 B 时 ,B 的 有 效 解 就 可 以 用 来 有 效 地 求 解 A 。


若 存 在 多 项 式 时 间 图 灵 机 M,使 得 在 任 何 输 入 w 上 ,M 停 机 时 /( w )
恰 好 在 带 子 上 ,则 称 函 数 /:2 * 2 * 为 多 项 式 时 间 可 计 算 函 数 ( polynomial time computa -
ble function ) 0
190 第三部分复杂性理论

A 称 为 多 项 式 时 间 映 射 可 归 约 ( polynomial time mapping reduci -


语言

—^
ble ) 到 语 言 JB , 或 简 称 为 多 项 式 时 间 可 归 约 ( polynomial time reducible ) 到 J3 , 记 为
A<PB , 若 存 在 多 项 式 时 间 可 计 算 函 数 /:2 * 2 * ,对 于 每 一 个 X V , 有
A => f( v u )G B
函 数 / 称 为 A 到 B 的 多 项 式 时 间 归 约 ( polynomial time reduction ) 0

多项式时间可归约性是 5.3 节定义的映射可归约


性的有效近似 。还有其他形式的有效可归约性 ,但是
多项式时间可归约性是一种简单形式 ,而且就我们的
目 的 而 言 也 已 足 够 ,所 以 不 在 这 里 讨 论 其 他 形 式 。
-
图 7 6 展示的是多项式时间可归约性 。
如同一般的映射归约一样 ,A 到 B 的 多 项 式 时 间
归约提供了一种方法 ,把 A 的成员资格判定转化为 B
的 成 员 资 格 判 定 ,只 是 现 在 这 种 转 化 是 有 效 地 完 成
图 7- 6 从 A 到 B 的多项式
的 。为 了 判 定 是 否wGA ,用 归 约 / 把 加 映 射 为 时间归约函数 /
f ( w ),然后判定是否 /( w ) eB。
如果一个语言能多项式时间可归约到另一个已知有多项式时间算法的语言 ,就 可 以 获
得第一个语言的多项式时间算法 ,如下面的定理所述 。
A G P。 且 则
证 明 设 M 是判定 B 的多项式时间算法 ,/ 是从 A 到 B 的 多 项 式 时 间 归 约 。 判 定 A
的多项式时间算法 iV 的描述如下 :
对输入 w :
1. 计 算 f( w )o
2. 在输入 /( w ) 上 运 行 M,输出 M 的输岀 。

若 则 f( w )e B , 因 为 / 是 从 A 到 B 的 归 约 。 于 是 ,只 要 wGA , M 就 接 受
f ( w ) 另外 ,因 为 iV 的 两 个 步 骤 都 在 多 项 式 时 间 内 运 行 ,所 以 iV 在 多 项 式 时 间 内 运 行 。
Q

注意 ,步骤 2 在多项式时间内运行是因为两个多项式的合成还是多项式 。 親

在进一步说明多项式时间归约之前 ,先 介 绍 3S A T ,它 是 可 满 足 性 问 题 的 一 种 特 殊 情
况 ,因为其中所有公式都具有一种特殊形式 。文 字 ( literal ) 是 一 个 布 尔 变 量 或 布 尔 变 量
的非 ,如 x 或无 。子 句 ( clause ) 是由 V 连接起来的若干文字 ,如 (I〗 V 石 V 石 V 工4 )。一
'

个布尔公式若是由 A 连接的若干子句组成 ,则 为 合 取 范 式 ( conjunctive normal form ) 的 ,


称它为 cnf 公 式 ,如
( x\ V -^ 2 V V -3^ 4 ) A ( ^3 V V ) A ( 工3 V )

^ ^
3 工5 工6 6

若所有子句都有三个文字 ,则 为 3cnf 公 式 ,如
~
M xT ) A ( ^3 V r 5 V 工6 ) A ( 工3 V 1 6 V 工4 ) 八 (工4 V 工5 V 工6 )
( xi M X2 •

令 3SA: { p k 是可满足的 3 cnf 公 式 }。如果一个赋值满足一个 cnf 公 式 ,那么每一个


T= 〈
子句必须至少包含一个值为 1 的 文 字 。
下面的定理给出从 3SAT 问 题 到 CLIQUE 问题的多项式时间归约。

某些其他教科书称它为多项式时间多一可归约性 ( polynomial time many-one reducibility ) 0


襄尸章时间复杂性 191

3 SAT 多项式时间可归约到 CLJOLrf 。 :


证 明 思 路 给 出 从 3SAT 到 CL /QUE 的多项式时间归约 / , 它把公式转化为图 。在构
造的图中 ,指定大小的团对应于公式的满足赋值 。 图中的结构被设计好用来模拟变量和子
句的作用。
证 明 设 彡 是 々 个 子 句 的 公 式 ,如
</> = ( a \ V 1 V Cl ) A ( « 2 V 心2 V C 2 ) 八 … 八(a々 M b k \J C k )

归约 / 生成字符串〈G , 々> ,其中 G 是如下定义的无向图 。


G 中的结点分成々组 ,每组三个结点 ,称为三元组 ( triple ) h ,
应于 0 中的一个子句 ,三元组中的每个结点对应于相应子句的一个文字 。G 的每个结点用
^ …, t

每个三元组对

它对应的彡中的文字做标记。 无2 x2
除两种情形以外 ,G 的边连接了所有的结点对。


同一个三元组内的结点无边相连 ,相反标记的两个
结点无边相连 ,如 x2 和 。例如当 # =(! :
〗 VA V

X2 ) A ( x i V ^ 2 V j:
*
2) A (xi V X2 V 工2 ) 时 ,图 7 - 7 表
示了这种构造 。
现在说明这种构造为何能发挥作用 ,证明必是
图 7- 7 归约从 V X! V X2 ) A
可满足的当且仅当 G 有々 团 。 - ( V X2 V X2 ) A ( x i V 0:
2 V X2 ) 生 成 的 图
假定彡有满足赋值 。在满足赋值下 ,每个子句
X[

中至少一个文字为真 。在 G 的每个三元组中 ,选择在该满足赋值下为真的文字对应的结


点 。如果在某一子句中不止一个文字为真 ,任意选择一个真文字即可 。选择出来的结点将
恰好形成一个 b 团 。因为是从々个三元组中的每一个中挑选一个结点 ,所以选择的结点数
为 I 每一对选中的结点都有边相连 ,它们都不是前面描述的两种例外情形 。它们不可能
来自同一三元组 ,因为从每个三元组中只选一个结点 。它们也不可能有相反标记 ,因为它
们关联的文字在该满足赋值下都为真 。所以 G 包含 f 团 。
-
假定 G 有々 团 。因为在同一个三元组中的结点都无边相连 ,所以团中的任何两个结点
都不在同一个三元组中 。因此々个三元组中的每一个都恰好包含团的一个结点 。 给彡的变


量赋真值 ,使得标记团结点的每个文字都为真 。这可以办到 ,因为具有相反标记的两个结
点无边相连 ,所以不可能两个都在团中 。给变量的这种赋值满足 因为每个三元组包含
一个团结点 ,所以每个子句包含一个赋值为 TRUE 的文字 。 # 可满足 。 職


定 理 7.2 5 和 定 理 7.26 说明 ,如果 CJLJQl/f 在多项式时间内可解 ,那么 3SAT 也如
此 。乍一看 ,这两个问题之间的联系显得很不寻常 ,因为表面上它们是非常不同的 。但是
多项式时间可归约性允许把它们的复杂性联系起来 。现在转向一个定义 ,它允许用类似的
方式把一整类问题的复杂性联系起来 。

7.4 . 2 NP 完全性的定义
如 果 语 言 B 满 足 下 面 两 个 条 件 ,就 称 为 NP 完 全 的 ( NP complete ): -
1.B 属 于 NP,并 且
2. NP 中 的 每 个 A 都 多 项 式 时 间 可 归 约 到 B 。
若上述的 B 是 NP 完 全 的 ,且 B e p ,贝1J P = NPD
192 第三部分复杂性理论

证明从多项式时间可归约性的定义直接可得。

NP 完 全 的 ,且 6<〆 ,C 属 于 NP ,则 C 是 NP 完 全 的 。
若上述的 B 是
证 明 已 知 C 属 于 NP ,必 须 证 明 NP 中 每 一 个 A 都 多 项 式 时 间 可 归 约 到 C 。因 为 B
是 NP 完 全 的 ,所 以 NP 中 的 每 个 语 言 都 多 项 式 时 间 可 归 约 到 B ,而 B 又 多 项 式 时 间 可 归
_
约 到 C 。多 项 式 时 间 归 约 是 可 以 复 合 的 ,即 若 A 多 项 式 时 间 可 归 约 到 B ,且 C 多 项 式 时 间
可 归 约 到 B ,则 A 多 项 式 时 间 可 归 约 到 C 。因 此 NP 中 的 每 个 语 言 都 多 项 式 时 间 可 归 约 到
C。

7 . 4.3 库 克 -列 文 定 理
一 旦 有 了 一 个 NP 完 全 问 题 ,就 可 以 从 它 出 发 ,通 过 多 项 式 时 间 归 约 得 到 其 他 NP 完
全 问 题 。然 而 ,建 立 第 一 个 NP 完 全 问 题 更 加 困 难 。现 在 ,通 过 证 明 SAT 是 NP 完 全 的 来
完成这一 步 。 *

e
SAT 是 NP 完 全 的 。
该 定 理 以 另 一 种 形 式 描 述 了 定 理 7.22。
证 明 思 路 证 明 SAT 属 于 NP 是 简 单 的 ,下 面 很 快 就 要 证 明 它 。 证 明 的 难 点 是 要 证
NP 中 的 任 何 语 言 都 多 项 式 时 间 可 归 约 到 SAT。
为 此 ,给 NP 中 的 每 一 个 语 言 A 构 造 一 个 到 SAT 的 多 项 式 时 间 归 约 。 A 的 归 约 在 字
符 串 w 上 产 生 布 尔 公 式 # , 用 它 模 拟 A 的 NP 机 器 在 输 人 w 上 的 运 行 。 如 果 机 器 接 受 ,那
么必有一个满足赋值对应于接受计算 。 如 果 机 器 不 接 受 ,那 么 没 有 赋 值 能 满 足 厂 因 此 ,
当 且 仅 当 0 可 满 足 时 ,w 属 于 A 。
实 际 上 ,虽 然 必 须 处 理 很 多 细 节 ,但 是 构 造 一 个 以 这 种 方 式 运 算 的 归 约 在 概 念 上 是 简
单 的 。一 个 布 尔 公 式 可 以 包 含 布 尔 操 作 AND , OR 和 NOT,这 些 操 作 形 成 了 电 子 计 算 机
中 使 用 的 电 路 的 基 础 。因 此 ,可 以 设 计 布 尔 公 式 来 模 拟 图 灵 机 这 一 事 实 毫 不 令 人 奇 怪 。细
节 在 于 这 种 思 想 的 实 现 上。
证 明 首 先 ,证 明 SAT 属 于 NP。非确定型多项式时间机器可以猜测给定的公式必的
一 个 赋 值 ,当 赋 值 满 足 0 时 接 受 。
下 面 ,从 NP 中 任 取 一 个 语 言 A ,证 明 A 多 项 式 时 间 可 归 约 到 SA 7\ 设 iV 是 在 时 间
W 内 判 定 A 的 非 确 定 型 图 灵 机 ,6 是 某 个 常 数。( 为 了 方 便 ,实 际 上 假 定 iV 在 时 间 W — 3
内 运 行 ,但 只 有 那 些 对 细 节 感 兴 趣 的 读 者 可 能 会 担 心 这 个 次 要 的 地 方 。) 下面的概念有助
于 描 述 该 归 约。
在 w 上 ,iV 的 对 应 画 面 (tableau ) 是 一 张 V XV 的 表 格 ,其 中 行 代 表 N 在 输 入 it,

-
上 的 一 个 计 算 分 支 的 格 局 ,如 图 7 8 所 示 。
为 了 方 便 ,以 后 假 定 每 一 个 格 局 都 以 符 号 # 开 始 和 结 束 ,这 样 画 面 的 第 一 列 和 最 后 一
列 都 是 # 号。画 面 的 第 一 行 是 N 在 w 上 的 起 始 格 局 ,每 一 行 都 根 据 iV 的 转 移 函 数 从 上 一
行 得 到 。如 果 画 面 的 某 一 行 是 接 受 格 局 ,则 称 该 画 面 为 接 受 的 (accepting )。
以 在 切 上 的 每 一 接 受 画 面 对 应 iV 在 w 上 的 一 个 计 算 分 支 。 所 以 判 定 iV 是 否 接 受 w
的 问 题 等 价 于 判 定 是 否 存 在 N 在 W 上 的 接 受 画 面 的 问 题。

该定理的另一种证明出现在 9.3 节 。
襄尸章时间复杂性 193

% w2 ... 起始格 M
第二个格局

窗口

第 M 个格局

图7 8 - 对 应 画 面 是 的 格 局 表

现在开始描述从 A 到 SAT 的多项式时间归约 / 。在输入 u;上 ,该归约产生一个公式


r
必。从描述 0 的变量开始 。设 和 分别是 IV 的状态集和带子字母表 。 令 0 = 0 厂
{ # }。对于每个介于 1 到
Q
V 之间的 f 和 j 以及 C 中 的 每 个 有 一 个 变 量 X:,,,,。
。。

-
(V
)2 个画面格子中的每一格称为一个单元 (cell )。第 行第 j 列的单元称为 cell[w ],
并且包含 C 中的一个符号 。 用 0 的变量表示单元中的内容 。 若 7,s 取值 1 ,则意味着

cell[z ,>] 包含 s。
现在设计彡,使得变量的一个满足赋值确实对应 N 在 w 上的一个接受画面 。公式多
是四部分的 AND 运算 :# cell A《Start A move A j>accept 依次描述每一部分。
^
如前面所述 ,开启变量:r ,,,,,对应于把符号 s 放进 cell[D]。 为了获得在赋值与画面
>

之间的对应 ,必须保证的第一件事是赋值为每个单元恰好开启一个变量 。公式 ell 确保这


一要求 ,它用布尔运算的语言来表达这一点 :
_ _
^
彡cell = A [( x ii ,;
,s ) 八( A ; )
,s V , )] •

^C S
^C
sU : “
符号 A 和 V 代表反复出现的 AND 和 OR 。例如 ,上面公式中的一部分
V 工 i ,j ,s
sec
是下式的缩写:
工 O C i,
j,s2 H 工i ,
j

S2 ,
其中 C = { si , …,5/ }。因此 , 实际上是一个长的表达式 ,它为画面中的每个单元包

-
含一个片段 ,因为纟和)从 1 变到 V 。每一片段的第 1 部分称在相应单元中至少一个变量
被开启 。每一片段的第 2 部分称在相应单元中至多一个变量被开启 ( 照字面意思就是说 ,
每一对变量中至少有一个被关闭 )。这些片段由 A 运算连接起来 。
&eU 在方括号中的第 1 部分规定 ,至少有一个与每个单元相关联的变量开启 ;而第 2
部分规定 ,对每个单元只有一个变量开启 。 满足彡 (从而也满足彡。 ) 的任何变量赋值必
定使得对每个单元恰好开启一个变量 。 于是 ,任何满足赋值都给表中的每个单元指定了一
个符号 。 ,fnove 和 eeept 等部分保证该表格确实是一个接受画面 ,如下 。 ^
公式一urn 保证表的第一行是 N 在 W 上的起始格局 ,它明确规定相应的变量是开启的:
= 工1 ,1 ,林 A 3Tl ,2 ,go A 工1 ,
3, A 工1,4 , 2 A ••• A 工 l ,n+2 , >n

^
* 《 U> tt

/\ 工 I l
_八 A 工l,
n* —1,l_l A 工l ,*
n ,林
194 第三部分复杂性理论

公式保证接受格局岀现在画面中。 它通过规定开启相应变量之一来确保 9accept


( 即表示接受状态的符号) 出现在画面的某一单元中 :

必accept — V

^
i , j ,q

最后 ,公式 fnove 保证画面的每一行都对应于从上一行的格局按照 N 的规则合法转移


得到的格局 。它通过确保每一个 2 X 3 窗口单元都是合法的来保证这一点 。 如果一个 2 X 3
的窗口不违反由 N 的转移函数指定的动作 ,则称该窗口是合法的 (legal )。换言之 ,如果
它可以岀现在从一个格局正确地转移到另一个格局的过程中 ,该窗口就称为合法的 。©
例如 ,设 a ,b ,c 是带子字母表的成员 ,% 和 % 是 IV 的状态 。假设在状态 % ,读写
头读取 a 时 ,JV 写一个 b ,仍在状态 % ,并且右移 。 在状态 % ,读写头读取 b 时 ,iV 非确
定地:
1. 写一个 c ,进入状态 % 并左移 ,或者
2. 写一个 a ,进入状态 % 并右移 。
形 式 地 表 示 为 5( % = ,b ,R )},S ( ql ,b ) = [7
{( % ,
C,L ),
(g2 ,a ,R )}。该机器的合法窗口的例 a c a a

-
子如图 7 9 所示 。
( a) (b) (c)

在图 7 - 9 中 ,窗口 (a )、( b ) 是合法的 ,因 a b %


为转移函数允许 iV 以指明的方式移动 。窗口 (c ) (0 ⑷ ⑷
是合法的 ,因为 % 出现在顶行的右边 ,我们不知
道读写头在什么符号上边 。 那个符号可能是 a ,
图 7 9 合法窗口示例 -
% 可以把它变为 b ,并且向右移 。这就有可能产生该窗口 ,所以它不违反 N 的规则。窗口
(d)显然是合法的 ,因为顶行与底行是相同的 ,当读写头与窗口的位置不相邻时就会出现
这种情况 。注意在合法窗口中 ,# 可以岀现在顶行和底行的左边或右边 。窗口 ( e ) 是合
法的 ,因为紧靠顶行的右边可能就是状态 % 读取符号 b ,然后左移使状态 % 岀现在底行
的右边 。最后 ,窗口 ( f ) 是合法的 ,因为状态 % 可能紧挨着顶行的左边 ,它把 b 变为 c ,
然后左移 。
-
图 7 10 所示的窗口对于机器 iV 不是合法的 。
在窗口 (a ) 中 ,顶行中间的符号不会改变 ,因 a a % b q2
为没有状态与它相邻 。窗口 ( b ) 不是合法的 ,因 ( a) (b) (c)
为转移函数指明 b 应变为 c 而不是 a 。窗口 ( c ) 不
图 7- 1 0 非法窗口示例
是合法的 ,因为在底行岀现了两个状态 。
如 果 画 面 的 顶 行 是 起 始 格 局 , 画 面 中 的 每 一 个 窗 口 都 是 合 法 的 ,那 么 画
面的每一行都是从上一行合法转移得到的格局。
为证明该断言,考虑画面中任何两个相邻格局 ,称为上格局和下格局。在上格局中 ,每
一个包含带子符号且不与状态符号相邻的单元都是某个窗口顶行的中间单元且窗口顶行不含
状态。因此该符号必定保持不变 ,出现在窗口的底行中间 ,即出现在底行格局的同一位置 。
窗口顶行的中间单元包含着状态符号 ,这就使相应的三个位置按照转移函数的要求一

在这里可以根据转移函数给出合法窗口 ( legal window ) 的精确定义 。但这么做是非常乏味的 ,而且使人从证


明主线上分散精力 。想要更精确定义的读者可以参考定理 5.11 ( 即波斯特对应问题) 的证明中的有关分析。
襄尸章时间复杂性 195

致 更 新 。 因 此 ,如 果 上 格 局 是 合 法 格 局 ,那 么 下 格 局 也 是 ,并 且 下 格 局 是 根 据 N 的 规 则
从 上 格 局 转 移 得 到 。 注 意 ,这 个 证 明 显 然 易 懂 ,但 它 的 关 键 依 赖 于 选 择 了 大 小 为 2 X 3 的
窗 口 ,如 问 题 7.2 6 所 说 明 的 。
现在转向 fnove 的 构 造 ,它 规 定 画 面 中 的 所 有 窗 口 都 是 合 法 的 。 每 个 窗 口 包 含 6 个 单
元 ,它 们 可 以 用 固 定 数 目 的 方 式 设 置 为 合 法 窗 口 。公 式 0 指 出 ,这 6 个 单 元 的 设 置 必 mQVe

须 是 这 几 种 方 式 之 一 ,即

A -
_ move (( D ) 窗 口 是 合 法 的 )
i< n A< j<n
^ \
)窗口顶部居中位置的是单元 [ , ] -

^_
位 于 (/ ,
) Z > 0 把 这 个 公 式 中 的 文 字 “( ) 窗口是合法
的” 替 换 为 下 面 的 公 式 ,把 窗 口 的 6 个 单 元 的 内 容 写 为 ,
…,叫

V ( 工 )- l , a

A ,a
2
A ,a
3
A 00i -\- J , j — l ,a 4 A \ , j ,a. 八 / + 1,
1,•
a6 )

是一个合法窗口

-
下 面 分 析 归 约 的 复 杂 性 ,证 明 它 在 多 项 式 时 间 内 完 成。为 此 考 察 的 大 小。首 先 ,估

^
计 一 下 它 的 变 量 的 数 目 。回 忆 一 下 ,画 面 是 一 个 表 格 ,所 以 它 包 含 〃
72 个 单 元 。每
个 单 元 有 与 它 相 关 联 的 Z 个 变 量 ,/ 是 C 中 符 号 的 数 目 。因 为 / 只 依 赖 于 图 灵 机 N ,而 不
依 赖 于 输 入 的 长 度〃,所 以 变 量 总 数 是 0( rz 2 M 。
估计一下彡的每个部分的大小。对 画 面 的 每 个 单 元 ,公 式 &ell 包 含 固 定 长 度 的 公 式 片
段 ,所 以 长 度 为 ou2& )。公 式 一tart 对 顶 行 的 每 个 单 元 包 含 一 个 片 段 ,所 以 长 度 为 o( v )。
公 式 釦。 和 cxept 对 画 面 的 每 个 单 元 包 含 固 定 长 度 的 公 式 片 段 , 所 以 它 们 的 长 度 为

Oin2 k ) 于 是 ,0 的 总 长 为 0(〃
0
〃)。该 结 果 完 全 符 合 目 标 ,因 为 它 说 明 # 的 长 度 是 /2 的 多
项 式 。如 果 长 度 超 过 了 多 项 式 关 系 ,那 么 该 归 约 将 不 可 能 在 多 项 式 时 间 内 生 成 它。( 实 际
上 我 们 少 估 了 一 个 CKlogn ) 因 子 ,因 为 每 个 变 量 的 下 标 可 以 达 到 V ,要 把 它 们 写 进 公 式
可 能 需 要 O( logn ) 个 符 号 。 但 是 这 个 外 加 的 因 子 不 改 变 结 果 的 多 项 式 特 性 。

为 看 出 能 在 多 项 式 时 间 内 生 成 该 公 式 ,注 意 它 的 高 度 重 复 性 。公 式 的 每 一 部 分 由 许 多
几 乎 相 同 的 片 段 组 成 ,只 是 在 下 标 上 有 简 单 的 变 化 。因 此 可 以 容 易 地 构 造 一 个 归 约 ,在 多
项式时间内从输人 w 生 成 0。 ■

这 样 就 完 成 了 库 克-列 文 定 理 的 证 明 ,证 明 SAT 是 NP 完 全 的 。 证 明 其 他 语 言 的 NP
完 全 性 通 常 不 需 要 这 样 长 的 证 明 。 NP 完 全 性 还 可 以 通 过 从 一 个 已 知 为 NP 完 全 的 语 言 出
发 的 多 项 式 时 间 归 约 来 证 明 。为 此 可 以 用 SAT,但 是 用 3SAT ( 即 在 定 理 7.2 6 之 前 定 义
的 SAT 的 特 殊 情 况 ) 通 常 更 加 容 易 。回 忆 一 下 ,3SAT 的 公 式 是 合 取 范 式 形 式 的 ,每 个
子 句 有 三 个 文 字 。首 先 ,必 须 证 明 3SAT 自 己 是 NP 完 全 的 。把 它 作 为 定 理 7 . 3 0 的 推 论
来 证 明。
⑹微册4 3SAT 是 NP 完全的。
证 明 显 然 3SA 丁 属 于 NP ,所 以 只 需 证 明 NP 中 的 所 有 语 言 都 在 多 项 式 时 间 内 归 约
到 3SAT。 为 证 明 这 一 点 ,一 种 方 法 是 证 明 SAT 多 项 式 时 间 归 约 到 3 SAT。这 里 改 用 另 一
种 方 法 ,修 改 定 理 7.3 0 的 证 明 ,使 得 它 直 接 产 生 每 个 子 句 有 三 个 文 字 的 合 取 范 式 形 式 的
公 式。
定 理 7.3 0 产 生 的 公 式 已 经 几 乎 是 合 取 范 式 形 式 的 了。公 式
每 个 子 公 式 包 含 一 个 大 析 取 以 及 析 取 的 大 合 取。因 此 、 &ell 是 子 公 式 的 大 合 取 ,
ell 是 子 句 的 合 取 ,已 经 是 cnf 形 式
196 第三部分复杂性理论

了。公式是变量的大合取 。 把每个变量看作长为 1 的子句 ,就能看出一urt 是 cnf 。公


式一MPt 是变量的大析取 ,因此是单个子句 。公式彡 是唯一一个还不是 cnf 的公式 ,但 mQve

是可以容易地把它转化为 cnf 形式的公式 ,如下所述 。


回忆一下 ,彡是子公式的大合取 ,每个子公式是合取的析取 ,描述了所有可能的合
法窗口 。 第 0 章描述的分配律指岀 ,可以把合取的析取替换为等价的析取的合取 。这么做
可能会极大地增加每个子公式的长度 ,但是知。 ve 的总长只可能增加常数倍 ,因为每个子

公式的长度只依赖于 iV。结果是合取范式形式的公式 。
现在已经把公式写成 cnf 形式了 ,再把它转化为每个子句拥有三个文字的形式 。在当
前拥有一个或两个文字的子句中 ,复制其中一个文字 ,使得文字总数达到 3。 在拥有超过
3 个文字的子句中 ,把它分裂为几个子句 ,额外添加一些变量来保持原公式的可满足性或
不可满足性 。
例如 ,把子句 ( V Vq ) ( 其中每个 a: 是一个文字 ) 替换为两个子句的表达
V
(

^^^
式 ( 2iV 22 V 20 A O V a 3 V a 4 ),其中 Z 是新变元 。 如果 h 的某种赋值满足原来的子句 ,
<

则可以找到 Z 的某种赋值 ,使得这两个新子句被满足 ,反之亦然 。一般地说 ,如果子句包


含 / 个文字 ,如
( a\ V <22 V … V a / )
则可以用 Z — 2 个子句替换它 ,如
( ai V a2 V ) A ( ^1 V <23 V 2:2 ) A (X 2 V <24 V 之3 ) 八 … 八 ( 之卜3 V at - x M at )
容易验证 ,新公式是可满足的当且仅当原来的公式是可满足的 ,证毕 。

7.5 几 个 NP 完全问题
NP 完全性现象是很广泛的 ,众多领域中都有 NP 完全问题 。由于某些没有被深人认
识的原因 ,多数自然出现的 NP 问题不是 P 类就是 NP 完全的 。如果在为一个新的 NP 问
题寻找多项式时间算法 ,付出部分精力尝试证明它是 NP 完全的是一种明智的做法 ,因为
这样可以防止去寻找一个并不存在的多项式时间算法 。
本节再给出几个定理 ,证明几个不同的语言是 NP 完全的 。这些定理为同类问题的证
明技巧提供了示例 。一般策略是给出从 3SAT 到该语言的多项式时间归约 ,如果更加方便
的话 ,有时也从其他 NP 完全语言归约。
在构造从 3SAT 到一个语言的多项式时间归约时 ,我们寻找这个语言中能模拟布尔公
式的变量和子句的结构 ,这种结构有时称为构件 (gadget )。 例如 ,在定理 7.26 中给岀的

从 3SAT 到 CLJQl/f 的归约中 ,结点模拟变量 ,结点的三元组模拟子句。一个具体的结
点可以是也可以不是团的成员 ,这对应于一个变量在满足赋值中可以是真 ,也可以不是
真 。每个子句必须包含赋值为真的文字 。相应地 ,每个三元组必须包含团的一个结点 (团
要达到规定的大小)。下面是定理 7.26 的推论 ,说明 CLJQ17E 是 NP 完全的 。
CLIQUE A NP 完全的。

7.5. 1 顶点覆盖问题
若 G 是无向图 ,则 G 的顶点覆盖 ( vertex cover ) 是结点的一个子集 ,使得 G 的每条边-
都与子集中的结点之一相关联。顶点覆盖问题旨在确定图中是否存在指定规模的顶点覆盖 :
第 7章 时 间 复 杂 性 197

{ G,
VEi? TEX-COVEi? = 〈 々〉| G 是 具 有 々 个 结 点 的 顶 点 覆 盖 的 无 向 图 }
VERTEX -COVER 是 NP 完全的 。

^
证 明 思 路 要 证 明 Vf TEX- COVEi? 是 NP 完全的 ,必须证明它属于 NP 且 NP 中的
所有问题都能多项式时间归约到它 。 第 一 部 分 较 容 易 :证 书 就 是 一 个 规 模 为 々 的 顶 点 覆
盖 。通 过 证 明 3SAT 多 项 式 时 间 可 归 约 到 VERTEX-COVER 来 证 明 第 二 部 分 。 该 归 约 将
# 转换为一个图 G 和数值々,且 只 要 G 中有々个结点的顶点覆盖 ,0 就 能 够
一 个 3 cnf 公 式
被满足 。 转换是在不知道 0 能否被满足的情况下完成的 。 实际上 ,G 模拟了彡。该 图 包 含
着构件 、 模拟公式中的变量和子句 。 设计这些构件需要一点独出心裁的巧思 。
对于变量构件 ,在 G 中寻找一种结构 ,它以两种可能的方式之一参与到顶点覆盖中 ,
正好对应变量的两种可能的真实赋值 。变量构件包含两个被一条边连接的结点 。 这种结构
之 所 以 有 效 是 因 为 两 个 结 点 之 一 一 定 会 出 现 在 顶 点 覆 盖 中。 任 意 地 将 两 个 结 点 分 别 与
TRUE 和 FALSE 关联起来 。
对 于 子 句 构 件 ,要 寻 找 这 样 的 结 构 :它 使 得 顶 点 覆 盖 所 包 含 的 变 量 构 件 结 点 中 ,
至 少 有 一 个 结 点 对 应 着 该 子 句 中 至 少 一 个 取 值 为 真 的 文 字 。这 个 构 件 包 含 三 个 结 点 及
它们相连的边 ,这 样 任 何 一 个 顶 点 覆 盖 都 一 定 会 包 含 它 的 至 少 两 个 结 点 ,或 者 是 全 部
三 个 结 点 。 如果构件结点中的一个只是有助于覆盖仅仅一条边 ,则 顶 点 覆 盖 中 只 需 包
括 另 外 两 个 结 点 ,也 就 是 对 应 的 文 字 满 足 了 该 子 句 的 情 况 。 否 则 , 三 个 结 点 都 必 须 覆
盖 。 最 后 ,选择丨值使得找到的顶点覆盖一个结点对应一个变量构件 ,两 个 结 点 对 应
一个子句构件 。
: :- :
证 明 这 里 给 出 一 个 从 3SAT 到 Vf i? Tf X COVf R 的在多项式时间内运算的归约的
细节内容 ,该归约把布尔公式 # 映射为一个图 G 和值々。对于彡中的每个变量 x ,产生一
条连接着两个结点的边 。把这个构件中的两个结点标记为:r 和I。把:r 赋值为 TRUE 对应
于顶点覆盖选择该边的左结点 ,而赋值为 FALSE 对应于标记为无的结点 。
对应于子句的构件稍有点复杂 。每个子句的构件是用该子句的三个文字标记的结点组
成的三元组 。这三个结点互相连接 ,并且与变量构件中具有相同标记的结点相连接 。因 此
出 现 在 G 中的结点总数是 2 m + 3 Z ,其 中 # 有 m 个变量和 Z 个子句。令々等于 m + 2 Z。
例如 ,若 (f>= ( x\ Vxi V 工2 ) 八 ( xTV J F V A ( x T V n V A ),归约从必产生 〈G ,是 〉,
-
这里々= 8 , G 的形状如图 7 11 所 示 。

Xi A X2

_ ^
*2
2

^
图 7 11 归 约 从 必 =(:
Ci V 2:
* 1 Vl2 )八 八( TV T2 \/ 工2 )
* 产生的图

为证明该归约满足要求 ,需要证明彡可满足当且仅当 G 有々个结点的顶点覆盖 。从 一


个满足赋值开始 ,首先把变量构件中对应于赋值中真文字的结点放入顶点覆盖中 。 然 后 ,
在每个子句中挑选一个真文字 ,把每个子句构件中剩下的两个结点放入顶点覆盖中 ,现 在
198 第三部分复杂性理论

共 有 6 个 结 点 。它 们 覆 盖 所 有 边 ,因 为 显 然 每 个 变 量 构 件 的 边 被 覆 盖 了 ,在 每 个 子 句 构 件
中 的 所 有 三 条 边 也 被 覆 盖 了 ,所 有 介 于 变 量 构 件 和 子 句 构 件 之 间 的 边 也 被 覆 盖 了 。所 以 G
有 k 个 结 点 的 顶 点 覆 盖。
其 次 ,如 果 G 有 A 个 结 点 的 顶 点 覆 盖 ,通 过 构 造 满 足 赋 值 来 证 明 0 是 可 满 足 的 。为 了
覆 盖 变 量 构 件 的 边 和 子 句 构 件 的 三 条 边 ,顶 点 覆 盖 必 须 包 含 每 个 变 量 构 件 的 一 个 结 点 以 及
每 个 子 句 构 件 的 两 个 结 点 。这 就 占 用 了 全 部 顶 点 覆 盖 的 结 点 ,没 有 剩 余 的 份 额 。选 取 变 量
构 件 中 在 顶 点 覆 盖 中 的 结 点 ,把 相 应 的 文 字 赋 值 为 真 。这 个 赋 值 满 足 一 因 为 连 接 变 量 构
件 和 每 个 子 句 构 件 的 三 条 边 都 被 覆 盖 了 ,而 子 句 构 件 中 只 有 两 个 结 点 在 顶 点 覆 盖 中 ,所 以
其 中 一 条 边 必 定 被 变 量 构 件 中 的 一 个 结 点 覆 盖 ,因 此 赋 值 满 足 相 应 的 子 句。 ■

7 . 5.2 哈密顿路径问题
回 忆 一 下 ,哈 密 顿 路 径 问 题 是 问 输 入 图 是 否 包 含 从 5 到〖 恰 好 经 过 每 个 结 点 一 次 的
路 径。
是 NP 完 全 的 。
证 明 思 路 在 7.3 节 已 经 证 明 了 HAMPATH 属 于 NP 的 。 为 证 每 个 NP 问 题 多 项 式
时 间 可 归 约 到 HAMPATH ,我 们 证 明 3SAT 多 项 式 时 间 可 归 约 到 HAMPATH 。 给 出 一
种 方 法 ,把 3 cnf 公 式 转 化 为 图 ,使 得 图 中 的 哈 密 顿 路 径 对 应 于 公 式 的 满 足 赋 值 。图 中 包
含 模 拟 变 量 和 子 句 的 构 件 。变 量 构 件 是 一 个 钻 石 结 构 ,可 以 两 种 方 式 之 一 经 过 ,对 应 于 两
种 真 值 赋 值 。子 句 构 件 是 一 个 结 点 ,保 证 路 径 经 过 每 个 子 句 构 件 对 应 于 保 证 在 满 足 赋 值 中
每 个 子 句 都 被 满 足。
证明 前 面 已 经 证 明 H A M P A T H 属 于 NP , 还 需 要 做 的 就 是 证 明 3SA 丁
心H A M P A T H 对 于 每 个 3 cnf 公 式 一 我 们 说 明 怎 样 构 造 一 个 包 含 两 个 结 点 s 和 i 的 有
0

向 图 G ,使 得 s 和〖 之 间 存 在 哈 密 顿 路 径 当 且 仅 当 # 可 满 足 。
从 包 含 々 个 子 句 的 3 cnf 公式彡开始构造 :

^
必 = ( q V 心 V Q ) 八 U 2 V 62 V c2 ) 八 … 八 Q V Vck)
其 中 每 个 a ,6,c 是 文 字 Xi 或:Ci 。设 ,
…, 是 0 的 / 个 变 量 。
现在说明怎样把 # 转 化 为 图 G 。构 造 的 图 G 使 用 不 同 的 部 分 表 示 出 现 在 4 中的变量和
子 句。
把每个变量 A -
表 示 为 一 个 包 含 一 行 水 平 结 点 的 钻 石 形 结 构 ,如 图 7 1 2 所 示 。随 后 说 明
水 平 行 包 含 的 结 点 数。
把多的每个子句表示为单个结点 ,如 图 7 - 1 3 所 示 。

O Cj

-
图7 12 变 量:r, 表示为一个钻石形结构 图7 13 - ,
把 子 句 c 表示为结点
第 7章 时 间 复 杂 性 199

-
图 7 14 描绘了 G 的全局结构 。除了表示变量与子句 (它包含着这些变量) 关系的边没
有画出以外 ,它展示了 G 的所有元素及其相互关系。
下面说明怎样把代表变量的钻石与代表子句
的结点连接起来 。 每个钻石结构都包含一行水平
O
结点 ,它们由两个方向的边连接起来 。 在水平行
上除了钻石两端的两个结点以外 ,还包含 3 A + 1 O C2

个结点。这些结点被分成相邻的对 ,每个子句一 Oq
对 ,并且用另外的结点把这些结点对分隔开 ,如
-
图 7 15 所示 。
如果变量 A 岀现在子句 c,中 ,则把图 7 16 - O
所示两条从第 f 个钻石的第 )对结点到第 )个子
句结点的边添加进去 。
如果 I出现在子句 q 中 ,则把图 7 17 所示-
两条从第 i 个钻石的第 )对结点到第 )个子句结
点的边添加进去 。 _

^
把每一子句中出现的每个 或 7所对应的边 Xi

都添加进去以后 ,G 的构造就完成了。为了说明
这种构造满足要求 ,我们断言 ,如果彡是可满足
的 ,则从 s 到 〖 存在哈密顿路径 ;反之 ,如果存
^ 图 7- 1 4 G 的高层结构
在这样的路径 ,则 # 是可满足的。

图 7- 1 5 在钻石结构中的水平结点 图 7- 1 6 当子句 Cy 包含!, 时添加的边




假设 0 是可满足的。为了展示从 s 到 〖 的哈密顿路径 ,首先忽略子句结点。路径从 S 开


始 ,依次经过每个钻石 ,到 〖 终止 。 为了经过钻石中的水平结点 ,该路径从左到右 (左 右 -
-
式),或者从右到左 (右 左式 ) 曲折前进 ,由彡的满足赋值决定是哪一种方式 。 如果 A
-
赋值为 TRUE ,就以左 右式通过相应的钻石 。 如果 X: 赋值为 FALSE ,就以右 左式 。 -
-
图 7 18 展示了这两种可能 。

zig-zag zag-zig

-
图 7 17 当 子 句 q 包含JT ,时添加的边 -
图 7 18 -
左 右式和右-左式通过钻石,由满足赋值决定
200 第三部分复杂性理论

迄今为止 ,该路径覆盖了 G 中除子句结点以外的所有结点 。通过在水平结点上增加迂


回路 ,可以轻易地把子句结点纳入路径中。 在每个子句中 ,选择一个被满足赋值赋为
TRUE 的文字 。
如果在子句 0 中选择: ,就能在第 ;
个钻石的第)对结点上绕行 。可以这样做是因为
A
许绕行并返回 。 ^
必定是 TRUE ,该路径从左到右通过相应的钻石 。所以连到结点

类似地 ,如果在子句 o 中选择了石,就能在第 ;


个钻石的第 )对结点上绕行 ,因为
o 的边的次序正好允


定是 FALSE,该路径从右到左通过相应的钻石。所以连到结点 o 的边的次序正好也允许绕
行并返回。( 注意 ,子句中的每个真文字都给经过子句结点的绕行提供了一种选择。结果是 ,
如果子句中有几个文字为真 ,则只选取一条迂回路。
) 这样就构造好了所需的哈密顿路径 。
^
对于相反方向的证明 ,若 G 有一条从 s 到 〖 的哈密顿路径 ,给出一个 0 的满足赋值 。
若该哈密顿路径是正规的 ,即除了到子句结点的绕行以外 ,它从上到下依次通过每个钻
-
石 ,则容易获得满足赋值 。 若它以左 右式通过钻石 ,则把相应变量赋为 TRUE; 若是右 -
左式 ,则赋为 FALSE。因为每个子句结点都出现在路径上 ,通过观察经过它的迂回路线
的情况 ,可以确定相应的子句中哪个文字为 TRUE。
现在还需证明的就是哈密顿路径肯定是正规的 。违反正
规性的唯一途径是路径从一个钻石进入子句结点 ,却返回到
另一个钻石 ,如图 7 19 所示 。 -
路径从结点 到 c ,但是没有返回到同一钻石的化 ,而

^
是返回到不同钻石的心 。若是这样 ,则
隔结点 。如果 a 2 是分隔结点 ,则进人
^
或者幻必定是分
的边只能来自 和
a 3 。如果以是分隔结点 ,则
进入的边只能来自
径都不可能包含结点 a 2 。它不可能从 c 或
ci \

^ ^ ^
和化在同一子句对中 ,因此
az 和 c。 在这两种情况下 ,该路
进入心 ,因为
它从这两个结点出发通向别的地方去了。它也不可能从心
^
进人心 ,因为化是唯一仅存的化所瞄向的结点 ,它退出化后必须经过心 。所以哈密顿
路径一定是正规的 。该归约显然在多项式时间内运算 ,证毕 。
-
图 7 19 这种情况不可能发生

下面考虑一种无向的哈密顿路径问题 ,称为 UHAMPATTf 。为了证明 UHAMPATH


是 NP 完全的 ,给出从有向的哈密顿路径问题出发的多项式时间归约 。
U HAM PATH 是 NP 完 全 的 。
证明对于包含结点 s 和〖 的有向图 G ,归 约 构 造 包 含 结 点 / 和 的 无 向 图 图 G
, ,
有从 s 到〖 的哈密顿路径当且仅当 C 有从 / 到 的哈密顿路径 。描述 G 如下 。


除了 s 和〖 以外 ,G 的每个结点 M 被替换为 G'的 三 个 结 点 , mid ,M°
的结点严t = / 和 沪 = 人
ut
。G 的结点 5 和 Z

" ^
被替换为 G 有两种类型的边 。首先有连接 wmid 与一以及 《 与
ut
的 边 ,则 与
w°的边 。其次 ,如果 G 中有从 w 到 I; t/n 有边相连 。这就完成了 的构造 。
通过证明 G 有 从 6 到 的 哈 密 顿 路 径 当 且 仅 当 0'有 从 到 沪 的 哈 密 顿 路 径 ,可 以 说
明这种构造满足要求 。为证明一个方向 ,注意到 G 中的哈密顿路径 P
S j U\ j ll2 J ••• ,
Uk yt
在 G 中有一条对应的哈密顿路径 p : /
第 7章 时 间 复 杂 性 201

M; ,
mid
M i ,U 2 ,
in mid
…,
, out
Mlin ,
out
5out ,
M2 t
为证明另一个方向 ,我们断言以中的任何从到沪的哈密顿路径都如同刚刚描述的
路径〆那样 ,必定是从结点的一个三元组通向另一个三元组 ,起始与结束的地方除外 。
这就将完成本证明 ,因为这样的路径在 G 中都有对应的哈密顿路径 。通过从结点 Put 出发 ,
跟踪该路径来证明本断言 。注意到路径上的下一个结点必定是 # ( 对某个 0 ,因为只有那
些结点与 S° Ut
相连 。再下一个结点必定是 Olid ,因为在哈密顿路径中 ,其他方式都不能包括
rd 。在 mid 以后是 WUt ,因为这是连接到的另一个唯一的结点。再下一个结点必定是
UT ),因为没有别的结点可以连接到 w?ut 。重复这种推理直到到达严为止。
( 对某个 ) ■

7 . 5. 3 子集和问题
回忆定理 7.21 中定义的 SUBSET SUM 问题 。在该问题中 ,有一个数集 - ,••• , X k 和 X\

一个目标数 h 要判定该数集是否包含一个加起来等于〖 的子集 。现在证明该问题是 NP 完


全的。
SUBSET- SUM 是 NP 完 全 的 。
证 明 思 路 定 理 7.21 中已经证明了 St/BS£ T S(7M 属于 NP。 通过把 NP 完全语言 -
3SAT 归约到它来证明 NP 中的所有语言都多项式时间可归约到 SUBSET SUM 。给定一 -
-
个 3 cnf 公式彡,构造问题 SUBSET SUM 的一个实例 ,使其包含加起来等于目标 〖 的子集
当且仅当 0 可满足 。该子集称为 T。 :
为了获得此归约 ,寻找 SUBSET SUM 问题的结构来表示变量和子句。 我们构造的 -
SUBSET-SUM 问题的实例包含以十进制表示的很大的数 。用数对来表示变量 ,用数的十
进制表示的某些位来表示子句 。
用两个数 M 和 来表示变量证明对于每个 或是 必 定 在 了 中 ,以 此 建 立

^ ^

起在满足赋值中 A 的真值的编码 。
每个子句位置包含目标〖 中的某一值 ,这就对子集了提出一定的要求 。证明这种要求
与相应子句中的要求是一致的 ,即要求该子句的文字 1 2 3 4 ck
yi 1 0 0 0 0 0 0
之一赋值为 TRUE。 0 0
1 0 0 0 0 0
-
证 明 已 知 Sl7BS£T SL/M e N P ,所以现在来证

^
1 0 0 0 0 0
1 0 0 0 0 0
-

^
明 SSAT SLTBSET SUM 。 少3 1 0 0 0
Z3 1 0 0 0 0
设必是一个布尔公式 ,其变量是 :
n ,… , ,子句

"
C 。归 约 把 # 转 化 为 SUBSET-St/M 问题的
一个实例 ( S ,
••• j C k

t ),其中 S 的元素和数 是图 7 - 20 中以
通常的十进制记法表示的行 。双线上面的行标记为
〖 ^ h
A
y, 0
0
0
0
0
0
0
0
h 0 0
:y 2 ,2 , , 2:
:y/ , gl ,
/ll ,
g2 ,2 ,
…, ,

^
:yi ,
之i , /和••• h 0

^

2

它们组成 s 的元素 。双线下面的行是 L


K 0

于是 ,对应于 的每个变量 : Tf ,S 包含一对数 A

^
和 这 些 数 的 十 进 制 表 示 分 为 两 部 分 ,如 图 7 2 0 所 - gk
K
示 。 左边部分由 1 和随后的 Z —〖 个 0 组成 。右边部分 3 3 3
对应于每个子句有一位数字 ,当子句 q 包 含 文 字 时 图 7 - 20 从 3SA 丁 到
yi c 包 含 文 字A 时 q 在 q 列 为
在 q 列 为 1; 当 子 句 ; SUBSET- SUM 的 归 约
202 第三部分复杂性理论

1 。 未指明为 1 的位都是 0 。
-
图 7 20 根据样例子句 Cl ,C 2 和 填写了一部分 :

另外 ,s 对于每个子句 C,包含一对数 A ,
( XI

^
V 石 Vx3 ) A ( X2 V :
C3 V …)八 … 八(石 V … V …)

这 两 个 数 相 等 ,由 1 和 随 后 的

^

一)个 0
组 成。
最后 ,目标数〖 ( 即表的底行) 由 z 个 1 和随后的々个 3 组成。
接下来 ,说明这种构造为什么能满足要求 ,证明 # 可满足当且仅当 s 的某个子集加起
来等于
“ 4 可满足 ,如下构造 S 的子集 。在满足赋值中 ,如果:, 赋值 TRUE,则选择 %;
假设 T

如果:r , 赋值 FALSE,则选择 z:。如果把已经选择的数加起来 ,则头 Z 位的每一位都是 1 ,


因为对每个 〖 都选择了 % 或 者 而 且 ,后 々 位 的 每 一 位 都 介 于 1 和 3 之 间 ,因 为 每 个 子
句都被满足 ,所以包含 1 3 个真文字 。进一步选择足够的 g 和 /1 ,使得后 A 位的每一位都
加到 3 , 从而达到目标值 。
设 S 的一个子集加起来等于 ,构造一个彡的满足赋值 。 , 在注意观察之后 首先 S

中的成员的所有位都是 0 或 1。其次 ,表中描述 S 的每一列最多包含五个 1。因此当 S 的
某个子集相加时 ,不会有到下一列的进位 。为了在头 Z 列的每一列都得到 1 ,子集对每个 ;
都必须包含 % 或者 Z i ,但又不能同时包含二者。
现在构造满足赋值 。如果子集包含 % ,就赋:r , 为 TRUE ,否则赋它为 FALSE。该赋
值肯定满足一因为后 & 列的每一列之和总是 3。在 o 列 ,幻 和 幻 最 多 提 供 2 , 所 以 子 集
中的% 或者 在 该 列 必 须 至 少 提 供 1。如 果 是 > ,那 么 :
r: 出 现 在 q 中 而 且 赋 值 为
TRUE , 所 以 c,被满足 。如果是☆ ,那么万岀现在 q 中而且 A 赋为 FALSE,所以 q 也
被满足 。因此彡被满足 。
最后 ,必须保证该归约可以在多项式时间内完成 。表的尺寸大约是 ( k + l ) 2 9 每一格
的内容都可以从任何 0 中轻易地计算岀来 。所以全部时间是 0( n 2 ) 个 简 单 步 骤 。 ■

练习
7.1 下面各项是真是假?
a. 2 n = Oin') b. n2 = 0 ( n )
Ac. n 2
= Oin\ og 2 n) Ad. n\ogn = 0 ( n2 )
n
e. 3 n = 20( n) f . 22 = 0( 22”)
7.2 下面各项是真是假?
a. n = o ( 2 n ) b. 2 n = o ( nz )
Ac. 271 = 0 ( 3 Ad. l = o( w )

e. 72 = o ( logw ) f . l = o( l / n )
7.3 下面哪一对数是互素的? 写出求得结论的演算过程 。
a. 1274 和 10 505 b. 7289 和 8029
baba 和下面的文法 CFG G ,试填写定理 7.14 中识别上下文无关语言的多项式时间


7.4 对于字符串
算法中所描绘的表 :
S RT
R-* TR
| a
T -^ TR|b
第 /章 时 间 复 杂 性 203

7.5 下面的公式是可满足的吗?
i x \J y) M x \J y ) M x \J y ) M x M y)
7.6 证 明 P 在并 、连接和补运算下封闭 。
7.7 证 明 NP 在并和连接运算下封闭 。
7.8 : ::
令 C OiViV £ CT£ D = 〈 |G 是连通的无向图 }。分析 3.3.2 节给出的算法 ,证明此语言属于 P。
{ G〉
7.9 无向图中的三角形 ( triangle ) 是一个 3 团 。证明
- :
n? JANGLf:
e P,其中 T尺 MiVGL£=〈
{ G >丨G
包含一个三角形 }。
7.1 0 证明 ALLDFA 属于 P。
7.11 分析你的算法的时间复杂度 。
a. 证明 EQDFA P。
b. 对语言 A ,如果 A = A * ,则称 A 是星闭的 (star- dosed )。给出测试一个 DFA 是否识别一个
星闭的语言的多项式时间算法 。(注意 :EQNFA 属于 P 并未知晓 。

7.12 若 图 G 的结点重新排序后 ,G 可以变得与 H 完全相同 ,则称 G 与 H 是同构的 (isomorphic)。令
〈6,
/5 0={ 付|> 6和 H 是同构的图 }。 证明 JSOGNP。

问题
.

^
*
7 13 这 是 个 研 究 化 简 ( resolution ) 的问题 。化简是证明 cnf 公式不可满足性的一种方法 。 令 0 =( 八
C2 八… ACm 是一个 cnf 公式 ,C: 是其子句 。令 C = { Ci|C, 是多的子句丨。每一步化简都在 C 中
取两个子句 Ca* C6 , 它们有相同的变量:r ,在一个子句中为 ,另一个中为无。例如 Ca = (:rV X

y d y 2 \/ y k m C b = h\J Z l \J z 2 \J … \J Zl ),其中 :
y 和 都 是 文 字 。我 们 构 成 一 个 新 的 子 句
:

(% V:
y 2 V … V W V Q V z 2 V … V A ) 并去掉重复的文字 。 将新的子句添加进 C 中 。重复化简步
骤 ,直到不再有新的子句产生 。如果 C 中有空子句 (),则说明 # 是不可满足的 。
如果该化简方法不会将可满足的公式误判为不可满足的 ,则称其为正确的 ( sound )。如果
该化简方法一定会将不可满足的公式判为不可满足的 ,则称其为完备的 (complete )。
a. 证明该化简方法是正确且完备的。
b. 使用 (a ) 部 分 证 明 2SA 丁6 P。
7.14 证 明 P 在同态下封闭当且仅当 P = NP。
^7 . 1 5
*
设 AG 1 * 是任意一元语言 。证明 :若 A 是 NP 完全的 ,那么 P = NP。(提示 :考虑从 SAT 到 A
的多项式时间归约 /。对公式一令和loo 为 将 # 中 变 量 X\ , X 2 * X3 和 x4 分 别 置 为 0 ,1,0 和 0
后的归约公式 。 对指数多个归约公式运用 / 会发生怎样的情况 ?

7.16 在有向图中 ,一个结点的入度 ( indegree ) 为所有射人边的总数 ,出度 ( outdegree ) 为 所 有 射 出 边
的总数。证明如下问题是 NP 完全的 。给定一个无向图 G 和一个 G 结点的子集 C,是否可以通过给
G 的每条边赋予方向 ,将 G 转换为一个有向图并且满足属于 C 的结点的人度或出度为 0 , 不属于 C
的结点的人度至少为 1?
7.17 如果一个正则表达式不含 * 运算 ,则称为无 * 的 (star- free)。令 EQSF_ REX = { < 尺 ,
S〉|尺和 S 是等
价的无 * 正则表达式 }。证明 EQSF- REX 在 coNP 中 。为何这个证明不能用于通常的正则表达式?
.
7 18 差层次 ( difference hierarchy) D, P 递归定义如下:
a.D】 P = NP。

b.D,P ={ A|A = B\ C, C 属于 D, /}。(这里 B\C = B f ] C )


B 属于 NP,
-
_ _
0

例如 ,D2 P 中的一个语言是两个 NP 语言的差 。有时 D2 P 称为 DP ( 也可以写成 D15 )。令


Z = { ( Gi jk \ ,G2 jkz ) \ G\ 有 是 1 团 且 G 2 没 有 是2 团}
证明 Z 对 DP 是完全的 。换言之 ,证明 Z 在 DP 中且 DP 中的每个语言多项式时间可归约到 2。
*
7.19 令 MAX-CUQUE ={ <G,
0|G 中最大团的大小恰好为幻 。利用问题 7.18 的结果证明 MAX-CLIQUE
204 第三部分复杂性理论


是 DP 完全的 。
*
7.2 0 令 /: N N 为任意 /( w )= 0( 7z logrz ) 的函数 。证明 TIME( /( TO ) 中只含有正则语言。
7.21 如果两个布尔公式有相同的变 M 集且有同样的满足赋值集 ( 就是说它们描述了同样的布尔功
能 ),则称它们等价 (equivalent)。最小布尔公式是指没有比它更短的等价公式 。 令 MIN FOR - -
-
MLTLA 是最新布尔公式集 。证明 :如果 P = NP , 则 MJN FO尺 ML7LA 6 P。
7.22 修改定理 7.14 的证明中识别上下文无关语言的算法 ,给出一个多项式时间算法 ,使它在输入一
个字符串和一个 CFG 时 ,若该文法生成该字符串 ,则它能产生该字符串的语法分析树 。
7.23 对于一个含有 m 个变量及 c 个子句的 cnf 公式 ,证明可在多项式时间内构造一个有 O ( cm ) 个状
态的 NFA ,它接受所有用长度为 m 的布尔串表示的不满足赋值 。 得出结论 : 最小化 NFA 的问
题无法在多项式时间内解决 ,除非 P = NP。
2cnf 公式是子句的 AND , 其中每个子句是至多两个文字的 OR。 令 2SAT= {〈 0〉

^
*
7.24 丨 是可满足的
2cnf 公式 }。证明 2SAT 6 P。
*
7.25 考虑下面的算法 MJiVJMLZE,以 D F A M 为输人 ,输出 DFAiVT:
MINIMIZE “对输入〈 M〉,其中旭=( 0,2 ,
占, : 。
八) 是 DFA:
9 ,
^
1. 把 M 的从起始状态出发不可达的状态全部删除 。
2. 以 M 的状态为结点 ,构造下面的无向图 G。
3. 在 G 中的每一个接受状态和每一个非接受状态之间连一条边 。另外如下添加补充的边 。
4. 反复执行下面的步骤 ,直到 G 中无新边加入为止 :
5. 对于 M 中每一对不同的状态 g 和 r 以及每一个 a 6 2:
6.
7. 对于每个状态
.
如果 (扒
…… 幻 ,dir,a )) 是 G 的一条边 ,就把边
令 [g] 代表状态的集合 :[d ={ rGQk 和 r 在 G 中无边相连 }。
/ =(0M〆,glA'), 其 中
r) 加人 G 中 。

(若 M =[r], 则 V 中只
8 形成一个新的 DFAA
保留其中一个 );对每个 ?6 Q 和 斤 2 有 y( M ,

^
( a )]; 9 o =[90 ]» A'={[9]k 6 A }。
a )=[ , (

9. 输出〈iVT > 。

a. 证明 M 与 iVT 等价 。
b. 证明 M'极小 ,即没有更少状态的 DFA 能识别同样的语言。可以无须证明就使用问题 1.48 的
结果 。
c. 证 明 在 多 项 式 时 间 内 运 行 。
7.26 -
在库克 列文定理的证明中 ,定义窗口为单元的 2 X 3 矩形 。 说明如果换用 2 X 2 的窗口 ,为什么
会使证明失效 。
.
7 27 这个问题来源于单人游戏 “扫雷”,并归结到图 。令 G 是一个无向图 ,它的每个结点要么有一个
隐藏的雷 ,要么是空的 。游戏者一个一个地选择结点 。如果游戏者选择了有雷的结点 ,则失败 。
如果选择了一个空结点 ,则可以知道该结点的相邻结点中共有多少雷。( 相邻结点即同该结点有
) 如果所有的空结点都被选中了,则游戏者获胜 。
边相连接的结点。
水 (地 ) 雷相连问题是一个图 ,图中的有些结点上标记了数字 。标记了数字 m 的结点 I;表
示它的相邻结点中有 m 个有雷 ,我们可以据此判定其他结点中是否有雷 。 将此问题形式化为一
个语言 ,并证明它是 NP 完全的 。

_
A7 .28 在宝石游戏中 ,有一个 mXw 格的棋盘 。在它的 m2 个格子中 ,每个位置要么放蓝色棋子 ,要么
放红色棋子 ,要么什么也不放 。通过去掉棋子使得每一列都只有一种颜色的棋子,每一行都至
少有一个棋子 ,达到此目标则获胜 。是否能够获胜取决于初始布局。令 SOLrTA 伙E = {〈 G|
〉G
:为 NP 完全的。

^
为可获胜的游戏布局 }。证明 SOLJTAJi
7.29 :- /了77从;{ 5 ,0 0= {(: (:
, , * } 是由 S 的某些子集组成的集

^
令 5 丁 5/ =〈 |5 是一个有穷集 , 1 "

合 ,纟
〉 0 , 使得 S 的元素可以被染为红色或蓝色 ,而且对所有 C,,C: 中的元素不会被染成同一

-
种颜色 }。证明 SET SFLrmiVG 是 NP 完全的 。
襄尸章时间复杂性 205

7.30 思考下述计划安排问题 。有一份期末考试清单 & , ,FA 需要安排时间 ,学生清单 & ,… ,S,。


每个学生都选择了这些考试的某个子集 。必须将这些考试安排到各时段中 ,使得同一时段中不
会有某个学生同时需要参加两门考试。试问 ,如果只用 /i 个时段 ,是否存在合乎要求的计划 。
将这个问题形式化为一个语言 ,并证明它是 NP 完全的 。
7.31
-
回忆一下 ,在关于丘奇 图灵论题的讨论中 ,介 绍 了 语 言 乃 二 以 户〉!/) 是有一个整数根的多变量
多项式 }。称 D 是不可判定的 ,但没有给出证明 。 在本问题中要证明 D 的另一个性质 ,即 D 是
NP 难 ( NP- hard ) 的 。一个问题是 NP 难的 ,如果 NP 中的所有问题都多项式时间可归约到它 ,
虽然它自己可能不在 NP 中 。 必须证明 NP 中的所有问题都多项式时间可归约到 D。
.
7 32 如果图 G 中有某个结点子集 ,其他结点都至少与该子集中的某一结点相邻 ,则该子集称为支配
集 (dominating set )。令
{ G,
DOMJjVA 77 NOSFT = 〈 々〉|G 有一个包含々个结点的支配集 }

-
通 过 从 问 题 归 约 到 此 问 题 来 证 明 它 是 NP 完全的 。
*
7.33 证明下述问题是 NP 完 全 的 。 设 有 状 态 集 以 及 配 对 组 合 集 {( 5 1 ,n ), ,
( sk ,r k )}, 1 } 上的不重复的字串 ,r, 是 Q 的成员 (可以重复)。 判定是否存在
其中 & 是 2 = { 0 ,
一个 DFAAf =( Q,
HgQ , F),对每个 ; 5,)= r:。这 里 狖 5 ) 是 M 在状态 g 读取字
都有 3( % ,
串 后进入的状态 。(注意 F 在这里是不相关的 。

7.34
^
令 L7 = 〈
{ M, # 0 | 非确定型图灵机 M 在至少一个分支上在〖 步内接受输入:r }。 注意并不要求
:r ,
M 在所有分支上停机。证明 LT 是 NP 完全的 。
*
7 . 3 5 证 明 :g P = NP ,则任给布尔公式卜若 0 是可满足的 ,则存在多项式时间算法给出一个必的
满足赋值 。( 注意 :要求提供的算法计算一个函数而非若干函数 ,除非是 NP 包含的语言。P =
NP 的假定说明 SAT 在 P 中 ,所以其可满足性的验证是多项式时间可解的 。 但是这个假设没有
说明这项验证如何进行 ,而且验证不能给出满足赋值 。 必须证明它们一定能够被找到 。提示 :
重复地使用可满足性验证器一位一位地找出满足赋值 。 )
*
7.3 6 证 明 :g P = NP,则可以在多项式时间内将整数因子分解 。(参见问题 7.35 的提示 。 )
A# 7.3 7 证 明 :g P = NP ,则可以在多项式时间内找出无向图中的最大团 。(参见问题 7.35 的提示 。 )
7.38 图 的 一 个 着 色 ( coloring ) 是给结点指定颜色 ,使得相邻的结点不会被指定为同一种颜色 。 令
{ G〉
3 COLOi? = 〈 |G 的结点被三种颜色着色 }
证明 3 COLO尺是 NP 完全的 。( 提 示 :利用下面三个子图 。

调色板
o o
~~

变量
0
OR 构件
7.39 有一个盒子和一些卡片,如下图所示。盒子里有栓塞,卡片上有凹口 ,所以每张卡片可以两种方式
放人盒子中 。每张卡片上有两排孔 ,有些孔没有打穿。把所有卡片放进盒子,使得盒子的底被完全
覆盖 (即,每个孔的位置都被至少一张在该位置上无孔的卡片堵住),则谜题就算破解了。令
…,
, 丨每个代表一张卡片,
Q〉 并且这个卡片集有解 }
证明 PL7ZZLE 是 NP 完全的 。

盒子 卡片
一种方式另一种方式
栓塞之 凹口

C.
206 第三部分复杂性理论

7.40 令
/> > 4 ,6 ,0 户 是 二 进 制 整 数 ,
6<, p )}

^^
] 00 尸= {
〈 使 得 a6 =c( mod
证 明 MODE兄P 6 P。( 注 意 ,最 明 显 的 算 法 不 在 多 项 式 时 间 内 运 行 。提 示 : 先 试 证 6 是 2 的 幂 的
情 况。

7.41 集 合 { 1,… ,々} 上 的 一 个 置 换 ( permutation ) 是 一 个 在 这 个 集 合 上 的 一 对 一 的 映 射 函 数 。令 p
为 一 个 置 换 ,〆轰示 P 自 身 的 次 复 合 。 令
PE尺 = = p 和g …,
为 { 1, 々} 上 的 置 换 是 二 进 制 整 数 }
证 明 ( 注 意 ,最 明 显 的 算 法 不 在 多 项 式 时 间 内 运 行 。提 示 : 先 试 证 ?是 2
的 幂 的 情 况。

.
7 42 证 明 P 在 星 号 运 算 下 封 闭 。( 提 示 :使 用 动 态 规 划 。 对 于 任 意 的 AGP,对 输 入: 其
中 建 一 个 表 ,表 示 对 于 每 个 是 否 有 子 串 % … 。

A7 .4 3 证 明 NP 在 星 号 运 算 下 封 闭 。
7.44 令 LWA尺 Y- SSLTM 是 所 有 数 用 一 进 制 表 示 的 子 集 和 问 题 。 为 什 么 SUBSET- SLTM 的 NP 完 全 性

-
y SSL/MG P。

^
的 证 明 不 能 用 来 证 明 UNARY- SSUM 是 NP 完 全 的 ? 求 证 L/iVAi
.
7 45 证 明 若 P = NP ,则 除 了 语 言 A = 0 和 A = 以 外 ,所 有 语 言 AGP 都 是 NP 完 全 的 。
7.46
_ 1 阶 循 环 群 当 且 仅 当 A 是 素 数 。 可 以 利 用 这 一 事 实 ,Zp无 须= 证U明 。与现
证 明 PWAffiS ={ m|m 是 二 进 制 表 示 的 素 数 } 6 NP。(提 示 : 对 于 />>1 ,乘 法 群 *
*
|:r

户 互 素 ,且 是 />
在 已 知 为 真 ,但 其 证 明 更 难 。

7.47
7.48
— G 表 示 无PATH

般认为
向图,
不 是 NP 完 全 的 ,请 说 明 原 因 。证 明 如 果 PATH 不 是 NP 完 全 的 ,贝lj P尹 NP。

SPA 7 7/ ={〈 G ,
a,6 ,々〉| G 包 含 从 a 到 6 、长 度 至 多 为 々 的 简 单 路 径 }
以及
UM 7 7f = {〈 G,a,6,々〉| G 包 含 从 a 到 6 、长 度 至 少 为 々 的 简 单 路 径 }
a. 证 明 SPA 丁H 6 P。
b. 证 明 是 NP 完 全 的 。
.
7 49 令 DOUBLE- SAT = { < 01 # 至 少 有 两 个 满 足 赋 值 }。证 明 DOUBLE- SAT 是 NP 完 全 的 。
A 7.50 令 HALF- CLJQL7E = 〈
{ G〉 |G 是 无 向 图 , 包 含 结 点 数 至 少 为 m/ 2 的 完 全 子 图 , m 是 G 的 结 点 数 }。
证 明 HALF-CLIQUE 是 NP 完 全 的 。
{ pk 是 一 个 可 满 足 的 cnf 公 式 ,其 中 每 个 变 量 最 多 出 现 在 々 个 位 置 }。
7.51 令 CiVFA = 〈
a. 证 明 CNF2 GP。
b. 证 明 CNF 3 是 NP 完 全 的 。
7.52 令 CNFU = { ( f ) |0 是 一 个 可 满 足 的 cnf 公 式 ,其 中 每 个 子 句 包 含 任 意 多 个 文 字 ,但 最 多 只 有
一个文字的非 K 证明 CiVFH 6 P。
.
7 53 设 # 是 3cnf 公 式 。变 量 # 的尹一赋值 ( assignment ) 是 使 每 个 子 句 包 含 两 个 不 同 真 值 的 文 字 的 赋

值 。 换 言 之 ,关 一 赋 值 满 足 彡,而 又 不 在 任 何 子 句 中 赋 值 三 个 真 文 字 。
a. 证 明 # 的 任 何 关 一 赋 值 的 否 定 依 然 是 參 一 赋 值。
b. 令 关 SAT 是 具 有 关 一 赋 值 的 3 cnf 公 式 的 集 合 。证 明 : 通 过 把 每 个 子 句 c,
(:yi V 夕2 V 夕3 )
换成两个子句
(:yi V V A )和 Oi V V 6)

^
yi 3

其 中 A 是 对 应 于 每 个 子 句 ct 的 新 变 量 ,6 是 一 个 补 充 的 新 变 量 ,可 以 得 到 从 3 SAT 到 关 SAT
的 多 项 式 时 间 归 纳。
c. 得 出 关 S_AT 是 NP 完 全 的 结 论 。
7.54 无 向 图 的 一 个 割 ( cut ) 是 把 顶 点 集 V 分 裂 成 两 个 不 相 交 的 子 集 S 和 T 。 割 的 规 模 是 一 端 在 S 中 ,
第 7章 时 间 复 杂 性 207

另一端在丁中的边的数目 。令
MAX-0 7T ={〈 G,
々>|G 有规模不少于々的割 }

-
证明 MAX CUT 是 NP 完全的 。 可以假定问题 7.53 的结论成立 。(提示 :证明关 SA T<PMAX : -
CL/T 。 对应变量 x 的构件是由 3c 个标记为:r 的结点和 3c 个标记为 X 的结点组成的集合 ,这里 c
是子句数 。 所有标记为 x 的结点都与所有标记为的结点相连 。 子句构件是由三条边组成的三
角形 ,这三条边连接三个由该子句中的文字做标记的结点 。 不同的子句构件采用不同的结点 。
证明这种归约满足要求 。

习题选解
.
7 1 c 假; d 真。
7.2 c 真; d. 真 。
7.28 首先,可以在多项式时间内验证一种方案是否有效 ,所以 SOLJTA 识E 6 NP。 其次 ,证明 3SAT < P

S O L I T A I R E。给 定 一 个 一 有 m 个变量 A , 和 是 个 子 句 ci , Q ,构造一个


々 Xm 的游戏 G 。 假定彡中没有子句同时含有 x , 和:r ,,因为去掉这种子句不会影响可满足性 。
如果 x, 在子句 0 中 ,就放一枚蓝色棋子在 c 行 x , 列上 。如果 , G在子句 c,中 ,就放一枚红色
棋 子 在 0 行:r: 列上 。如有必要 ,可以通过复制行或添加空列使棋盘保持正方而不影响可解性 。可

-―
以证明 ,0 可满足当且仅当 G 可解 (获胜 )。
( ) 若 0 可 满 足 。A 为真 ( 假),从相应列中移去红色 (蓝色 ) 棋子 。现在 ,棋子对应着取
值为真的文字 。因为所有子句都有一个取值为真的文字 ,所以所有行都有棋子 。
( ) 若游戏可解 ( 获胜 )。 如果某列中的红色 ( 蓝色 ) 棋子被移去 ,将相应的变量置为真
( 假 )。 每行都有棋子留下 ,所以每个子句都至少有一个为真的文字 。 因此 0 被满足 。
.
7 37 假 设 P = NP,则 CLJQLTEGP , 且对于任意的 I 可在多项式时间内检测 G 是否有一个々 团 。 一一 -
检测 G 中是否有々规模的团 ,々从 1 取到 G 的结点总数 ,就可以在多项式时间内找出 G 中最大团
的规模匕一旦知道了 G 就可按下述方法找出一个含有 个结点的团 。对 G 的每个结点:r ,移去 ;
r
并重新计算最大团的规模 。 如果规模减小了 ,恢复 x 继续测试下一个结点 。所有结点都这样处理
一遍后 ,剩下的结点就是要求的 团。
7.43
M=“ 对于输入比:
1. 非确定地将 w 分割为若干片段
^
令 A 6 NP。 构造非确定型图灵机 M 在 非 确 定 的 多 项 式 时 间 内 判 定 。

2. 对每一 A ,非 确 定 地 猜 测 可 证 明 的 证 书 。
3. 验证所有可能的证书 ,然后接受 。
如验证失败 ,则拒绝 。

.
7 50 -
我 们 给 出 一 个 从 CLIQUE 到 HALF CLJQLTE 的多项式时间映射归约。该归约的输入是〈G,々>
对 ,归 约 产 生 图 < H > 作 为 输 出 ,其 中 H 描述如下 。若 G 有 m 个结点且々 = 饥/2 , 则 H =
k <m/2 f 则向 G 中添加 )个结点 (每个都和原有结点连接且彼此连接 ) 得到 H,其中 j = w
_ 若
2々。
这样 H 就含有 m ;= 2m + ’

— 2々个结点。显然 ,G 有 h 团当且仅当 H 有 规 模 为 々 =m — k 的团 。
所 以 的 当 且 仅 当 如 果 々
〉 m /2 , 则 向 G 中 添 加 个结
点 但 不 添 加 任 何 边 得 到 其 中 这 样 H 有 m + j = 2々个结点 ,因此 G 有々 团当且仅当 -
H 有 b 团 。 所 以 〈 G, :
A 〉G CUQL/f 当 且 仅 当 〈 H > 6 HALF-CLJQLTE 。 还 需 要 证 明 H A L F-

CLJQ[/f 6 NP。证书很简单 ,就是那个团 。
第8章
Introduction to the Theory of Computation , 3 e

空间复杂性

本 章 从 计 算 问 题 所 需 要 的 空 间 大 小 (存 储 量 ) 出 发 考 察 其 复 杂 性 。 在 寻 找 许 多 计 算 问
题 的 可 行 解 时 ,时 间 和 空 间 是 最 重 要 的 两 个 需 要 衡 量 的 因 素 。空 间 复 杂 性 与 时 间 复 杂 性 有
许 多 相 似 之 处 ,它 为 按 照 计 算 难 度 来 更 深 入 地 研 究 问 题 的 分 类 提 供 了 另 外 一 种 方 法 。
与 分 析 时 间 复 杂 性 类 似 ,首 先 需 要 选 择 一 个 模 型 来 度 量 算 法 所 消 耗 的 空 间 。本 章 仍 采
用 图 灵 机 模 型 ,因 为 其 数 学 形 式 简 单 ,而 且 近 似 实 际 的 计 算 机 ,足 以 得 岀 有 意 义 的 结 果 。


令 M 是一个在所有输入上都停机的确定型图灵机 M 的空间复杂度
complexity ) 是 一 个 函 数 /:N N ,其 中 /( n ) 是 M 在 任 何 长 为 n 的 输 入 上 扫 描 带
( space

子 方 格 的 最 大 数 。 若 M 的 空 间 复 杂 度 为 / U ),则 称 M 在 空 间 / U ) 内 运 行 。
如 果 M 是 对 所 有 输 入 在 所 有 分 支 上 都 停 机 的 非 确 定 型 图 灵 机 ,则 将 它 的 空 间 复 杂 度
/ ( 72 ) 定 义 为 M 对 任 何 长 为 72 的 输 入 ,在 任 何 计 算 分 支 上 所 扫 描 的 带 子 方 格 的 最 大 数 。


与 时 间 复 杂 度 类 似 ,通 常 用 渐 近 记 法 估 计 图 灵 机 的 空 间 复 杂 度 。
惠 令 /:N R+ 是 一 个 函 数。空间复杂性类 ( space complexity class) SPACE( f ( n ) )
和 NSPACEU ( n ) ) 定 义 如 下 :
SPACE( /( n ))= { L|L 是 被 0( / U )) 空 间 的 确 定 型 图 灵 机 判 定 的 语 言 }
a
NSPACE( /( n ))= |L 是 被 0( /U )) 空 间 的 非 确 定 型 图 灵 机 判 定 的 语 言 }
第 7 章 介 绍 了 NP 完 全 问 题 SAT ,现 在 证 明 用 线 性 空 间 算 法 能 求 解 S A T 问
题 。因 为 SAT 是 NP 完 全 的 ,所 以 SAT 不 能 用 多 项 式 时 间 算 法 求 解 ,更 不 能 用 线 性 时 间
算 法 求 解 。 因 为 空 间 可 以 重 用 ,而 时 间 不 能 ,所 以 空 间 的 能 力 显 得 比 时 间 强 得 多 。

+
从 =“对 输 入 ( ),# 是 布 尔 公 式 :

2. 计算彡在该真值赋值下的值 。
3. 若

1. 对 于 0 中 变 量 xi , , 的 每 个 真 值 赋 值 ;

0 的 值 为 1 ,则 接 受 ;否 则 拒 绝 。”
显 然 机 器 Mi 是 在 线 性 空 间 内 运 行 ,因 为 每 一 次 循 环 都 可 以 复 用 带 子 上 的 同 一 部 分 。
该 机 器 只 需 存 储 当 前 的 真 值 赋 值 ,这 只 需 要 消 耗 O( m ) 空 间 。因 为 变 量 数 m 最 多 等 于 输
入 长 度 n ,所 以 该 机 器 在 空 间 0( 72 ) 内 运 行 。 冁'

这 个 例 子 分 析 了 一 个 语 言 的 非 确 定 性 空 间 复 杂 性 。 在 下 一 节 将 说 明 ,测 定
非 确 定 性 空 间 复 杂 性 ,对 于 测 定 它 的 确 定 性 空 间 复 杂 性 是 有 很 大 帮 助 的 。下 面 分 析 判 定 一
个 非 确 定 型 有 穷 自 动 机 是 否 接 受 所 有 字 符 串 的 问 题 。令
ALLNFA = { < A > | A 是 一 个 NFA 且 L( A )= 2 * }
首 先 给 出 一 个 非 确 定 型 线 性 空 间 算 法 来 判 定 该 语 言 的 补 ALLnfa 。算 法 的 思 想 是 利 用
非 确 定 性 猜 测 一 个 被 NFA 拒 绝 的 字 符 串 ,然 后 用 线 性 空 间 跟 踪 该 NFA ,看 它 在 特 定 时 刻
会 处 在 什 么 状 态 。需 要 注 意 的 是 ,此 时 还 不 知 道 该 语 言 是 否 在 NP 或 coNP 中 。
“对 于 输 入〈M > ,M 是 一 个 NFA:
襄汐章空间复杂性 209

_
1. 置标记于 NFA 的起始状态 。
2. 重复执行下面的语句 M 次 ,这里 g 是 M 的状态数 :
3. 非确定地选择一个输人符号并移动标记到 M 的相应状态 ,来模拟读取那个符号。
4. 如 果 步 骤 2 和 3 表 明 M 拒绝某些字符串 ,即如果在某一时刻所有标记都不落
在 M 的接受状态上 ,则接受 ;否则拒绝 。

如果 M 拒绝某个字符串 ,则它必定拒绝一个长度不超过 29 的字符串 ,因为在任何被
拒绝的更长的字符串中 ,上面算法中所描述的标记的位置分布必定重复出现 。介于两次重
复出现之间的那一段字符串可以删去 ,从而得到更短的被拒绝的字符串。 所以 N 可判定
ALLNFAO ( 值得注意的是 ,N 也接受格式错误的输人 。

该算法仅需要的空间是用来存放标记的位置和重复计数器 ,这在线性空间就可以得到
解决 。因此 ,该算法在非确定的空间 OU ) 内运行 。接下来 ,证明一个关于 ALLnfa 的确
定性空间复杂性的定理 。

8. 1 萨维奇定理
本节介绍有关空间复杂性的最早结论之 萨维奇定理。该定理表明确定型机器可
以用非常少的空间模拟非确定型机器 。 对于时间复杂性 ,这种模拟似乎需要指数倍地增加
时间 。对于空间复杂性 ,萨维奇定理说明 ,任何消耗 /(〃) 空间的非确定型图灵机都可以

—^
转变为仅消耗尸(〃) 空间的确定型图灵机 。
( 萨 维 奇 定 理) 对 于 任 何 ㊀ 函 数 /: NR + ,其 中 /( r? )>72 ,
NSPACEC /U )) G SPACECj Cw ))
证明思路我们需要确定地模拟一个 /(〃) 空间的 NTM ( 非确定型图灵机 )。最简单
的方法就是逐个地尝试 NTM 的所有计算分支 。 这种模拟要求记录当前正在尝试的是哪
一 个 分 支 ,以 便 能 够 过 渡 到 下 一 个 分 支 。 但 是 消 耗 / U ) 空 间 的 一 个 分 支 可 能 运 行
步 ,每一步都可能是非确定的选择 。 顺序地考察每一个分支要求记录某个具体
分 支 上 所 做 的 所 有 选 择 ,以 便 能 找 到 下 一 个 分 支 。 所 以 该 方 法 可 能 会 用 掉 空 间 ,
超 过 了 0( 尸 U )) 空 间 。
考虑到更具一般性的问题 ,这里采用了另一种不同的方法 。 给定 NTM 的两个格局 o
和 0 以及一个整数 〖,要求判定该 NTM 能否在 〖 步内仅用 /(〃) 空间从 Q 变到 C2 , 称该
问题为可产生性问题 ( yieldability problem ) 0 如果令 ci 是起始格局 ,c2 是 接 受 格 局 ,/ 是
非确定型机器可以使用的最大步数 ,那么通过求解可产生性问题 ,就能够判定机器是否接
受输入 。
下面给出一个确定的递归算法来求解可产生性问题 。它的运算过程为 : 寻找一个中间
格 局 0 ,递 归 地 检 查 能 否 在 以2 步 内 到 达 以 及 能 否 在《 / 2 步 内 到 达 。重复使

^
Q

用两次递归检查的空间即可显著地节省空间开销 。
该算法需要用来存储递归栈的空间 。递归的每一层需要 0( / U )) 空 间 来 存 储 一 个 格
局 。递归的深度是 log〖,这里 〖 是非确定型机器在所有分支上可能消耗的最大时间 。 因为
t = 2以㈣ ,所以 10以 = 0( /( rl ))。因此确定的模拟过程需要 CK /HrO ) 空 间 。

在 8.4 节 ,我们证明只要 /( n )>logn ,萨维奇定理就能成立 。


210 第三部分复杂性理论

证 明 设 N 是 在 空 间 /( 72 ) 内判定语言 A 的 NTM。构造一个判定 A 的确定型图灵机


M。 机器 M 使用过程 CANYIELD,该过程检查 iV 的一个格局能否在指定的步数内产生另
一个格局 ,它求解了在证明思路中所描述的可产生性问题 。
设 w 是输入到 N 的字符串 。对于 iV 的格局 ci ,
c2 以及整数(( 为方便 ,假定 〖 是 2 的
整数次幂 ),如果从格局 Q 出发 ,IV 有一系列非确定的选择能使它在〖 步内进入格局 c 2 ,
则 CANYIELDCCHQ ,
/ ) 输出接受 ,否则 ,CANYIELD 输岀拒绝 。

CANYIELD= “对输入 q ,c2 和 h


1. 若 = 1 ,则直接检查是否有 C\ = C 2 9 或者根据 iV 的规则检查 C 1 能否在一步内
产生 C2 。如果其中之一成立 ,则接受 ;如果两种情况都不成立 ,则拒绝 。
2. 若 t>l ,则对于 iV 的每一个消耗空间 /( rz ) 的 格 局

3. 运 行 CANYIELD cm,
O,
2 jo

4. ( 音)
c2 , 。
运行 CANYIELD cm ,

5. 若第 3 步和第 4 步都接受 ,则接受 。


6. 若此时还没有接受 ,则拒绝 。

现在定义 M 来模拟 N 。首先修改 iV,当它接受时 ,把带子清空并把读写头移到最左
边的单元 ,从而进人称为 caeceptW 格局 。令 是 iV 在 w 上的起始格局 。选一个常数 A

^
#

使得 iV 在 /( /2 ) 带子上的格局数不超过 2#
°,其中〃是 w 的长度 。〃
°
( w)
2 是 JV 在所有分
支上的运行时间的上界 。
M = “对输人 w :
1. 输出 GANYIELD( cstart , 2#㈤ )的结果 。
caccept , ”
算法 CANYIELD 显然求解了可产生性问题。因此 M 正确地模拟了 iV 。下面需要分析
M , 确信它在 0( /2( )) 空间内运行 。

CANYIELD 在递归调用自己时 ,它把所处的步骤号以及 Cl 、 Q 和《 的值都存储在栈
中 ,所以递归调用返回时能够恢复这些值 。 因此在递归的每一层需要增加 0( /( « )) 空间 。
此 外 ,递 归 的 每 一 层 把 〖 的 值 减 小 一 半 。 开 始 时 〖 等 于 2d f U ) , 所 以 递 归 的 深 度 是

^
Odog2 ( w ) ) 或 0( /( ))。因此总共消耗的空间是 0( /2(〃)),正如断言所述 。
在这个论证过程中产生了一个技术难点 ,其原因是算法 M 在调用 CANYIELD 时需
要 知 道 /U) 的 值 。修 改 M 可以克服这个困难 ,方法是对 /(〃) 不断赋值使 /( n )= l , 2,

_
3 ,… 。对于每个值 /(〃)= ,修改后的算法利用 GANYIELD 来确定接受格局是否可达 。
此外 ,利用该过程 ,还可通过检查 N 能否从起始格局岀发到达某个长度为 / + 1 的 格 局 来
确定 N 是否至少需要 z + l 大小空间 。如果接受格局可达 ,则 M 接受 ;如果没有长为 / + 1
的格局可达 ,M 拒绝 ;否则 M 继续尝试 /( n )= f + l。(也可以用另一种办法来克服这个困
难 ,即假定 M 能在空间 0( /U )) 内计算岀 /( n ),但是那样就需要把这个假定加人定理的
陈述中。
) ■

8. 2 PSPACE 类
与定义 P 类相似 ,我们为空间复杂性定义 PSPACE 类 。
irJaHisI PSPACE 是在确定型图灵机上 、 在多项式空间内可判定的语言类 。换言之 ,
襄次章空间复杂性 211

^
PSPACE = U SPACE( )
k
PSPACE 类 的 非 确 定 型 版 本 NPSPACE 可 以 类 似 地 用 NSPACE 类 来 定 义 。 然 而 ,任
何 多 项 式 的 平 方 仍 是 多 项 式 ,根 据 萨 维 奇 定 理 ,NPSPACE = PSPACE。
在 例 8.3 和 例 8.4 中 ,已 经 说 明 了 SAT 属 于 SPACEU ),AZXNFA 属 于 coNSPACE( n ),
而 根 据 萨 维 奇 定 理 ,确 定 型 空 间 复 杂 性 类 对 补 运 算 封 闭 ,所 以 ALLNFA 也 属 于 SPACEU2 )。
因 此 SAT 和 ALLNFA 这 两 个 语 言 都 在 PSPACE 中 。
现 在 考 察 PSPACE 与 P 和 NP 的 关 系 。 显 而 易 见 , PSPACE , 因 为 运 行 快 的 机 器
不 可 能 消 耗 大 量 的 空 间 。更 精 确 地 说 ,当 〃时 ,由 于 在 每 个 计 算 步 上 最 多 能 访 问 一
个 新 单 元 ,因 此 ,任 何 在 时 间 内 运 行 的 机 器 最 多 能 消 耗 〖 U ) 的 空 间 。 与 此 类 似 ,
NPSNPSPACE ,所 以 NPGPSPACE 0

反 过 来 ,根 据 图 灵 机 的 空 间 复 杂 性 也 可 以 界 定 它 的 时 间 复 杂 性 。对 于 通 过
简 单 推 广 引 理 5.7 的 证 明 可 知 ,一 个 消 耗 /U ) 空 间 的 图 灵 机 至 多 有 不 同 的
格 局 ,图 灵 机 的 停 机 计 算 不 能 出 现 重 复 格 局 。因 此 消 耗 空 间 /(〃) 的 图 灵 机@ 必 定 在 时 间

^
/b)20( ㈤)内 运 行 ,得 出 PSPACE EXPTIME= U TIME( 2 )

^ ^
0

用下面的一系列包含式总结迄今为止所定义的复杂性类之间的关系 :
NP PSPACE = NPSPACE EXPTIME

^
在 这 些 包 含 式 中 ,还 不 知 道 是 否 有 某 一
个 为 等 式 。也 许 有 人 会 发 现 一 个 类 萨 维 奇 定
理 的 方 法 ,使 得 这 里 的 某 些 类 能 够 合 并 为 一
个 类。但 是 在 第 9 章 将 证 明 EXPTIME ,
^ PSPACE
EXPTIME

所以上面的包含式中至少有一个是真包含 ,但
还 不 能 确 定 是 哪 一 个! 实 际 上 ,大 部 分 研 究 者
相信所有包含式都是真包含 。图 8 1 描 绘 了 这 -
些 类 之 间 的 关 系 ,假 设 所 有 类 是 不 同 的 。 图 8- 1 P、 NP、 PSPACE 和 EXPTIME 的推测关系

8. 3 PSPACE 完全性
7.4 节 介 绍 了 NP 完 全 语 言 类 ,它 代 表 NP 中 最 难 的 语 言 类 。证 明 一 个 语 言 是 NP 完
全 的 是 说 明 它 不 属 于 P 的 强 有 力 的 证 据 。若 它 属 于 P , 则 P 将 和 NP 相 等 。 本 节 为
PSPACE 类 引 入 一 个 类 似 概 念 PSPACE 完 全 性 。
IfMWWM 若 语 言 B 满 足 下 面 两 个 条 件 ,则 它 是 PSPACE 完 全 的 :
1.B 属 于 PSPACE。
2. PSPACE 中 的 每 一 个 语 言 A 多 项 式 时 间 可 归 约 到 B 。
若 B 只 满 足 条 件 2 ,则 称 它 为 PSPACE 难 的 。
在 定 义 PSPACE 完 全 性 时 ,利 用 了 定 义 7.24 中 给 出 的 多 项 式 时 间 可 归 约 性 。 为 什 么
不 定 义 并 且 采 用 多 项 式 空 间 可 归 约 性 ,而 用 多 项 式 时 间 可 归 约 性 呢? 为 了 理 解 这 个 重 要 问
题 的 答 案 ,首 先 考 察 定 义 完 全 问 题 的 动 机 。
完 全 问 题 是 重 要 的 ,因 为 它 们 是 复 杂 性 类 中 最 困 难 问 题 的 样 例 。 完 全 问 题 是 最 难 的 ,

© 当 8.4 节介绍消耗亚线性空间的图灵机时 ,这里的要求 fdn n 被推广为 / ( « ) > log 。


^
212 第三部分复杂性理论

因 为 该 类 中 的 其 他 问 题 很 容 易 归 约 到 它 。如 果 找 到 一 种 简 便 的 方 法 求 解 完 全 问 题 ,就 能 很
容 易 求 解 该 类 中 的 其 他 所 有 问 题 。 为 了 使 这 种 逻 辑 能 够 成 立 ,相 对 于 该 类 中 典 型 问 题 的 复
杂 性 ,归 约 过 程 就 必 须 是 容 易 的 。如 果 归 约 过 程 本 身 就 很 难 算 ,那 么 针 对 完 全 问 题 的 容 易
解 法 就 不 一 定 能 推 导 出 其 他 归 约 到 它 的 问 题 的 容 易 的 解 法。
所 以 ,必 须 遵 循 如 下 规 则 : 当 为 一 个 复 杂 性 类 定 义 完 全 问 题 时 ,归 约 的 模 型 必 须 比 用
来定义类本身的模型更加受限。

8 . 3. 1 TQBF 问题

-
PSPACE 完 全 问 题 的 第 一 个 例 子 是 可 满 足 性 问 题 的 推 广 。回 忆 一 下 ,布 尔 公 式 是 一 个
包 含 布 尔 变 量 、常 数 0 和 1 以 及 布 尔 运 算 符 A , V , 的 表 达 式。 现 在 定 义 更 一 般 形 式 的
布 尔 公 式。
量 词 (quantifier ) V ( 对 所 有) 和 3 ( 存 在 ) 在 数 学 命 题 中 经 常 岀 现 。 语 句 的 含 义
是 ,对 于 变 量:T 的 每 个 值 ,语 句 # 都 是 真 。类 似 地 ,语 句 3 x 0 的 含 义 是 ,对 于 变 量:C 的
某 个 值 ,语句多是真 。有 时 ,把 V 称 为 全 称 量 词 ( universal quantifier ) ,把 3 称 为 存 在 量
词 ( existential quantifier ) , 紧 跟 在 量 词 后 面 的 变 量:r 受 到 该 量 词 约 束 ( bound )。
例 如 ,对 于 自 然 数 ,语 句 VxDr + l>x] 的 含 义 是 : 每 一 个 自 然 数:r 的 后 继:r + 1 都
比 它 大 。显 然 这 个 命 题 为 真 。 然 而 ,语 句 3 [ + 3 = 3] 显 然 是 假 的 。 当 解 释 包 含 量 词 的

^^ ^
语 句 的 含 义 时 ,必 须 考 虑 所 取 值 的 域 ( universe )。 在 这 个 例 子 中 ,域 是 自 然 数 ,但 是 如 果
改 用 实 数 ,则 带 存 在 量 词 的 语 句 就 变 成 真 的 了 。
语 句 可 以 包 含 多 个 量 词 ,如 Vx 3 y b> ]。 对 于 自 然 数 域 ,该 语 句 的 语 义 是 每 一 个

^
自 然 数 都 有 另 一 个 自 然 数 比 它 大 。 量 词 的 次 序 很 重 要 。若 颠 倒 次 序 ,如 语 句 3 yV :
x], 则 给 出 完 全 不 同 的 含 义 ,即 存 在 某 个 自 然 数 比 所 有 其 他 数 都 大 。 显 然 ,第 一 个 语 句 为
r[3;

真 ,第 二 个 语 句 为 假 。
量 词 可 以 出 现 在 数 学 语 句 中 的 任 何 地 方 。它 的 作 用 范 围 是 跟 在 量 化 变 量 后 的 一 对 匹 配
的 括 弧 内 出 现 的 语 句 段 。该 段 称 为 量 词 的 辖 域 ( scope ) . 通 常 ,要 求 所 有 变 量 都 出 现 在 语
句 的 开 头 会 很 方 便 ,这 时 每 个 量 词 的 辖 域 就 是 其 后 的 所 有 语 句 成 分 。 这 种 语 句 称 为 前 束 范
式 ( prenex normal form )。很 容 易 把 任 何 语 句 都 写 成 前 束 范 式 。如 不 特 别 指 明 ,只 考 虑 这
种 形 式 的 语 句。
带 量 词 的 布 尔 公 式 称 为 量 词 化 布 尔 公 式 ( quantified Boolean formula )。 对 于 这 种 公
式 ,域 是 { 0 ,
1 }。 例 如 :
Vx 3 V: V 夕)]
y) A (夕
是 量 词 化 布 尔 公 式 。这 里 , 是 真 。但 是 如 果 颠 倒 量 词 Vx 和 3 的 次 序 ,就 变 成 假 了 。

^ ^
如 果 公 式 的 每 个 变 量 都 出 现 在 某 一 量 词 的 辖 域 内 ,该 公 式 就 称 为 全 量 词 化 的 ( fully
quantified ) 全 量 词 化 的 布 尔 公 式 有 时 称 为 句 子 ( sentence ),它 要 么 是 真 ,要 么 是 假 。 例
0

如 ,前 面 的 公 式 0 是 全 量 词 化 的 。但 是 ,如 果 删 去 0 的 开 头 部 分 Vz ,该 公 式 就 不 再 是 全
量 词 化 的 。 它 既 不 是 真 ,也 不 是 假 。
TQBF 问 题 就 是 要 判 定 一 个 全 量 词 化 的 布 尔 公 式 是 真 还 是 假 。 定 义 语 言
TQBF = { < >| 是 真 的 全 量 词 化 的 布 尔 公 式 }

^^
TQBF 是 PSPACE 完 全 的 。
第S 章 空 间 复 杂 性 213

证明思路为了证明 TQBF 属于 PSPACE,给出一个简单的算法 。 该算法首先给变


量赋值 ,然后递归地计算公式在这些值下的真值 。从这些信息中 ,算法就能确定原量词化
公式的真值 。
为了证明 PSPACE 中的每个语言 A 在多项式时间内可归约到 TQBF ,从判定 A 的多
项式空间界限图灵机开始 ,然后给出多项式时间归约 ,它把一个字符串映射为一个量词化
的布尔公式一彡模拟机器对这个输人的计算 。公式为真当且仅当机器接受 。
作为这一构造的首次尝试 ,模仿库克 - 列文定理的证明思路 ,即定理 7.22 。 可以构造
公 式 丰 ,通过描绘接受画面来模拟 M 在输人 w 上的计算 。 在加上的画面宽度是 O( V ),
即 M 消耗的空间 。因为 M 可能运行指数长的时间 ,所以它的高度是 V 的指数 。 因此 ,如
果直接用公式表示画面 ,就可能导致指数长的公式 。 然而 ,多项式归约不能产生指数长的

结果 ,所以这种尝试不能证明 A<PTQBF。
下面改用一种与萨维奇定理的证明相关的技术来构造公式 。该公式把画面分成两半 ,
利用全称量词的功能 ,用公式的同一部分来代表每一半 。 结果产生短得多的公式 。
证明首先 ,给出一个判定 TQBF 的多项式空间算法 :
了=“对输入 〈 彡 > ,
# 是一个全量词化布尔公式 :
1. 若 4 不含量词 ,则它是一个只有常数的表达式 。计算 的值 ,若为真 ,则接

^
受 ;否则拒绝 。
2. 若 r0,在 0 上递归地调用 :
0 等 于 3: T ,首先用 0 替换:r ,然后用 1 替换:r 。 只
要有一个结果是接受 ,则接受 ;否则拒绝 。

3. 若 0 等 于 Vi# 在 0 上 递 归 地 调 用 T ,首先用 0 替换:r ,然后用 1 替换:r 。 若两
个结果都是接受 ,则接受 ;否则拒绝 。

算法 T 显然判定 TQBF 。 为了分析它的空间复杂性 ,我们发现它递归的深度最多等于
变量的个数 。 在每一层只需存储一个变量的值 ,所以空间总消耗是 O( m ),其中 m 是多中
岀现的变量的个数 。因此 T 在线性空间内运行 。 :
接下来 ,证明 TQBF 是 PSPACE 难的 。设 A 是一个由图灵机 M 在 W 空间内判定的
语言 ,6 是某个常数 。下面给出一个从 A 到 TQBF 的多项式时间归约。
该归约把字符串 w 映射为一个量词化的布尔公式 # 。# 为真当且仅当 M 接受 w 。为了
说明怎样构造一需解决一个更一般的问题。利用两个代表格局的变量集合 o 和 G 及一
个数 c o , 构造一个公式
> ,
C U
2
o 如 果 把 赋 为 实 际 的 格 局 ,则 该 公 式 为 真 当 且 仅
当 M 能够在最多 r 步内从 C 1 到达 c2 。然后 ,可以令 0 是公式 & ,c ,
h , 其中 /1 = 2办㈤ ,
d 是一个选取的常数 ,使得 M 在长为 n 的输入上可能的格局数不超过 〃

f( n = nk 0 为了方便 ,假设 〖 是 2 的幂 。
2 ( w ) 。 这里 ,令

类似库克 - 列文定理的证明 ,该公式对格局单元的内容进行了编码 。 对应于单元的可


能设置 ,每个单元有几个相关的变量 ,每个带子符号和状态都有一个变量对应 。 每个格局
有 V 个单元 ,所以用 O( V )个变量编码 。
若 1 = 1 ,则容易构造 #:
( ,
之 o 设计公式 ,使之表达要么 C1 等于 C2 , 要 么 Q 能 在 M 的
一步内变到 。 为了表达相等性 ,使用一个布尔表达式来表示 : 代表 Cl 的每一个变量与
C2

代表 Q 的相应变量包含同样的布尔值 。 为表达第二种可能性 ,利用库克 列文定理的证 -


明技巧 ,构造布尔表达式表示 ,代表 的每个三元组的值能正确地产生相应的 Q 的三元

^
214 第三部分复杂性理论

组的值 ,从而就能够表达

^ …
在 的一步内产生 c 2 。

^
若 >1 ,递归地构造 A/y 。作为预演 ,先尝试一种不太好的想法 ,然后再修正
它 。令
c
'
,c2 ,t — 3 TYl\ A >m:,c2 ,+ ]
, mj , y
^
符号;Wl 表示 M 的一个格局 。3 mi 是 3 xi ,
…,: :
CZ 的缩写 ,其中 Z = 0( W ),Tl ,
… ,JT/ 是
对 /Wi 编码的变量 。所以令
… ,
,的这个构造的含义是 :如果存在某个中间格局 m i ,使得 M
在至多

从 n 变到
f 步内从 d 变到叫 ,并且在至多

。然 后 再 递 归 地 构 造 这 两 个 公 式 。
C2
+ 步内从叫变到 C2 ,那么 M 就能在至多 / 步内

公式 ,具有正确值。换言之 ,只要 M 能在〖 步内从 变到 Q ,它就是 TRUE。

^
2,

然而 ,它太长了 。 构造过程中涉及的递归的每一层都把 f 的值减小一半 ,但却把公式的长


度增加了大约一倍 ,最后导致公式的长度大约是开始时 〖 = 所以这种方法给出
的公式是指数长的 。
为了缩短公式的长度 ,除了使用3 量词以外 ,再利用 V 量词 。 令
c\ c 2 彐 m i V ( c3 , mi ),
C4 ) 6 { ( C l , (m 1 ,
c2 ) }[
卜3 ,r 4 ,音 ]

新引入的变量代表格局 O 和
“ C\ ? 它允许把两个递归的子公式 “折叠 ” 为一个子公式 ,而
保持原来的意思 。通过写成 V ( C3 ,
C 4 )6 {( Cl ,
/7? l ),
( mi ,
C2 )},就指明了代表格局 和


C3

的变量可以分别取 Q 和叫的变量的值 ,或者 mi 和(2 的变量的值 ,结果公式 A 3 ,q ,f 在两


种情况下都为真。可以把结构 V:
rGb,
4[…] 替换为等价的结构 Vx[(:r = yVx = z) …],


从而得到语法正确的量词化布尔公式 。 回忆第 0 章的内容 ,在 0.2 节中证明了布尔蕴涵

-
( ) 和布尔相等 ( = ) 可以用 AND 和 NOT 来表达 。 这里 ,为了表达的清晰 ,使用符
号 = 表示布尔相等 ,而没使用等价符号 >

^
为了计算公式參Csiart , ra h 的长度 ,其中 /1 = 2
, ,注意到递归每一层增加的那部分公式
的长度与格局的长度呈线性关系,所以长度是 0(/(〃))。递归的层数是 log(〃
2 ( w ) ) 或 0(/㈤)。
所以所得到的公式的长度是 0( 尸(〃))。 ■

8 . 3. 2 博弈的必胜策略
本书中 ,把博弈 ( g a m e ) 不严格地定义为两个对立方的竞赛 ,每一方都按照预先确定
的规则争取达到某一目标 。博弈有多种形式 ,从国际象棋这一类棋盘博弈 ,到作为协作或
者社会冲突模型的经济和战争博弈等 。
博弈和量词紧密相关 。 一个量化的语句存在一个之对应的博弈 ;反之 ,一个博弈也常
存在一个对应的量化语句 。这种对应关系在以下几个方面是有用的 。首先 ,把一个包含许
多量词的数学语句用对应的博弈表达出来 ,可以洞悉该语句的含义 。 其次 ,把一个博弈用
量化语句表达出来有助于理解该博弈的复杂性 。为了阐明博弈与量词之间的对应关系 ,本
节描述了一种称为公式博弈 ( formula g a m e ) 的人工博弈 。
设多 = 3:
nV 3 X3 …Q :
|>] 是一个前束范式的量词化布尔公式 ,这里 Q 代表量词
^
A
V 或者 3 。将 与下面的博弈相关联 。两名选手称为选手 A 和选手 E ,轮流为变量:n , …,
A 选值 。 选手

^
为那些 V 量词约束的变量选值 ,选手 E 为那些3 量词约束的变量选值 。进
A
行的顺序与公式开头量词出现的顺序相同。在游戏结束时 ,利用选手给变量挑选的值宣布
结果 。如果 0 ( 即删去量词后的那部分公式) 此时是 T R U E ,则选手 E 赢 ;如果 0 此时是
第S 章空间复杂性 215

FALSE ,则 选 手 A 赢 。
设七是公式
V 工2 彐工3[( 工1 V 工2 ) 八 (工2 V 3 ) A ( 2 V 3 )]

^

^
~

的值。
^
在 和 的 公 式 博 弈 中 ,选 手 E 挑 选 A 的 值 ,选 手 A 挑 选 X2 的 值 ,最 后 选 手 E 挑 选 X3

举 一 个 该 博 弈 游 戏 过 程 的 例 子 。 照 例 ,用 1 表 示 布 尔 值 TRUE ,用 0 表 示 FALSE 。
设 选 手 E 挑 选: = 1 ,然 后 选 手 A 挑 选:r 2 = 0 , 最 后 选 手 E 挑 选:r 3 = l 。当 :
n, 和 工3

^
取 这 些 值 时 ,子 公 式 (:n Vx 2 ) AU2 V I 3 ) A (石 V 石) 是 1 ,所 以 选 手 E 赢 。实 际 上 ,选
手 E 总 可 以 赢 得 这 场 博 弈 ,只 要 它 挑 选
工3
A = 1 ,然 后 不 论 选 手 A 给:r 2 选 什 么 值 ,E 都 给
选 与 工2 相 反 的 值 。我 们 称 选 手 E 有 这 场 博 弈 的 必 胜 策 略 ( winning strategy )。 如 果 双
方 都 下 出 最 佳 步 骤 时 ,某 个 选 手 能 赢 ,则 该 选 手 有 该 博 弈 的 必 胜 策 略 。
现 在 稍 微 修 改 一 下 公 式 ,得 到 一 个 博 弈 ,使 得 选 手 A 有 必 胜 策 略 。设 扣 是 公 式
彐:

^
Tl V X 2 彐 工3[( 工1 V 工2 ) 八 (工 2 V 工3 ) 八 (工2 V )]
现 在 选 手 A 有 必 胜 策 略 ,因 为 不 论 选 手 E 为 选 什 么 值 ,选 手 A 可 以 选 =0, 从而使

^
X2

量 词 后 面 出 现 的 那 部 分 公 式 为 假 ,而 不 论 选 手 E 在 最 后 一 步 选 什 么 值 。 ■

下 面 考 虑 判 定 在 与 某 个 具 体 的 公 式 相 关 联 的 公 式 博 弈 中 哪 一 方 有 必 胜 策 略 的 问 题 。令
FORMULA- GAME = {〈 0〉丨 在 与 0 相 关 联 的 公 式 博 弈 中 选 手 E 有 必 胜 策 略 }
FORMULA-GAME 是 PSP ACE 完 全 的 。
- :
证 明 思 路 FOi MULA GAMf 是 PSPACE 完 全 的 ,理 由 很 简 单 ,即 它 和 TQBF 是

证 明 公 式 4=
对 于 12 的 任 意 赋 值 ,存 在 :
^
一 样 的 。为 了 看 出 FOi?M[/LA-GAM£ = TQBF,注 意 到 一 个 公 式 恰 好 当 选 手 E 在 相 关 联
的 公 式 博 弈 中 有 必 胜 策 略 时 为 TRUE , 因 为 两 种 情 况 有 同 样 的 含 义 。
X 2 3 x3 …[0] 是 TRUE 的 条 件 是 :存 在 A 的 某 种 赋 值 ,使 得

c3 的 某 种 赋 值 ,使 得

^
Atr Air
其中 在这些变量的赋值下
为 TRUE。类 似 地 ,选 手 E 在 与 # 关 联 的 博 弈 中 有 必 胜 策 略 的 条 件 是 :选 手 E 可 以 给
赋 某 个 值 ,使 得 对 于:r 2 的 任 意 赋 值 ,选 手 E 可 以 给 x3 赋 一 个 值 ,使 得 ,等 等 ,其 中
0 在 变 量 的 这 些 赋 值 下 为 TRUE。
当 公 式 不 存 在 量 词 与 全 称 量 词 之 间 交 替 时 ,同 样 的 推 理 也 能 成 立 。 如果彡的形式为
9

选 手 E 走 两 次 ,给
-^
V X \ 9 X 2 X 3 彐 X 4 3 5 V X 6[0], 选 手 A 在 公 式 博 弈 中 走 头 三 步 ,给 X\ ,工2 和 X3 赋 值 ;然 后
X4 和 X5 赋 值 ;最 后 选 手 A 给 X6 赋 一 个 值 。
: :
6 6 FORMULA-GAMf 时 成 立 ,由 定 理 8.8 , 本 定 理 成 立 。

^ ^
因 此 ,46 QBF 恰 好 当

8.3. 3 广义地理学
既 然 知 道 公 式 博 弈 是 PSPACE 完 全 的 ,就 能 更 容 易 地 证 明 某 些 其 他 博 弈 的 PSPACE
完 全 性 或 PSPACE 难 解 性 。本 小 节 从 地 理 学 游 戏 的 推 广 开 始 ,然 后 讨 论 如 国 际 象 棋 、 跳
棋 和 GO 这 样 的 博 弈 。
地 理 学 是 一 种 儿 童 游 戏 ,选 手 们 轮 流 给 世 界 各 地 的 城 市 命 名 。每 一 座 选 中 的 城 市 的 首
字 母 必 须 与 前 一 座 城 市 的 尾 字 母 相 同 ,不 允 许 重 复 。游 戏 从 某 个 指 定 的 城 市 开 始 ,以 某 一
方 因 无 法 延 续 而 认 输 为 止 。 例 如 ,如 果 游 戏 从 Peoria 开 始 ,那 么 下 面 可 以 跟 Amherst ( 因
为 Peoria 的 尾 字 母 是 a ,而 Amherst 的 首 字 母 也 是 a ),然 后 可 以 是 Tucson ,然 后 是
216 第三部分复杂性理论

Nashua 直 到 一 方 被 难 倒 并 输 掉 比 赛 为 止。
可 以 用 有 向 图 作 为 该 游 戏 的 模 型 ,图 中 的 结 点 是 世 界 各 地 的 城 市 。根 据 游 戏 规 则 , 如
果 一 座 城 市 可 以 导 向 另 一 座 城 市 ,则 从 前 一 座 城 市 到 后 一 座 城 市 画 一 个 箭 头 。换 言 之 ,如
果 城 市 X 的 尾 字 母 与 城 市 Y 的 首 字 母 相 同 ,则 图 中 就 包 含 一 条 从 城 市 X 到 城 市 Y 的 边 。
-
图 8 2 中展示了一部分地理学图。

Peoria
^ Nashua

Albany

Tokyo

Orsay Oakland

图 8- 2 代表地理学游戏的部分图

当 地 理 学 规 则 翻 译 为 这 种 图 表 示 法 时 ,一 名 选 手 从 指 定 的 起 始 结 点 开 始 ,然 后 选 手 们
交 替 地 挑 选 结 点 ,形 成 图 中 的 一 条 简 单 路 径 (即 每 个 结 点 只 能 用 一 次 ,对 应 于 要 求 城 市 不
能 重 复 )。第一个不能扩展路径的选手输掉比赛 。
在 广 义 地 理 学 ( generalized geography ) 中 ,用 任 意 的
带有指定起始结点的有向图代替了与实际城市相关联的
-
图 。例 如 ,图 8 3 是 一 个 广 义 地 理 学 游 戏 的 例 子 。
n
设 选 手 I 先 走 ,选 手 随 后 走 。 在 本 例 中 ,选 手 I 有
如 下 的 必 胜 策 略 。选 手 I 从 结 点 1 ,即 指 定 的 起 始 结 点 开
始 。结 点 1 只 能 指 向 结 点 2 和 3 , 所 以 选 手 I 的 第 一 步 必
图 8 - 3 广义地理学游戏样例
须 是 这 两 种 选 择 之 一。 他 选 3。 现 在 轮 到 选 手 II 走 了 ,但
结 点 3 仅 指 向 结 点 5 , 所 以 她 被 迫 选 择 结 点 5。 然 后 选 手 I 从 6 、7 、 8 中 选 择 6 。 现 在 选 手
n 必 须 从 结 点 6 出 发 ,但 是 它 仅 指 向 结 点 3 ,而 3 在 前 面 已 经 走 过 了。选 手 n 被 困 住 了 ,
于 是 选 手 I 赢。
如 果 改 变 这 个 例 子 ,颠 倒 结 点 3 和 6 之 间 边 的 方 向 ,则 选 手 n 有 必 胜 策 略 。你 能 看 出
来 吗? 如 果 选 手 I 像 以 前 一 样 岀 发 到 结 点 3 , 则 选 手 n 以 结 点 6 为 应 手 ,立 即 赢 得 比 赛 ,
所 以 选 手 I 唯 一 的 希 望 是 到 结 点 2 。 但 在 这 种 情 况 下 ,选 手 [[ 以 4 为 应 手 。如 果 选 手 I 现
n
在 取 5 , 则 选 手 取 6 就 赢。如 果 选 手 I 取 7 , 则 选 手 取 9 就 赢 。 无 论 选 手 I 怎 么 走 ,
n
选手 n 总 能 赢 ,所 以 选 手 n 有 必 胜 策 略。
判定在广义地理学游戏中哪一方有必胜策略的问题是 PSPACE 完 全 的 。令
GG = i ( G ,b > \ 在 图 G 上 以 结 点 6 起 始 的 广 义 地 理 学 游 戏 中 ,选 手 I 有 必 胜 策 略 }
GG 是 PSPACE 完 全 的 。
证 明 思 路 用 与 定 理 8. 8 中 判 定:TQBF 时 所 用 的 算 法 相 似 的 一 个 递 归 算 法 ,就 能 判 定
哪 方 有 必 胜 策 略 。该 算 法 在 多 项 式 空 间 内 运 行 ,所 以 GGGPSPACE。
为 了 证 明 GG 是 PSPACE 难 的 ,给 出 一 个 从 FORMULA- GAME 到 GG 的 多 项 式 时 间
襄汐章空间复杂性 217

归约 。该归约把一个公式博弈转化为一个广义地理学图 ,使得图上的游戏过程模拟公式博
弈的游戏过程 。 实际上 ,广义地理学游戏的选手就是在玩一种编码形式的公式博弈 。
证明下面的算法判定在广义地理学实例中 ,选手 I 是否有必胜策略 。换句话说 ,它
判定 GG。现证明它在多项式空间内运行 。
对输入〈G ,
6〉,G 是有向图 ,6 是 G 的结点:
1. 若 6 出度为 0 , 则拒绝 ,因为选手 I 立即输 。
2. 删去结点 6 以及与它关联的所有箭头 . 得到一个新图
, )
62 ,… ,
3. 对于 6 原先指向的每个结点幻 , 心 ,在 ( G ,
bi 上递归地调用 M。
4. 若所有调用都接受 ,则选手 II 在原先博弈中有必胜策略 ,所 以 拒 绝 。 否则 ,选
手 n 没有必胜策略 ,而选手 I 有必胜策略 ,因此接受 。”
本算法仅需要用来存储递归栈的空间 。递归的每一层给栈中添加一个结点 ,最多可能
有 m 层 ,w 是 G 的结点数 。因此算法在线性空间内运行 。
为了证明 GG 的 PSPACE 难解性 ,证明 FORMULA- GAME 多项式时间可归约到 GG 。
归约把公式
/ = 彐:n V OC 2 彐:r 3 Q A [0]
<>
&

"
映射为广义地理学的一个实例〈G,6〉 。 为了简单 ,这里假定 # 的量词以 3 开头 ,以 3 结尾 ,
并且 3 和 V 严格地交替出现 ,不符合这个假定的公式可以转化为稍长一些的符合假定的公
式 ,这只需添加一些额外的量词 ,约束一些在别处不使用的变量 ( 或称 “哑 ” 变量 )。 还
假定 0 是合取范式的 (参见问题 8.28 )。
对于归约构造图 G 上的地理学游戏 ,其中最优走步模拟
TRUE ^V
必上的公式博弈的最优走步 。 地理学游戏中的选手 I 扮演公
n
式博弈中的选手 E 的角色 ,选手 扮演选手 A 的角色 。
^ i FALSE

-
图 G 的结构部分地示于图 8 4 中 。游戏从结点 6 开始 ,
它出现在 G 的顶层左边 。 在 6 下面是一列钻石结构 ,# 的每
一个变量对应一个 。在描述 G 的右边之前 ,先看游戏在左边
如何进行 。
游戏从 6 开始 。选手 I 必须选择从 6 出发的两条边之一 ,
这两条边对应于选手 E 在公式博弈开始时的可能选择 。选手
I 选择左边 ,对应于公式博弈中选手 E 选择 TRUE ,选择右
边对应于 FALSE。 在选手 I 已经选择了一条边之后 ,假设
是左边那条 ,该选手 n 走步了。因为只有一条岀边 ,所以这
一步没有选择 。类似地 ,选手 I 的下一步也没有选择 ,游戏
-
图8 4 模拟公式博弈的地理学
从第二个钻石的顶部继续进行 。 现在再次有两条边 ,但是轮 游戏的部分结构
到选手 U 选择了 。这次选择对应于在公式博弈中选手 A 的第
一步 。 随着游戏以这种方式继续进行 ,选手 I 和 n 选择向右或向左的路径通过每个钻石
结构 。
在游戏经过所有钻石结构以后 ,路径的末端在最后一个钻石的底部结点 ,而且轮到选手
I走步了,因为假定最后一个量词是 3 。选手I的下一步没有选择。然后他们到达图 8 - 4 的结
点 r ,轮到选手 n 走下一步。
218 第三部分复杂性理论

地 理 学 游 戏 走 到 这 一 步 对 应 于 公 式 博 弈 过 程 的 结 束 。所 选 择 的 通 过 钻 石 结 构 的 路 径 对
应于给 0 的 变 量 的 赋 值 。在 该 赋 值 下 ,如 果 0 是 TRUE ,则 选 手 E 赢 得 公 式 博 弈 ;如 果 0
-
是 FALSE ,则 选 手 A 赢 。 图 8 5 所 示 的 右 边 结 构 保 证 当 选 手 E 赢 时 选 手 工 能 赢 ,而 且 当
n
选 手 A 赢 时 选 手 能 赢 ,说 明 如 下 。

TRUE FALSE

图 8- 5 模 拟 公 式 博 弈 的 地 理 学 游 戏 的 全 部 结 构 ,其 中 0= V 工2 籲
• 彐工走[( 工1 V 石 V 工3 )八

(五 V 瓦 V …) 八 A( )]

在 结 点 c ,选 手 n 可 以 选 择 一 个 对 应 0 的 某 个 子 句 的 结 点 ,然 后 选 手 I 可 以 选 择 一 个
对 应 该 子 句 中 的 一 个 文 字 的 结 点 。对 应 不 带 非 的 文 字 的 结 点 连 接 到 对 应 有 关 变 量 的 钻 石 的
左 边 (TRUE ),对 于 带 非 的 文 字 和 右 边 ( FALSE ) 情 况 类 似 ,如 图 8 5 所 示 。 -
如果 0 是 FALSE ,则 选 手 II 可 以 选 择 不 满 足 的 子 句 而 取 胜 。 选 手 I 此 时 可 以 选 择 的
文 字 都 是 FALSE ,并 被 连 到 钻 石 中 还 未 走 过 的 那 一 边 。 于 是 选 手 II 可 以 选 择 钻 石 中 的 那
个 结 点 ,而 选 手 I 无 法 走 步 了 ,从 而 输 掉 。如 果 0 是 TRUE ,则 选 手 n 挑 选 的 所 有 子 句 都
包 含 TRUE 文 字 。选 手 工 在 选 手 II 走 步 后 选 择 那 个 文 字 。因 为 该 文 字 是 TRUE ,所 以 它
被 连 到 钻 石 中 已 经 走 过 的 那 一 边 ,因 此 选 手 n 无 法 走 步 ,输 掉。 ■

定 理 8 . 1 1 说 明 在 广 义 地 理 学 中 ,不 存 在 计 算 最 佳 走 步 的 多 项 式 时 间 算 法 ,除 非 P =
PSPACE。我 们 希 望 在 计 算 如 国 际 象 棋 这 一 类 棋 盘 博 弈 的 最 佳 走 步 方 面 能 够 证 明 类 似 的 难
解 性 定 理 ,但 是 存 在 一 个 障 碍 。 采 用 标 准 的 8 X 8 国 际 象 棋 棋 盘 只 能 岀 现 有 穷 个 不 同 的 棋
局。理 论 上 ,所 有 这 些 棋 局 以 及 它 们 的 最 佳 走 步 可 以 放 在 一 张 表 里 。这 张 表 会 大 到 整 个 星
系 都 放 不 下 ,但 它 却 是 有 穷 的 ,可 以 存 放 在 图 灵 机 的 控 制 单 元 中 ( 甚 至 有 穷 自 动 机 的 控 制
单 元 中!)。于 是 机 器 就 可 以 通 过 查 表 在 线 性 时 间 内 走 出 最 佳 步 。也 许 在 将 来 会 有 办 法 度 量
有 穷 问 题 的 复 杂 性 ,但 是 目 前 的 办 法 是 渐 近 的 ,因 此 只 能 用 来 度 量 复 杂 性 随 着 问 题 规 模 的
增 加 而 变 化 的 增 长 率— 而 不 能 用 于 任 何 固 定 规 模 。不 过 ,通 过 把 许 多 棋 盘 博 弈 推 广 到
棋 盘 上 ,可 以 就 计 算 它 们 的 最 佳 走 步 的 难 解 性 给 出 某 些 证 据 。 这 种 推 广 的 国 际 象 棋 、
跳 棋 和 GO 已 被 证 明 是 PSPACE 难 的 ,甚 至 对 于 更 大 的 复 杂 性 类 是 难 的 ,这 有 赖 于 推 广 的
细 节。
襄, 章空间复杂性 219

8.4 L 类和 NL 类
到 目 前 为 止 ,我 们 只 考 虑 了 时 间 和 空 间 复 杂 性 界 限 至 少 是 线 性 的 情 况 ,即 界 限 /( W
至 少 是〃。现 在 考 察 更 小 的 亚 线 性 ( sublinear ) 空 间 界 限 。 在 时 间 复 杂 性 中 ,亚 线 性 界 限
还 不 够 读 完 输 人 ,所 以 这 里 不 考 虑 它 们 。 在 亚 线 性 空 间 复 杂 性 中 机 器 可 以 读 完 整 个 输 人 ,
但 是 它 没 有 足 够 的 空 间 存 储 输 入 。为 了 使 对 这 种 情 况 的 考 虑 有 意 义 ,必 须 修 改 计 算 模 型 。
下 面 引 人 一 种 有 两 条 带 子 的 图 灵 机 :一 条 只 读 输 入 带 和 一 条 读 写 工 作 带 。 在 只 读 带 上
输 人 头 能 读 取 符 号 ,但 不 能 改 变 它 们 。这 个 头 必 须 停 留 在 包 含 输 入 的 那 部 分 带 子 上 。可 以
给 机 器 提 供 一 个 方 法 ,使 它 能 够 检 测 读 写 头 处 于 输 入 的 左 端 和 右 端 的 时 刻 。 工 作 带 可 以 用
通 常 的 方 式 读 写 。只 有 工 作 带 上 被 扫 描 的 单 元 才 构 成 这 种 形 式 的 图 灵 机 的 空 间 复 杂 性 。
可 以 把 只 读 输 人 带 想 象 成 CD- ROM , 即 一 种 在 许 多 个 人 计 算 机 上 用 于 输 入 的 设 备 。
-
通 常 ,CD ROM 包 含 的 数 据 比 计 算 机 能 存 放 在 主 存 中 的 数 据 更 多 。 亚 线 性 空 间 算 法 允 许
计 算 机 处 理 没 有 全 部 存 放 在 主 存 中 的 数 据。
对 于 至 少 是 线 性 的 空 间 界 限 ,双 带 图 灵 机 模 型 等 价 于 标 准 的 单 带 模 型 ( 参 见 练
习 8 . 1 )。 对 于 亚 线 性 空 间 界 限 ,只 采 用 双 带 模 型 。
L 是 确 定 型 图 灵 机 在 对 数 空 间 内 可 判 定 的 语 言 类 。换 言 之 ,
L = SPACEClog n )
NL 是 非 确 定 型 图 灵 机 在 对 数 空 间 内 可 判 定 的 语 言 类 。换 言 之 ,
NL = NSPACEClog n )
我 们 关 注 log 〃空 间 ,而 不 关 注 如 士 或 log2〃空 间 的 理 由 与 选 择 多 项 式 时 空 界 限 的 理
由 相 似 。对 数 空 间 足 以 求 解 许 多 有 趣 的 计 算 问 题 ,而 且 其 数 学 性 质 也 富 有 吸 引 力 ,比 如 当
机 器 模 型 和 输 人 的 编 码 方 法 改 变 时 仍 保 持 稳 健 性 。指 向 输 入 的 指 针 可 以 在 对 数 空 间 内 表
示 ,所 以 考 虑 对 数 空 间 算 法 的 计 算 能 力 的 一 种 方 式 是 考 虑 固 定 数 目 的 输 人 指 针 的 计 算
能 力。

mm 语 言 A ={ 0 4 M 々>0 } 是 L 的 成 员 。在 7 . 1 节 中 描 述 了 一 个 判 定 A 的 图 灵
机 ,它 左 右 来 回 扫 描 输 人 ,删 掉 匹 配 的 0 和 1 。该 算 法 用 线 性 空 间 记 录 哪 些 位 置 已 经 被 删
掉 了 ,但 可 以 修 改 为 只 使 用 对 数 空 间 。
判 定 A 的 对 数 空 间 图 灵 机 不 能 删 除 输 入 带 上 已 经 匹 配 的 0 和 1,因 为 该 带 是 只 读 的 。
机 器 在 工 作 带 上 用 二 进 制 分 别 数 0 和 1 的 数 目 ,唯 而 要的空间是用来记录这两个计数器
的 。在 二 进 制 形 式 下 ,每 个 计 数 器 只 消 耗 对 数 空 间 ,因 此 算 法 在 O( l o g n ) 空 间 内 运 行 。
所以 A G L。 ■

H :H
( 回 忆 7.2 节 中 定 义 的 语 言 PATf / = {〈G,
hA|G 是 包 含 从 5 到 z 的 有 向 路 径
的 有 向 图 }。定 理 7.1 2 证 明 PATH 属 于 P,但 是 给 岀 的 算 法 消 耗 线 性 空 间 。 还 不 清 楚
PATH 是 否 能 确 定 性 地 在 对 数 空 间 内 解 决 ,但 是 的 确 知 道 一 个 判 定 P A T H 的 非 确 定 性 的
对 数 空 间 算 法。
判 定 P A T H 的 非 确 定 型 对 数 空 间 图 灵 机 从 结 点 s 开 始 运 算 ,非 确 定 地 猜 测 从 5 到 的
路 径 的 每 一 步 。机 器 在 工 作 带 上 只 记 录 每 一 步 当 前 结 点 的 位 置 ,而 不 是 整 条 路 径 (否 则 将
超 出 对 数 空 间 的 要 求 )。机 器 从 当 前 结 点 所 指 向 的 结 点 中 非 确 定 地 选 择 下 一 个 结 点 。它 反
复 执 行 这 一 操 作 ,直 至 到 达 结 点《 而 接 受 ,或 者 执 行 m 步 以 后 拒 绝 ,其 中 m 是 图 中 的 结 点
220 第三部分复杂性理论

数 。因此 PATH 属于 NL。 臞

以前所得出的关于 /(〃) 空间界限的图灵机也在 2 G(


”时间内运行的断言对于非常小
的空间界限就不再成立 。例如 ,消耗 0( 1 ) ( 即常数 ) 空间的图灵机就可能运行 n 步 。 为
了获得适用于所有空间界限 /( « ) 的运行时间界限 ,给出下面的定义 。

^^
83
M 是 一 个 有 单 独 的 只 读 输 入 带 的 图 灵 机,
若 , M 在 上的 W 是输入 则 VV

^…
格局包含状态 工作带和两个读写头位置 。输入 w 不作为
、 在加上的格局的一部分 。
G( /( w ))
如果 M 在 / U ) 空间内运行 ,W 是长为 n 的输入 ,则 在加上的格局数是 n 2 。
为了解释这一结果 ,设 M 有 c 个状态和 g 个带子符号 。能够出现在丁作带上的字符串的
数目是 K/( n > 。输入头可以处在〃个位置之一 ,工作带头可以处在 / U ) 个位置之一 。因此
M 在 w 上 的 格 局 总 数 (也 就 是 M 在 w 上 的 运 行 时 间 的 上 界 ) 等 于 c n f ( n )
⑷)
或 。
我们几乎只关注不小于 log 〃的空间界限 /(〃)。 对于这样的界限 ,前面关于机器的时
间复杂性最多不超过它的空间复杂性的指数倍的断言依然成立 ,因为当 / U ) > log 〃时 ,

2 ( /( > ) 等于 2 ( /( r ))

^
?

回忆一下 ,萨维奇定理表明 ,非确定型图灵机可以转化为确定型图灵机 ,而在 /U )>77


时 ,空间复杂性 /( « ) 只增加平方。可以推广萨维奇定理 ,使它对于亚线性空间界限 /( « )>
log W 也能成立 。证明与 7.1 节给出的原始证明基本相同 ,只是采用有只读输入带的图灵
机 ,在涉及 N 的 格 局 的 地 方 改 用 N 在 上 的 格 局。 存 储 在 1,上 的格局需要

~ ^
W

° > log n ,则存储消耗是 0( /( n )),证明


( /( w ))
log ( M 2 )= log n +0( f ( n ) ) 空间 。如果 /( n )
的其余部分都相同 。

8.5 NL 完全性
正如在例 8.14 中提到的 ,已知 PATH 问题属于 NL,但不知道它是否在 L 中。人们相
信 PATH 不属于 L,但是不知道怎样证明这一猜想。 实际上 ,还不知道 NL 中有哪一个问题
可以被证明不属于 L。 类似于 P = NP 是否成立的问题 ,也有 L = NL 是否成立的问题 。
作为解决 L 与 NL 问题的一个步骤 ,需要先证明某些语言是 NL 完全的 。正如其他复
杂性类的完全语言一样 ,NL 完全语言在一定意义上是 NL 中最困难的语言的样例 。如果
L 与 NL 不相等 ,那么所有 NL 完全语言就不属于 L。
如前面完全性的定义一样 ,NL 完全语言定义为属于 NL,并且 NL 中的所有其他语言
都可归约到它 。但是这里不用多项式时间可归约性 ,这是因为所有 NL 中的问题都在多项
式 时 间 内 可 解 。除 了0和 以 外 ,NL 中的任何两个问题都是互相多项式时间可归约的
( 参见 8.3 节 PSPACE 完全性的定义中关于多项式时间可归约性的讨论 ),所以多项式时
间可归约性太强 ,不能把 NL 中的问题彼此区分开 。可以改用一种新型可归约性 ,称为对
数 空 间 可 归 约 性。
对数空间转换器 ( log space transducer ) 是有一条只读输入带 、 一条只
写输岀带和一条读 / 写工作带的图灵机 。输出带的头部不能向左移动 ,因此它不能读已写
内容 。工作带可以包含 O( logU )) 个符号。对数空间转换器 M 计 算 一 个 函 数 ,
其中 f ( w ) 是把 w 放在 M 的输入带上启动 M 运行到 M 停机时输出带上存放的字符串。
称 / 为对数空间可计算函数 ( log space computable function )。如 果 语 言 A 通 过 对 数 空 间
第次章空间复杂性 221

可 计 算 函 数 / 映 射 可 归 约 到 语 言 B ,则 称 A 对 数 空 间 可 归 约 ( log space reducible ) 到 B ,


记为 A<LB 0

现 在 已 经 做 好 定 义 NL 完 全 性 的 准 备 。
语言 B 是 NL 完 全 的 ,如 果
1. B G N L , 并 且
2. NL 中 的 每 个 A 对 数 空 间 可 归 约 到 B 。
如 果 一 个 语 言 对 数 空 间 可 归 约 到 另 一 个 已 知 属 于 L 的 语 言 ,则 这 个 语 言 也 属 于 L,如
下 述 定 理 所 阐 明 的。
A < LB 且 B 6 L,则 A 6 U
证 明 本 定 理 的 一 个 诱 人 的 证 明 思 路 是 仿 照 定 理 7.25 的 模 式 ,那 里 证 明 了 多 项 式 时
间 可 归 约 性 的 类 似 结 果 。 按 照 这 种 思 路 ,A 的 对 数 空 间 算 法 首 先 用 对 数 空 间 归 约 / 把 输 入
w 映 射 为 /( ttO , 然 后 应 用 B 的 对 数 空 间 算 法 。但 是 存 储 /( ) 的空间需求量可能太大,
不 能 放 进 对 数 空 间 界 限 内 ,所 以 需 要 修 改 这 种 方 法 。
^
^
A 的 机 器 不 再 算 出 整 个 /( w ),而 是 当 B 的 机 器 iV 需 要 的 时 候 计 算 /( w ) 的 个 别
符 号。在 模 拟 过 程 中 ,MA 记 录 的 输 入 头 在 /( w ) 上 的 位 置 。 每 一 次 MB 移 动 时 。 MA
重 新 开 始 在 w 上 计 算 / ,除 了 所 需 要 的 /( w ) 上 的 位 置 以 外 ,其 余 输 出 全 部 忽 略 。 这 么 做
可 能 不 时 地 要 求 重 新 计 算 /( ) 的 某 些 部 分 ,因 而 在 时 间 复 杂 性 方 面 是 低 效 的 。 这 种 方 法

^
的 好 处 是 在 任 何 时 刻 只 需 存 储 /( w ) 的 一 个 符 号 ,其 结 果 是 用 时 间 来 换 取 空 间 。
若 有 一 个 NL 完 全 语 言 属 于 L ,则 L = NL。

图中的搜索
PATH 是 NL 完 全 的 。
证 明 思 路 例 8.14 证 明 了 属 于 NL ,所 以 只 需 证 明 PATH 是 NL 难 的 。换 言
之 ,必 须 证 明 NL 中 的 每 个 语 言 A 对 数 空 间 可 归 约 到 PATH 。
从 A 到 PATH 的 对 数 空 间 归 约 背 后 的 思 想 是 构 造 一 个 图 ,用 来 表 示 判 定 A 的 非 确 定
型 对 数 空 间 图 灵 机 的 计 算 过 程 。归 约 把 字 符 串 加 映 射 为 一 个 图 ,图 中 结 点 对 应 于 非 确 定 型
图 灵 机 在 输 入 w 上 的 格 局 。一 个 结 点 能 指 向 另 一 个 结 点 的 条 件 是 第 一 个 结 点 对 应 的 格 局 能
在 非 确 定 型 图 灵 机 的 一 步 内 产 生 第 二 个 结 点 对 应 的 格 局 。 因 此 ,只 要 从 对 应 初 始 格 局 的 结
点 到 对 应 接 受 格 局 的 结 点 之 间 存 在 一 条 路 径 ,则 机 器 接 受 W o
证 明 这 里 说 明 了 怎 样 给 出 一 个 从 NL 中 的 任 意 语 言 A 到 P A T H 的 对 数 空 间 归 约。
设 非 确 定 型 图 灵 机 M 在 O( logn ) 空 间 内 判 定 A 。给 定 输 人 如 在 对 数 空 间 内 构 造
其 中 G 为 有 向 图 ,G 包 含 从 s 到〖 的 路 径 当 且 仅 当 M 接 受 比 。
G 的 结 点 是 M 在 w 上 的 格 局。对 于 M 在 w 上 的 格 局 和 ,如 果 Q 是 M 从 o 出 发
的 下 一 个 可 能 的 格 局 ,则 ( n ,
Q)

^^
是 G 的 一 条 边 。更 精 确 地 说 ,如 果 M 的 转 移 函 数 指 出 ,
的 状 态 和 它 的 输 入 带 头 和 工 作 带 头 下 的 符 号 一 起 能 产 生 下 一 个 状 态 和 带 头 动 作 ,使 变

^
C\

成 Q ,那 么 (O ,
Q ) 是 G 的 一 条 边 。结 点 s 是 iVf 在 w 上 的 初 始 格 局 。 机 器 M 被 修 改 为 只

有 唯 一 的 接 受 格 局 ,把 该 格 局 指 定 为 结 点 I
该 映 射 把 A 归 约 到 PATH ,原 因 是 只 要 M 接 受 输 人 ,它 就 有 一 个 计 算 分 支 接 受 ,这
对 应 于()中 一'条 从 起 始 格 局 5 到 接 受 格 局〖 的 路 径 。 反 之 ,如 果()中 存 在 从 .S 到 / 的 路 径 ,
_
222 第三部分复杂性理论

则 M 在 输 入 w 上 运 行 时 ,某 个 计 算 分 支 必 定 接 受 ,从 而 M 接 受 zv o
为 了 证 明 该 归 约 在 对 数 空 间 内 运 算 ,给 岀 一 个 对 数 空 间 转 换 器 ,它 在 输 入 w 上 输 出
s,
<G , t ) 通 过 列 出 G 的 结 点 和 边 来 描 述 G 。列 出 结 点 很 容 易 ,因 为 每 个 结 点 是 M 在 w 上
0

的 一 个 格 局 ,可 以 在 空 间 dog 内 表 示 出 来 ,c 是 某 个 常 数 。转 换 器 顺 序 地 走 遍 所 有 可 能
的 长 为 dog

^ ^
的 字 符 串 ,检 查 每 一 个 是 否 为
…^…
在! 上 的 合 法 格 局 ,输 出 那 些 通 过 检 查 的
字 符 串 。类 似 地 ,转 换 器 也 列 出 边 。对 数 空 间 足 以 验 证 在! 上 的 一 个 格 局 C 1 能 否 产 生
格局 Q ,因 为 转 换 器 只 需 通 过 考 察

函数是否会产生格局 Q
^
o 中 读 写 头 位 置 下 的 带 子 内 容 ,以 此 来 决 定 M 的 转 移
作 为 结 果 。转 换 器 依 次 检 查 所 有 的 ( n ,
C2 ),探 知 哪 些 是 G 的 合 格

的 边 。那 些 合 格 的 边 被 添 加 到 输 出 带 上 。
定 理 8.20 的 一 个 直 接 的 副 产 品 是 下 面 的 推 论 ,它 称 NL 是 P 的 子 集 。
Po
NL
^
证 明 定 理 8.20 说 明 ,NL 中 的 任 何 语 言 对 数 空 间 可 归 约 到 PATH 。前 边 讲 过 ,消
耗 空 间 /(〃) 的 图 灵 机 在 时 间〃2G( /( W )) R 运 行 ,所 以 在 对 数 空 间 内 运 行 的 归 约 器 也 在 多 项
式 时 间 内 运 行 。因 此 ,NL 中 的 任 何 语 言 多 项 式 时 间 可 归 约 到 PATH ,由 定 理 7.12 知 后
者 属 于 P。又 知 每 一 个 多 项 式 时 间 可 归 约 到 P 中 的 语 言 的 语 言 也 在 P 中 ,所 以 证 毕 。 ■

虽 然 对 数 空 间 可 归 约 性 限 制 更 加 严 格 ,但 是 由 于 计 算 问 题 通 常 是 简 单 的 ,故 对 于 复 杂
性 理 论 中 的 大 多 数 归 约 来 说 ,它 已 经 够 用 了 。 例 如 在 定 理 8.8 中 ,已 经 证 明 了 每 一 个
PSPACE 问 题 在 多 项 式 时 间 内 归 约 到 TQBF。在 归 约 过 程 中 产 生 了 重 复 度 高 的 公 式 ,它 们

完 全 的 。这 个 结 论 在 推 论 9.6 中 证 明 [ 、
或 许 可 在 对 数 空 间 内 计 算 ,因 此 或 许 可 以 得 出 结 论 : 利 用 对 数 空 间 ,TQBF 是 PSPACE
?3?八0 时 非 常 有 用。这 种 分 离 和 对 数 空 间 可

归 约 性 表 明 TQBF 芒 NL。

8.6 NL 等 于 coNL
本 节 包 含 有 关 复 杂 性 类 之 间 相 互 关 系 的 已 知 结 果 中 最 惊 人 的 结 果 之 一 。 一 般 认 为 NP
与 coNP 是 不 相 等 的 。乍 一 看 ,同 样 的 结 果 对 于 NL 和 coNL 似 乎 也 成 立 。 事 实 上 ,正 如
将 要 证 明 的 ,NL 等 于 coNL。这 说 明 我 们 关 于 计 算 的 直 觉 仍 有 许 多 空 白 。
NL = coNL。
证 明 思 路 为 了 证 明 coNL 中 的 每 个 问 题 也 在 NL 中 ,先 证 明 PATH 属 于 NL , 因 为
PATH 是 NL 完 全 的 。所 给 出 的 判 定 PATH 的 NL 算 法 M 在 图 G 不 包 含 从 s 到 的 路 径
时 ,必 须 有 一 个 接 受 计 算 。
首 先 解 决 一 个 容 易 些 的 问 题。令 c 是 G 中 从 s 可 达 的 结 点 数 。假 定 c 作 为 输 人 提 供 给
M , 先 说 明 怎 样 利 用 c 求 解 PATH ,然 后 再 说 明 怎 样 计 算 c 。
给 定 G, Z 和 c ,机 器 M 如 下 运 算 。M 逐 个 地 走 遍 G 的 所 有 m 个 结 点 ,非 确 定 地 猜
s,
测 每 个 结 点 是 否 从 s 可 达 。一 旦 结 点 w 被 猜 测 为 可 达 ,M 就 通 过 猜 测 一 条 从 s 到 z/ 的 路 径
来 验 证 这 一 点 。 如 果 一 个 计 算 分 支 没 能 在 m 步 内 验 证 这 一 猜 测 ( m 是 G 的 结 点 数 ),就 拒
绝 。另 外 ,如 果 一 个 分 支 猜 测 〖 可 达 ,就 拒 绝 。机 器 M 对 那 些 已 经 被 验 证 为 可 达 的 结 点 计
数 。当 一 个 分 支 走 遍 G 的 所 有 结 点 后 ,它 查 验 从 s 可 达 的 结 点 数 是 否 等 于 c ( 即 实 际 可 达
的 结 点 数),如 果 不 等 于 就 拒 绝 。 否 则 该 分 支 接 受 。
换 言 之 ,如 果 M 恰 好 非 确 定 地 挑 选 了 从 s 可 达 的 c 个 结 点 (不 包 括 0 , 并 且 通 过 猜 测
第S 章 空 间 复 杂 性 223

路径证实了每一个都从 6 可达 ,则 M 就知道剩余的结点 ( 包括 0 都不可达 ,所以它就可


以接受 。
接下来说明怎样计算 c ,即从 s 可达的结点数 。描述一个非确定的对数空间过程至少
有一个计算分支具有正确的 c 值 ,而所有其他分支都拒绝 。
对于从 0 到 /72 的每个值 f ,定义九 为 G 中与 s 的距离不超过 〗 的结点的集合 (即从 s
出发有一条长度不超过 〖 的路径)。于是 Ao ={ s },每个 Aw 包含从 s 可达的所
有结点 。令 是 A , 中的结点数 。下面描述一个过程 ,从 中计算出 + 1 。 反复应用这一

^ ^
G
过程 ,就获得所需的值 c = c
从 ct 中计算出 所用的思路与前面给出的思路相似 。 算法走遍 G 的所有结点 ,决
定每一个结点是否为 Al + 1 的成员 ,然后数成员的个数 。
为了判定结点 是否在 A ,+ 1 中 ,用一个内层循环走遍 G 的所有结点 ,猜测每一个结

^
点是否在八:中 。每一次成功的猜测是由猜测一条从 s 岀发 、 长度至多为 f 的路径来证实 。
对于每个证实了在 A , 中 的 结 点 ,算 法 检 查 是 否 是 G 的一条边 。如果是其中的一

条边 ,则 I 在 Al + 1 中 。另外 ,证实了在 A , 中的结点的数目也被计算出来 。在内层循环结
束 时 ,如 果 证 实 属 于 的 结 点 总 数 不 等 于 则 A: 的全部结点还没有被找完 ,所以该计
算 分 支 拒 绝 。 如 果 总 数 的 确 等 于 并 且 I;还没有证实属于 A ,则可以下结论说它不在
中 。然后走到下一个 % 开始外层循环 。
证 明 判 定 PATH的算法如下 。这里令 m 为 G 的结点数 。
=“对输入〈G, 5,
之〉:
1 令 Co —1 6/ =0 o [A 0 = { 5 }有 1 个结点]
2 对 f =0 到 m -l : [从 G 计算 C ,+ l ]
3. 令 Cl+ l =1 O [G + i 计数在 Al + 1 中的结点]
4. 对 G 中的每个结点 T;( V 关S ): [检查是否 A , -M ]
5. 令 d =0 o [d 计数 Ai 中的结点数]
6. 对 G 中的每个结点 M : [检查是否 wGA ,]
非确定地执行或者跳过下列步骤 :
8. 非确定地沿着从 s 岀发 、 长度至多为 〗 的路径行进 ,如果没

有碰到结点 w ,就拒绝 。
9. d 加 1。 E ^ eA, ]
10 . 如果 ( u ,
v ) 是 G 的一条边 ,则 G +1 加 1 。W 变为下一个结
点 ,转向步骤 5 。 Ai+i ]
11. 若 d 古 a ,则拒绝 。 [检查是否找到所有 A:]
12 令 d = 0 o [现在已知 Cm ,d 计数 Aw 中的结点数]
13. 对 G 中的每个结点 [检查是否 wG Am ]
14 . 非确定地执行或跳过下列步骤 :
15 . 非确定地沿着从 s 出发 、 长度至多为 m 的路径行进 ,如果没有碰到结
点 w 就拒绝 。
16 . 若 u = t ,则拒绝 。 [找到从 s 到 f 的路径]
17 . d 加 1。 [w 6 Am ]
224 第三部分复杂性理论

1 8. 若 d 參 c m ,则拒绝 ;否则 ,接受 。


” [检 查 是 否 找 到 所 有 属 于 的 结 点]
在任何时刻 ,本算法只需存储 和一个指向路径末端的指针 ,所以
它在对数空间内运行 。( 注意 :M 也接受格式错误的输入 。 )
把当前已知的关于几个复杂性类之间相互关系的认识总结如下:

^ ^
PSPACE
L NL = coNL NP
^
我们还不知道这些包含关系是否有真包含 ,虽然在第 9 章推论 9 . 6 中将证明 N L C
PSPACE 。 所以 ,coNLSP 和 PSPSPACE 中一定至少有一个成立 ,但是不知道哪一个
成立! 大多数研究者推想所有这些包含关系都是真包含 。

-
练习
8.1 证 明 对 于 任 意 函 数 /: N R + , 其 中 /( « )> 不论用单带图灵机模型还是用双带只读输入图
灵 机 模 型 ,所 定 义 的 空 间 复 杂 性 类 SPACE( /(〃)) 总是相同的 。
8.2 考 虑 下 面 标 准 的 儿 童 游 戏 的 棋 局 。设 下 一 步 轮 到 X 方 选 手 走 。请 描 述 该 选 手 的 必 胜 策 略 。(回 忆
前 边 所 学 内 容 ,必 胜 策 略 不 仅 仅 是 在 当 前 棋 局 中 的 最 佳 走 步 ,它 还 包 括 该 选 手 为 了 取 胜 而 必 须
采 取 的 所 有 应 手 ,不 论 对 手 如 何 走 步 。

8.3 考 虑 下 图 所 示 的 广 义 地 理 学 游 戏 ,其 中 起 始 结 点 就 是 由 无 源 箭 头 指 向 的 结 点 。 选 手 I 有必胜策
略 吗? 选 手 n 呢? 给 出 理 由 。
XD ~~K2)~K3)
4 5

8.4 证 明 PSPACE 在 并 、 补 和 星 号 运 算 下 封 闭 。
A8 . 5 证明 ADFAGL。
8.6 证 明 PSPACE 难 的 语 言 也 是 NP 难 的 。
A8 .7 证 明 NL 在 并 、 连 接 和 星 号 运 算 下 封 闭 。

问题
*
8.8 尼 姆 游 戏 的 道 具 是 几 堆 树 枝 。 在 一 步 中 ,选 手 从 一 个 堆 中 拿 走 至 少 一 根 树 枝 。 选 手 们 轮 流 交 替
地 拿 走 树 枝 ,拿 走 最 后 一 根 树 枝 的 选 手 算 输 。假 设 在 尼 姆 的 一 个 局 势 中 有 々 堆 树 枝 ,每 堆 分 別
包含 …,
, 4 根 树 枝 。如 果 把 每 个 数 写 成 二 进 制 形 式 ,并 且 每 个 二 进 制 数 排 成 矩 阵 的 一 行 ,

^
低 位 对 齐 以 后 ,每 一 列 包 含 偶 数 个 1 ,则 称 局 势 是 平 衡 的 。 证 明 下 面 两 个 事 实 :
a. 从 一 个 非 平 衡 的 局 势 出 发 ,存 在 一 步 使 得 局 势 变 成 平 衡 的 。
b. 从 一 个 平 衡 的 局 势 出 发 ,每 一 步 都 使 得 局 势 变 成 非 平 衡 的 。

…,
N I M = { < 5! , &> I 每个是二进制数,
选手 I 在尼姆游戏中从该局势出发有必胜策略 }
利 用 前 面 关 于 平 衡 局 势 的 事 实 证 明 N I M 属 于 L。
8.9 令 是 二 进 制 自 然 数 且 aX 6= c }。证明 ML/LTGL。

表示 A 是 B 的真子集 。 译者注
襄汐章空间复杂性 225

8.1 0 对 任 意 正 整 数 X,令 , 是 将:r 的 二 进 制 形 式 颠 倒 后 得 到 的 整 数 (假 设 x 的 二 进 制 形 式 首 位 不 是


N ,其 中 尺 + (: +

^
0 )。定 义 函 数 尺 r )=:r : 。
a. 令 A 2 ={〈:, 3;|尺 + ( 工)= 3;
〉 },证 明 A 2 L 。

8. 11
b. 令 A 3 =〈
^

{ x,
a. 令 ADD =〈 y,

{ :r ,
z〉
y|


U,
尺 ( 尺 + ( x ))=:
>
y,
+ y },证 明 A 3 L。
- - y= z ) , 证 明 ADDGL。
z > 0 且 为 二 进 制 整 数 ,x \
b. 令 PAL-ADD =〈 1 工,
3 >0 且 为 二 进 制 整 数 ,I + J 是 整 数 且 其 二 进 制 表 示 是 回 文 }。( 假

^
{ : 3;

A D D 6 L。 ^
设 求 和 的 结 果 的 二 进 制 首 位 不 是 0 , 顺 读 和 倒 读 都 是 一 样 的 字 符 串 称 为 回 文。
) 证 明 PAL-

*
8.12 :
令 L/CyCL £ =〈 |G 是 包 含 一 个 简 单 回 路 的 无 向 图 },证 明 [/CYCLEeL 。
{ G〉 (注 :G 可 能 不 是 连
通 图。

*
.
8 13 证明对每个 存 在 两 个 长 度 为 p0 bU ) 的 正 则 表 达 式 尺 和 S ,其 中 L( i? )关 US),但 它 们 包 含
的 第 一 个 相 异 的 字 符 串 是 指 数 长 的 。换 言 之 ,U R ) 和 L( S) 必 须 是 不 同 的 ,然 而 对 某 些 常 量
>0 , 字 符 串 的 长 度 为 P 时 二 者 是 一 样 的 。
8.14 如 果 无 向 图 的 结 点 可 以 分 成 两 个 集 合 ,使 得 所 有 边 都 从 一 个 集 合 的 结 点 连 到 另 一 个 集 合 的 结
点 ,则 该 无 向 图 称 为 二 部 的 ( bipartite)。证 明 一 个 图 是 二 部 的 当 且 仅 当 它 不 含 有 奇 数 个 结 点 的
圈 。令
BIPARTITE = 〈 〉 G 是二部图}
{ G|

^
证 明 BJPAi TVTEGNL。
8.1 5 令 L/PA 丁H 是 无 向 图 中 PATH 的 对 偶 ,证 明 。( 注 :在 文 献 C). Rein -
gold[6 2]中 证 明 了 L/PATT/ GL ,Siti:BIPARTITEe L , 但 其 算 法 有 点 复 杂 。

8.16 回 忆 一 下 ,在 有 向 图 中 ,如 果 每 一 对 结 点 间 都 有 双 向 的 有 向 路 径 连 接 ,则 它 称 为 强 连 通 的
( strongly connected ) 0 令

STRONGLY- CONNECTED = {〈 G〉 |G 是 强 连 通 图 }
证 明 STRONGLY- CONNECTED 是 NL 完 全 的。

^
8.17 令 ,M2 ) \ MY 和 M2 是 NFA’UiV ) fl L( M2 )关 0 }。 证 明 B O T H N F A 是 NL 完
全 的。
8 . 1 8 证 明 AnfaS NL 完 全 的 。
8 . 1 9 证 明 EDFA 是 NL 完 全 的 。
*
8.20 证 明 2 SAT 是 NL 完 全 的 。
8.21 令 C N F H1 = { < 0 k 是 一 个 可 满 足 的 cnf 公 式 ,其 中 每 个 子 句 包 含 任 意 多 个 肯 定 的 文 字 ,但 最 多
只 有 一 个 否 定 的 文 字 。并 且 ,每 个 否 定 的 文 字 在 彡 中 最 多 出 现 一 次 }。 证 明 CiVFH1 SNL 完
全 的。
*
.
8 22 给 岀 一 个 是 NL 完 全 的 上 下 无 关 语 言。
A* 8.23 令 CYCLE =〈 > G 是 包 含 一 个 有 向 回 路 的 有 向 图 }。证 明 CrcLE 是 NL 完 全 的 。
{ G|
.
8 24 { R,
令 EQREX = 〈 S〉| 尺 和 S 是 等 价 的 正 则 表 达 式 }。证 明 EQREXGPSPACE。
8.25 梯 子 ( ladder ) 是 一 个 字 符 串 的 序 列 51 52 ** •»5
* 其中每个字符串与前一个字符串恰好只在一
个 字 母 上 不 同 。例 如 ,下 面 是 一 个 英 文 单 词 的 梯 子 :
head ,hear ,near , fear , bear,beer , deer , deed , feed , feet , fret , free
4 LADD£: { M,
i? DFA = 〈

结 束 的 梯 子 }。证 明 LADM i? DFA 属 于 PSPACE。

s , 0 | M S f D F A ,L ( M) 包含一个以字符串 5 开 头 、以 字 符 串 z

8.26 五 子 棋 游 戏 由 两 名 选 手 “X” 和 “ O” 在 1 9 X 1 9 的 网 格 上 比 赛 。选 手 们 轮 流 放 棋 子 ,第 一 个 把
自 己 的 5 个 棋 子 连 续 地 放 在 一 行 、 一 列 或 者 一 条 对 角 线 上 的 选 手 就 是 贏 家 。考 虑 把 该 游 戏 推 广
到 棋 盘 上 。令
GM = { ( B ) I 其 中 选 手“X”有 必 胜 策 略 }
J3 是 推 广 的 五 子 棋 的 棋 局 ,
226 第三部分复杂性理论

这 里 的 棋 局 是 指 放 有 一 些 棋 子 的 棋 盘 ,它 可 能 在 下 棋 的 过 程 中 出 现 。
证 明 GMG PSPACE。
.
8 27 证 明 如 果 每 一 个 NP 难 的 语 言 也 是 PSPACE 难 的 ,则 PSPACF = NP。
8.28 证 明 当 限 制 跟 在 量 词 后 面 的 那 部 分 公 式 是 合 取 范 式 时 ,TQBF 仍 是 PSPACE 完 全 的 。
8.29 定 义 八 隱 二 以 剋 ⑽糾 剋 是 一 个 接 受 输 入 功 的 LBA } , 证 明 ALBA 是 PSPACE 完 全 的 。
*
8.30 猫 捉 老 鼠 游 戏 由 两 名 选 手 “猫” 和 “老 鼠” 在 一 个 任 意 的 无 向 图 上 竞 赛 。在 给 定 时 刻 ,每 名 选
手 占 据 图 的 一 个 结 点。 选 手 们 轮 流 走 到 与 当 前 占 据 的 结 点 相 邻 的 结 点 上 。图 中 有 一 个 特 殊 的 结
点 称 为 “洞”。 如 果 双 方 同 时 占 据 同 一 个 结 点 ,则 猫 赢 。如 果 老 鼠 在 此 之 前 到 达 洞 ,则 老 鼠 赢 。
如 果 双 方 同 时 到 达 以 前 占 据 的 位 置 ,则 为 平 局 。令
HAPPY- CAT = {〈 G,
c, /0 丨 G ,
m, c, h 分 别 为 图 和 猫 的 位 置 、老 鼠 的
m,
位置和洞 ,
使得如果猫先走 ,
则猫有必胜策略 }

-
证 明 HAPPy CAT 属 于 P。
8.31 考 虑 问 题 7.3 9 中 描 述 的 语 言 PUZZLE 的 双 人 版 。每 名 选 手 开 始 时 都 有 一 叠 排 好 序 的 谜 卡 。他
们 轮 流 地 按 序 把 卡 片 放 进 盒 子 ,并 有 权 选 择 哪 一 面 朝 上 。 如 果 在 最 终 的 盒 子 中 所 有 孔 的 位 置 都
被 堵 住 了 ,则 选 手 I 赢 。如 果 还 有 孔 的 位 置 没 被 堵 住 ,则 选 手 n 赢 。证 明 对 于 给 定 的 卡 片 的 起
始 格 局 ,判 定 哪 位 选 手 有 必 胜 策 略 的 问 题 是 PSPACE 完 全 的 。
.
8 32 理 解 在 问 题 7.2 1 中 对 MJN- FORMULA 的 定 义 。
a. 证 明 PSPACE。
b. 解 释 下 面 的 论 证 为 何 不 能 证 明 MIN- FORMULA 6 coNP:
如 果 尺ML7LA , 则 # 有 更 小 的 等 价 公 式 。一 个 非 确 定 型 图 灵 机 通 过 猜 测 这 个 等
价 公 式 能 验 证 j eMIN - FORMULA
<> Q

.
8 33 设 A 是 由 正 确 嵌 套 的 圆 括 号 组 成 的 语 言。例 如 , (( )))( ) 属 于 A . 而 )
(( )) 和 (( ) (则 不 属 于
A 。证 明 A 属 于 L。
*
8.34 设 B 是 由 正 确 嵌 套 的 圆 括 号 和 方 括 号 组 成 的 语 言。 例 如 , :
([ ( )( )]( )[ ]) 属 于 J3 , 而 ([)]不
属 于 B。证 明 B 属 于 L。

习题选解
8.5 构 造 一 个 图 灵 机 M 判 定 ADFA 。 对 于 输 人 (其 中 A 为 DFA ,如 是 一 个 字 符 串),M 在 W
上 模 拟 A ,方 法 是 通 过 跟 踪 A 的 当 前 状 态 和 输 入 头 的 位 置 ,并 适 时 地 修 改 它 们 。 因 为 只 需 要 存
储 指 向 输 入 的 指 针 ,所 以 完 成 这 个 模 拟 需 要 的 空 间 是 Odog 幻 。
8.7 令 义!,A 2 分 别 是 由 NL 机 器 州 和 iV2 判 定 的 语 言。构 造 三 个 图 灵 机 :Nu 判 定 AiUA ,iV。
判 定 Al 0 A 2 , JV * 判 定 Af , 每 个 图 灵 机 的 输 入 为 w。
图灵机 iVu 不 确 定 地 分 支 来 模 拟 州 或 iV2 , 在 两 种 情 况 下 ,如 果 被 模 拟 的 机 器 接 受 ,则 Nu
接受。

图 灵 机 iV 不 确 定 地 在 输 入 串 中 选 择 一 个 位 置 将 它 分 成 两 个 子 串 。由 于 没 有 足 够 的 空 间 存 储 子

串 ,所 以 在 工 作 带 上 只 存 放 该 位 置 的 指 针 。首 先 ,N 在 第 一 个 子 串 上 模 拟 iV。不确定地分
支 模 拟 iV! 的 不 确 定 性 。在 其 中 任 何 一 个 分 支 上 达 到 的 接 受 状 态 后 ,iV。在第二个子串上模
拟 iv2 。如 果 其 任 何 一 个 分 支 达 到 iV2 的 接 受 状 态 ,则 N 接受 。 。
机 器 的 算 法 比 较 复 杂 ,下 面 描 述 其 步 骤 。
N ,= “对 于 输 入 说:
1. 初 始 化 两 个 输 入 位 置 指 针 灼 和 外 ,令 外 = 0 ,外 = 0 , 即 外 和 和 指 向 第 一 个 输 人 字
符 前 面。
2. 若 p2 之 后 无 输 入 符 号 则 接 受 。
襄汐章空间复杂性 227

3. 向前移动外 ,非确定地选择一个输入位置 。
4. 在 h 和外之间的子串上模拟 iVi ,分支不确定地模拟 M 的不确定性 。
5. 若模拟的这个分支达到了 M 的接受状态 ,则令仏 = 外 ,返回步骤 2。如果 M 在这

个分支上拒绝 ,则拒绝 。
到 s 的边 ,从而修改

8.23 将 PATH 归约到 CYCLE 。归约的思路是通过在图 G 上添加一条从 f

PATH 问题的例子 i G ,
s,t 。若在 G 中存在一条从 5 到( 的路径 ,那么在修改后的 G 中就存在
一个有向回路。因为在修改前的 G 中或许已经存在其他回路 ,所以在修改后的 G 中除了从 5 到

-
f 的回路外 ,有可能存在其他回路 。为了解决这个问题 ,首先要修改 G ,使之不包含回路 。 引入
分级有向图 ( leveled directed graph ) 的概念 ,分级有向图中的结点被分成多个组 :A\ ,A 2 , *

A,, 每个组称为一个级 ,只有从某级指向比本级高一级的边才是允许的 。分级有向图中是没有


回路的 。对于分级有向图来说 ,根据下面给出的非受限 PATH 问题的归约 ,可知 PATH 问题
仍是 NL 完全的 。给定一个包含 m 个结点的有向图 G 以及结点 s 和 产生一个分级有向图 G',
该图中的级是 G 中结点的 m 个拷贝 。 如果 G 中包含从结点 ;
^
到 j 的边 ,则从每级的
的 )画一条边 。除此之外 ,在每级的 i 到下一级的 f 之间画一条边 。令 / 是 s 在第一级的对应结

t


到下一级


点 , '是 在最后一级的对应结点。图 G 包含从 5 到〖 的路径当且仅当包含从 / 到 的路径 。
如果修改 G',在其中增加一条从 到 / 的边 ,则得到了从 PATH 到 CYCLE 的归约 。 这个归约
计算是很简单的 ,并且其完成只需要对数空间 。更进一步说 ,一个直观的过程证明了 CYCLE 6
NL 综 上 所 述 ,CyCLE 是 NL 完全的 。
0
第9章
Introduction to the Theory of Computation , 3 e

难 解 性

某些计算问题在理论上虽然是可解的 ,但是获得其解需要耗费大量的时间或空间 ,导
致其难以在实践中得到应用 ,这 样 的 问 题 称 为 难 解 的 ( intractable )。
在第 7 、 8 章中 ,介绍了几个被认为是难解的问题 ,但是还没有一个得到证明 。例如 ,
虽然还不知道怎样证明 ,但大多数人相信 SAT 问题和其他所有 NP 完全问题都是难解的 。
本章给岀几个能够被证明是难解的问题 。
为了给岀这些例子 ,先证明几个定理 ,将图灵机的能力与计算可获得的时间或空间数
量关联起来 。在本章的最后 ,进一步讨论了证明 NP 中的问题是难解的可能性 ,也就是解
决 P 问题与 NP 问题的可能性 。首先 ,介绍相对化技术 ,利用它来证明采用某些方法并不
会达到这一目标 。然后 ,讨论一种被研究者采用并已显示出一定前景的方法—电路复杂
性理论 。

9. 1 层次定理
通常的直觉是 ,给图灵机更多的时间或空间就能扩大它所能求解的问题类 。 例如 ,在
时间 n3 内 ,图灵机应能比在时间 n 2 内判定更多的语言 。 层 次 定 理 ( hierarchy theorem )
证明了这种直觉在满足某些条件下的正确性 。采用术语层次定理 ,是因为这些定理中的每
一个都证明了时间和空间复杂性类不全相同—它们形成一个层次结构 ,其中时空界限较
大的类比时空界限较小的类包含更多的语言 。
空间复杂性层次定理比时间复杂性层次定理稍简单一些 ,故首先介绍它 。 在实际陈述


定理之前 ,引入下面的定义 。
对 于 函 数 /:N N ,其 中 /( W ) 至 少 为 CKlogn ),如 果 函 数 / 把 P 映 射 为
f ( n ) 的 二 进 制 表 示 ,并 且 该 函 数 在 空 间 OC / U )) 内 是 可 计 算 的 ,则 称 该 函 数 为 空 间 可
构 造 的 ( space constructible )。
换言之 ,如果存在某个图灵机在 0( /(〃)) 空间内运行 ,而且在输人 1 时总能停机 ,
停机时 /( n ) 的二进制表示出现在带子上 ,则 / 是空间可构造的 。为了具备时间和空间可
构造性 ,如〃\og 2 n 和W 这一类带小数的函数被向下舍入到紧邻的较小的整数上 。
'
(HO 通常出现的复杂度至少为 O( logn ) 的函数都是空间可构造的 ,包括 log2 rz ,
log2 72 和 W 2
0

例如 ,H 2 是空间可构造的 ,因为机器以 1” 为输人 ,通过数 1 的数目得到《 的二进制


形式 ,采用标准的方法将〃自乘 ,输岀〃2 。全部空间消耗是 0( n ),当然也是 0 U2 )。
当证明等于 o( n ) 的函数 /( « ) 是空间可构造的时 ,如同在 8.4 节定义亚线性空间复
杂性那样 ,有一条单独的只读输入带 。例如 ,这种机器可以如下计算把 1” 映射为 log2 r2 的

© 其中 ,1”的意思是 n 个 1 的字符串。
第 夕 章 难 解 性 229

二进制表示的函数 。随着只读头沿着输人带移动 ,它在工作带上以二进制形式计算输入中


1 的数目 。然后 ,因为 n 以二进制形式放在工作带上 ,故它通过数 n 的二进制表示中的位
数可以计算出 log2 n 。 ■

从下面的讨论中可以理解空间可构造性在空间层次定理中的作用。若 / U ) 和 g( n )
是两个空间界限 , f ( n ) 渐近地比 g( rz ) 大 ,则机器在 / U ) 空间内所能判定的语言比在
gU )空间内多。然而 ,假如 /( n ) 超过 g( /2 ) 的那部分数量非常小而且难以计算 ,那么机
器可能无法有效地利用多出来的那部分空间 ,因为仅是计算多出来的空间数量所需消耗的
空间就可能比所获得的空间还要多。在这种情况下 ,机器在 /( n ) 空间内所能计算的语言
不会比在 g( n ) 空间内更多 。规定 /( n ) 是空间可构造的就可避免这种情况 ,这样就可以
证明 ,机器所能计算的语言比它在任何渐近更小的界限内所能计算的语言更多 ,如下面的
定理所示 。
( 空 间 层 次 定 理) 对 于 任 何 空 间 可 构 造 函 数
间 0( /( n )) 内 可 判 定 ,但 不 能 在 空 间 0( /( 72 )) 内 判 定 。
证明思路必须说明一个语言 A 具有两个性质:第一 ,A 在 0( /(〃)) 空间内可判定 ,
/: N — N ,存 在 语 言 A ,在 空

第二 ,A 不能在 o( /U )) 空间内判定 。
通过给岀判定算法 D 来描述 A 。算法 D 将在 0( /(〃))) 空间内运行 ,从而保证了第
一个性质。进而 ,D 将保证 A 不同于任何在 0( /( n )) 空间内可判定的语言 ,从而保证了
第二个性质。不要指望语言 A 能够像迄今为止本书中介绍的其他语言那样 ,有一幅简单明
了的图像 。语言 A 只能通过算法来描述 ,没有更简单的 、 非算法的定义 。
为保证 A 不能在 o( / U )) 空间内判定 ,设计 D 用以实现定理 4.9 中证明接受问题
ATM 不可解时所采用的对角线法 。如果 M 是在 o( /( W )) 空间内判定一个语言的图灵机 ,
则 D 保证 A 与 M 的语言至少存在一点不同的地方 。是哪个地方? 就是对应于描述 M 自己
的地方 。
看一看 D 的运算方式 。简单地讲 ,D 把它的输人看作是图灵机 M 的描述 。(如果输入
不是任何图灵机的描述 ,则 D 在该输人上的动作是无意义的 ,所以武断地让 D 拒绝即
可。
) 然后 D 在同一输人 (即〈M > ) 上在空间界限 f ( n ) 内运行 M。 如果 M 在这么大空
间内停机 ,则 D 接受当且仅当 M 拒绝 。 如果 M 不停机 ,则 D 拒绝 。所以如果 M 在空间
f ( n ) 内运行 ,则 D 有足够的空间保证它的语言不同于 M 的语言 。否则 ,D 没有足够的空
间算出 M 的结果 。但幸运的是 ,并没有要求 D 的行为与不能在 0( /( )) 空间内运行的机
器不同 ,所以 D 在该输入上的动作是无关紧要的 。
该描述抓住了证明的本质,但忽略了几个重要的细节 。如果 M 在 o( / U )) 空间内运
行 ,则 D 必须保证它的语言不同于 M 的语言 。但是即使 M 在 0( /( 幻 ) 空间内运行 ,它也
可能对于小的 n 消耗比 /( n ) 多的空间 ,只要这种渐近行为还没有 “消亡”,D 就有可能
没有足够的空间在输入〈M〉上把 M 运行完 ,从而使 D 失去一次避开 M 的语言的机会 。
于是 ,一不小心 ,D 就可能与 M 判定同一语言 ,从而定理无法得证。
通过修改 D,给它另外的机会来避开 M 的语言可以弥补这一问题 。不是只在 D 收到
输入〈M〉时才运行 M,而是只要收到形式为 〈 M〉10 * 的输人 ,即形如 〈 M〉后面跟着
一个 1 和一些 0 的输人 ,就运行 M。那么 ,如果 M 真的在 0( /( d ) 空间内运行 ,则由于渐
近行为最终肯定是要消亡的 ,所以对于某个大的々值 ,D 将 有 足 够 的 空 间 在 输 入 上
230 第三部分复杂性理论

把 M 运行完 。
最后一个技术问题是 ,当 D 在某个字符串上运行 M 时 ,M 可能陷入死循环而占用有
穷空间 。但是 D 应该是一个判定机 ,所以必须保证 D 在模拟 M 时不会循环 。 任何在空间
o( /( n )) 内 运 行 的 机 器 只 消 耗 时 间 。修 改 D ,使它计算在模拟 M 中用掉的步数 。
如果计数超过 2 ,则 D 拒绝 。
>

证明下面的 0( / U )) 空间算法 D 判定的语言 A 不能在 o( /( n )) 空间内判定 。


D =“ 对输入 w:
1. 令 72 是 W 的长度 。
2. 利用空间可构造性计算 / U ),并划分出这么多带子空间 。如果后面的步骤企
图使用更多的空间 ,就拒绝 。
3. 如果 w 不是形如〈M > 10 * ,其中 M 是某个图灵机 ,则拒绝 。
4. 在 w 上模拟 M,同时计算模拟过程中使用的步数。如果计数超过则拒绝。
5. 若 M 接受 ,则拒绝 。若 M 拒绝 ,则接受”。
在步骤 4 , 为了确定消耗的空间数量 ,需要给出补充的模拟细节 。 被模拟的机器 M 有
任意的带子字母表 ,而 D 有固定的带子字母表 。所以用 D 的带子上的几个单元来表示 M
的带子上的一个单元。因此模拟过程在消耗的空间上增加了一个常数倍的开销 。换言之,如
果 M 在 空 间 内 运 行 ,那 么 D 需 要 空 间 来 模 拟 M,其中 d 是依赖于 M 的常数。
D 的每一步都在有限时间内运行 ,所以 D 是一个判定机 。设 A 是 D 判定的语言。显
然 ,因为 D 的缘故 ,A 是在空间 0( /( n )) 内可判定的 。 下面 ,证明 A 不是在 o( /( n )) 空
间内可判定的 。
假定其反面成立 ,即某个图灵机 M 在空间 g( n ) 内判定 A ,其 中 等 于 0( /U ))。
如前面所提 ,D 可以在空间办( n) 内模拟 M,其中 d 是某个常数 。 因为 g( n ) 等于 o( /( n )),
所以存在某个常数 n0 使得 dg( n )</( 幻 对 所 有 成 立 。因 此 只 要 输 入 的 长 度 不 小
于 nG ,D 对 M 的模拟就能运行完 。考虑 D 在输入 〈 M〉10 上运行时的情况 。该输人比 。
no 长 ,所以第 4 步的模拟可以完成 。因此 D 与 M 在同一输入上的判定结果相反 。于是 M


不判定 A ,这与假设矛盾 。所以 A 不是在 0( /U )) 空间内可判定的 。 ■

对 于 任 意 两 个 函 数 /i ,
/2 :N N ,其 中 A U) 等 于 o( /2 ( n )),/2 是 空 间
可 构 造 的 ,有
SPACEC /UnDSSPACEChU )) 。
该推论允许把不同的空间复杂性类彼此分开。例如 ,容易证明对于任何自然数 c,函数
nc 是空间可构造的。因此对于任意两个自然数 d <c2 , 可以证明 SPACEC ^i )C SPACE( 2 )

^
0

再做一点努力就可以证明对于任何有理数 c>0 , # 是空间可构造的 ,从而把前面的包含


关系推广到对任何有理数 0<d <c2 都成立 。注意到在任何两个实数 ei <e2 之间总存在两
个有理数 Q 和 Q 使得 ei <Q <c2 <e2 。 于是得到下面补充的推论 ,它表明在 PSPACE 类
中存在一个良好的层次结构 。
对于任意两个实数 o<e i<e2 , 有
SPACE( nei ) C SPACE( T2£2 )
也可以用空间层次定理来分离前面碰到的两个空间复杂性类 。

回 忆 一 下 表 示 A 是 B 的真子集 。
证明萨维奇定理说明 NL
SPACE( n ), 所以推论成立 。
N L £ PSP ACE。

^
SPACE( log2

^
), 空间层次定理说明
231

SPACE( log2 n )C
_

正如在 8.5 节末所说的那样 ,就对数空间可归约性而言 ,TQBF 是 PSPACE 完全的 ,
所以 NL。
现在建立本章的主要目标 : 证明存在理论上可判定而实际中不可判定的问题 ,即可
判定而难解的问题 。 每一个类 SPACE( V ) 包含在类 SPACEU ) 中 ,后者又严格包
含在类 SPACE( 2”) 中 。 所以得到下面补充的推论 ,把 PSPACE 与 EXPSPACE = U*

^
SPACE( 2 )分开 。
鎌CTi PSPACE C EXPSPACE 0

就判定过程必须消耗多于多项式的空间这一意义而言 ,该推论证明存在难解的但可判
定的问题 。语言本身有一些不太自然 —它们只是为了分离复杂性类才有意义 。在讨论时


间层次定理以后 ,利用这些语言来证明其他更加自然的语言的难解性 。
謙蜃邏 , 对于函数 hN N ,其 中 〆72 ) 至 少 为 0( n logn ),如 果 函 数 把 1 映 射 为
t( n ) 的 二 进 制 表 示 ,并 在 时 间 OU( rz )) 内 可 计 算 ,则称该函数为时间可构造的 ( time
constructible) 0

换言之 ,如果存在某个图灵机 ,在时间 O( Kn )) 内运行 ,而且在输入 1” 上启动后总


能停机 ,停机时的二进制表示出现在带子上 ,则 〖 是时间可构造的 。


dMtk 通常出现的不小于 nlog/2 的函数都是时间可构造的 ,包括函数 nlogrz ,n ,
n2 以及 2”。
例如 ,为了证明是时间可构造的 ,首先设计一个图灵机 ,以二进制计算 1 的个
数 。为此该图灵机沿着带子移动一个二进制计数器 ,每到一个输入位置就把它加 1 ,直至
输人的末端 。因为对于 n 个输入位置的每一个都需要消耗 O( logTz ) 步 ,所以这部分工作消
耗 O( nlogrz) 步 。然后 ,从 n 的二进制表示中计算岀 Lni」
的二进制形式 。因为涉及的数
的长度是 Odog/z ),所以任何合理的计算方法都将消耗 OUlogn ) 时 间 。 ■

时间层次定理是定理 9.3 相对于时间复杂性的类似定理 。因为在证明中出现的技术上


的缘故 ,时间层次定理比已证明的空间层次定理稍弱 。任何空间可构造的空间界限的渐近
增加都将扩大可判定的语言类 。与之不同 ,对于时间 ,为了保证获得更多的语言 ,必须进
一步把时间界限扩大一个对数倍才行。可以想象 ,更紧的时间层次定理也成立 ,但是目前
还不知道怎样证明它 。时间层次定理具有这一特点是因为我们用单带图灵机度量时间复杂


性 。可以对其他计算模型证明更紧的时间层次定理。
( 时 间 层 次 定 理) 对 于 任 何 时 间 可 构 造 函 数 hN N ,存 在 语 言 A ,在 时
间OU( n )) 内 可 判 定 ,但 在 时 间 oO( n )/log£( n)) 内 不 可 判 定 。
证明思路本定理的证明类似于定理 9.3 的证明。构造一个图灵机 D 在时间 OGO ))
内判定语言 A,而 A 不能在时间 oU0i)/ lOgKrz)) 内被判定。这里 ,D 读取一个形如〈M>10 * 的
输 入 模 拟 M 在输人 w 上的运行 ,确保时间消耗不超过〆n )。如果 M 停机的时间在这
之内 ,则 D 给出相反的输出 。
证明中重要的差别涉及模拟 M 的开销以及计算模拟所使用的步数的开销 。 机器 D 必
232 第三部分复杂性理论

须有效地执行这种定时的模拟 ,以使 D 在时间 0(〆 〃)) 内运行的同时 ,避开所有在


o( t( n )/logt( n )) 时间内可判定的语言 。对于空间复杂性 ,正如在定理 9.3 的证明中所注
意到的 ,这种模拟增加了一个常数倍的开销 。 对于时间复杂性 ,这种模拟增加一个对数倍
的开销 。时间需要更大的开销是因为在本定理陈述中出现了 l/ log〖 U ) 因子 。假如有一种
办法用一台单带图灵机模拟另一台单带图灵机运行预先设定的步数 ,而在时间上只增加常
数倍开销 ,我们就可以加强本定理 ,把 0(〖(;
2 )/ k)以 U )) 变为 oUU ))。但是尚不知道如此

高效率的模拟 。
证 明 下 面 的 OUU )) 时间算法 D 所判定的语言 A 不是在 oUU )/log〖 U )) 时间内
可判定的 。
1)=“对输人 0>:
*

1. 令 ?2 是 W 的长度 。
2. 利用时间可构造性计算〆〃),把值「Kn )/ l0g( 72 )1 存放在一个二进制计数器中 。
在每一次执行步骤 4 、 5 之前 ,把该计数器减 1。如果计数器减到 0 , 就拒绝 。
3. 若 w 的形式不是〈M〉 10 * ,其中 M 是某个图灵机 ,则拒绝 。
4. 在 w 上模拟 M。
5. 若 M 接受 ,则拒绝 ;若 M 拒绝 ,则接受 。

考察该算法的每一步以确定运行时间 。 步骤 1 、 2 、 3 能够在 O( Kn )) 时间内完成 。
在步骤 4 , 每次 D 模拟 M 的一步 ,它都要读取 M 的当前状态以及 M 读写头下的带子
符号 ,在 M 的转移函数中查找 M 的下一个动作 ,以使它能够适当地更新 M 的带子内容 。
所有这三个对象 (状态 、 带子符号和转移函数) 都存放在 D 的带子上的某处 。 如果它们彼
此分开很远 ,则 D 每次模拟 M 的一步都需要走许多步来收集这些信息 。所以 ,D 总是把
这些信息放在一起 。
可以把 D 的单带组织成轨道 。得到两条轨道的一种方法是以奇数位置存储一条轨道 ,
以偶数位置存储另一条轨道 。另一种获得两条轨道效果的方法是扩大 D 的带子字母表 ,使
它包括每一对符号 :一个符号来自上轨道 ,另一个符号来自下轨道 。 更多的轨道效果也可
以类似获得 。注意 ,如果只使用固定数目个轨道 ,多轨道就只增加一个常数倍的时间开
销 。 这里 ,D 采用三条轨道 。
第一条轨道存储 M 的带子内容 ,第二条轨道包含 M 的当前状态和转移函数的副本 。
在模拟过程中 ,D 将信息保持在第二条轨道上 ,靠近第一条轨道上 M 的读写头的当前位
置 。每次 M 移动读写头时 ,D 搬动第二条轨道上的所有内容 ,使它靠近该读写头 。第二
条轨道上信息的长度仅依赖于 M,而不依赖于 M 的输人的长度 ,所以搬动操作只使模拟
时间增加常数倍 。进一步讲 ,所需的信息都靠得很近 ,所以在转移函数中查找 M 的下一
个动作并更新带子内容的开销就只是个常数 。因此 ,如果 M 在 时 间 内 运 行 ,D 就能
在O(gU ))时间内模拟它 。
在步骤 4 的每一步 ,D 必须把原先在步骤 2 中设置的步数计数器减 1。 这里 ,D 可以
在不显著增加模拟时间的条件下完成这一操作 ,这只需把二进制计数器存放在第三条轨道
上 ,并使它保持靠近当前读写头的位置 。该计数器的量值大约是 Kn )/logKn ),所以它的
长度是 log( Kn)/logi( n)),即 O( logKn ))。因此在每一步 ,更新和移动它给模拟时间增加
KrO /logdrz )倍的幵销 ,于是使得全部运行时间达到 O( KrO )。所以 A 是 OUU )) 时间内
可判定的 。
拉賺置
_
为 g( n ) 等 于 O( K /2 )/ logKr0 ),所 以 存 在 某 个 常 数 no ,使 得 对

且 G 是 时 间 可 构 造 的 ,有

■0EKI
指数空间完全性
对于任意两个函数
“ 山:
N
TIMEChUDSTIMECkCTi—
对 时 间 复 杂 性 建 立 类 似 于 推 论 9 . 4 , 9.5 和 9.7 的 推 论。

))。
第 夕 章 难 解 性

为 了 证 明 A 不 是 oUUVlogM /z )) 时 间 内 可 判 定 的 ,采 用 类 似 于 定 理 9.3 的 证 明 中 所
使 用 的 推 理 。 假 定 其 反 面 成 立 ,即 存 在 图 灵 机 M 在 时 间 g( n ) 内 判 定 A ,即 gU ) 等 于
o( t( n )/ \o g t( n )) 这 里 ,D 能 够 在 时 间 dgU ) 内 模 拟 M,
0 其 中 d 是 某 个 常 数 。如 果 全 部 模
拟 时 间 (不 包 括 更 新 步 骤 计 数 器 的 时 间 ) 最 多 是 KW / logK /O , 则 模 拟 过 程 可 以 完 成。因

因 此 只 要 输 入 的 长 度 不 小 于 阶 ,D 对 M 的 模 拟 就 可 以 完 成。考 虑 D 在 输 人〈 Amo〃 上运行


时 发 生 的 情 况 。该 输 入 比 no 长 ,所 以 步 骤 4 的 模 拟 过 程 可 以 完 成。因 此 D 与 M 在 同 一 输 人
上 的 判 定 结 果 相 反 ,于 是 M 不 判 定 A ,这 与 假 设 矛 盾。所 以 A 不 是 时 间 0( K 72 )/ logKn )) 内
可 判 定 的。
^
N ,其 中 Q U ) 等 于 0 U 2 ( 72 ) / l 0g i 2 U ) )

对 于 任 意 两 个 实 数 1< 1 < 2 ,有 TIME(的 )STIMEU£2 )。


PSEXPTIME。

利 用 前 面 的 结 果 ,可 以 证 明 一 个 具 体 的 语 言 事 实 上 是 难 解 的 。证 明 过 程 分 成 两 步 。首
先 ,层 次 定 理 说 明 图 灵 机 在 EXPSPACE 内 比 在 PSPACE 内 判 定 更 多 的 语 言 。然 后 ,证 明
有 关 广 义 正 则 表 达 式 的 一 个 具 体 的 语 言 是 EXPSPACE 完 全 的 ,因 此 不 能 在 多 项 式 时 间 内
( 甚 至 不 能 在 多 项 式 空 间 内) 判 定 。
233

,d g{ n)< t{ n )/ \o g t{ n )

0

^

在 推 广 正 则 表 达 式 之 前 ,先 简 要 回 顾 一 下 定 义 1 . 2 6 中 正 则 表 达 式 的 定 义 。它 们 是 从
原 子 表 达 式 0 ,e 以 及 字 母 表 中 的 符 号 出 发 ,通 过 运 用 正 则 运 算 构 造 起 来 的 。 这 些 正 则 运
算 包 括 并 、 连 接 和 星 号 ,分 别 用 1 。和

^
* 表 示 。从 问 题 8 . 2 4 可 知 ,可 以 在 多 项 式 空 间 内
判 定 两 个 正 则 表 达 式 的 等 价 性。
下 边 将 证 明 ,如 果 允 许 正 则 表 达 式 采 用 比 通 常 的 正 则 运 算 更 多 的 运 算 ,则 分 析 表 达 式 的
复 杂 性 将 急 剧 上 升 。设 个 是 指 数 运 算 ( exponentiation operation), 若 是 一 个 正 则 表 达 式 ,々
是 一 个 非 负 整 数 ,则 写 法 i? 个々等价于 i? 自 身 连 接 々 次 。也 可 把 缩 写 为 W 。换 言 之 ,

= R \ k = RoR o ••• o R
广 义 正 则 表 达 式 允 许 指 数 运 算 ,也 允 许 通 常 的 正 则 运 算 。显 然 ,广 义 正 则 表 达 式 仍 然
产 生 正 则 语 言 ,跟 标 准 正 则 表 达 式 一 样 。通 过 重 复 基 本 的 正 则 运 算 表 达 式 ,可 以 除 去 指 数
运 算 。令
EQRExt = {( Q ,R ) I Q 和 尺 是 等 价 的 带 指 数 运 算 的 正 则 表 达 式 }
为 了 证 明 EQREXf 是 难 解 的 ,可 以 证 明 它 对 于 类 EXPSPACE 是 完 全 的 。 任 何
EXPSPACE完 全 问 题 都 不 可 能 在 PSPACE 中 ,更 不 用 说 P 了 。 否 则 EXPSPACE 将 等 于
PSPACE , 与 推 论 9.7 矛 盾 。
>ytailigk 语 言 B 是 EXPSPACE 完 全 的 ,如 果
1. BGEXPSPACE , 并 且
2. EXPSPACE 中 的 每 个 A 都 多 项 式 时 间 可 归 约 到 B 。
234 第三部分复杂性理论

EQREXT 是 EXPSPACE 完 全 的 。
证 明 思 路 在 度 量 EQREXT 的复杂性时 ,假定所有指数都写成二进制整数 。表达式的
长度是它包含的所有符号的总数 。

接下来概略地叙述判定 f QREXt 的 EXPSPACE 算法 。 为了判定两个带指数的表达式
是否等价 ,首先用重复表达式的办法删除指数 ,然后把得到的表达式转化为 NFA。最后
再利用一个类似于例 8.4 中判定 ALLNFA 的算法的 NFA 等价性判定过程 。
为了证明 EXPSPACE 中的语言 A 多项式时间可归约到 EQREXt ,利用 5.1 节介绍的
利用计算历史的归约技巧 ,其构造类似于定理 5.10 的证明中给出的构造 。

…^
给定一个判定 A 的图灵机 M ,设计一个多项式时间归约 ,把输入 m 映射为一对表达
式 M 和尺2 , 使得它们等价当且仅当 M 接 受 表 达 式 私 和 尺2 模 拟 在 ;上 的 计 算。
表达式私产生计算历史中可能出现的符号组成的所有字符串。表达式私产生所有不代表
拒绝计算历史的字符串 。于是 ,若图灵机接受输入 ,就不会有拒绝计算历史存在 ,表达式
私和沁将产生同一个语言。回忆一下 ,一个拒绝计算历史就是机器在输入上进人拒绝计
算的格局序列 。参见 5.1 节有关计算历史的介绍 。
本证明的难点在于所构造的表达式的长度必须是 72 的多项式 (以使归约能够在多项式
时间内运算),而模拟计算的长度可能是指数的 。这时指数运算就有助于用相对短的表达
式表示长的计算 。
证明首先给出一个非确定的算法 ,判定两个 NFA 是否等价 。
〈 iVhiVd ,其中 % 和 iV2 是 NFA:
对输入
1. 给 队 和 N 2 的起始状态打上标记。
2. 重 复 下 面 的 操 作 欠 ,其 中 % 和 g2 是 乂 和 N 2 的状态数 。
3. 非确定地选择一个输入符号 ,改变在 ] 和 2 的状态上标记的位置 ,以模拟
读入这个符号 。

^^
4 . 若在任何时刻 ,标记放在一个有穷自动机的接受状态上 ,而没有放在另一个有
穷自动机的接受状态上 ,则接受 ;否则拒绝 。

^^
如果自动机 ] 和 ] 是等价的 ,iV 显然拒绝 ,因为它只在确定一台机器接受某个串
而另一台机器不接受时才能接受。如果这两个自动机不等价 ,则存在某个字符串被一台机
器接受而不能被另一台接受 。这样的字符串中必定有长度不超过 2 +力的 。若不然 ,考虑


用这样的串中最短的一个作为非确定选择的序列 。因为只存在 21
^ 种不同的方式把标记

^
放在 和 ] 的状态上 ,所以在更长的字符串中标记的位置必定重复 。 把介于重复之间
的那部分字符串删除 ,就得到更短的字符串。因此算法 iV 在它的非确定选择中会猜到这
个串并接受 。所以 N 运算正确 。
算法 iV 在非确定线性空间内运行 ,于是根据萨维奇定理 ,可以得到判定该问题的确
定型 OU 2 ) 空间算法 。下面用该算法的确定形式设计判定 EQREXt 的算法 。
对输入〈私 ,
私 > ,其中私和沁是带指数的正则表达式 :
1. 把沁和处转化为等价的正则表达式氏和氏 ,其中氏和压利用重复代替指数。
2. 利用引理 1.29 的证明中给出的转化过程 ,把氏和压转化为等价的 NFAM 和 ]V2 。
3. 利用算法 iV 的确定版来判定 iV 1 * iV2 是否等价 。”
显然算法 E 是正确的 。为了分析它的空间复杂性 ,注意到用重复替换指数的方法可能
第P 章 难 解 性 235

会把表达式的长度增加 W 倍 ,其中 Z 是指数的长度和 。于 是 表 达 式 玖 和 氏 的 长 度 最 大 为


*]

^
2 % 其中 n 是输入的长度 。引 理 1.29 的 转 化 过 程 使 长 度 线 性 增 加 ,因 此 NFAiV!

^
-
最多有 0(〃2 « ) 个 状 态 。 因 为 输 入 长 度 是 OU2”),所 以 算 法 N 的 确 定 版 消 耗 空 间
222 :

^
0(( )2 )= 0( ) 0 于是 f QREXt 是指数空间可判定的 。

下 面 证 明 £ QREXt 是 EXPSPACE 难 的 。设 图 灵 机 M 在 空 间 2( & 内 判 定 语 言 A ,其中
々是某个常数 。归 约 把 输 入 w 映 射 为 一 对 正 则 表 达 式 表 达 式 私 就 是 △ * ,若 用
r 和 Q 表示 M 的带子字母表和状态集 ,则 A = UQU { # } 是计算历史中可能出现的所有
,
符号组成的字母表 。构造表达式尺2 使它产生不代表 M 在 w 上 的 拒 绝 计 算 历 史 的 所 有 字
符串。当然 ,M 接受 w 当且仅当 ] 在加上没有拒绝计算历史 。因此这两个表达式等价当
^
且仅当 M 接 受 构 造 过 程 如 下 。

^
^
在 加 上 的 一 个 拒 绝 计 算 历 史 是 由 符 号 # 分 隔 的 一 系 列 格 局 。采 用 标 准 的 格 局 编 码 ,
其中代表当前状态的符号放在当前读写头位置的左边 。假 定 所 有 格 局 的 长 度 为 如 果

^
长度不够 ,就 用 空 白 符 填 在 右 边 。拒 绝 计 算 历 史 的 第 一 个 格 局 是 在切上的初始格局,
最末格局是一个拒绝格局 。每一个格局都必须根据转移函数中指定的规则从前一个格局转
变而来 。
一个字符串不代表拒绝计算的情况可能有几种。或 者 它 非 正 常 开 始 ,或 者 非 正 常 结
束 ,或 者 在 中 间 某 处 不 正 确 。表 达 式 i?2 等 于 i? bad
- start Ui? bad- window U 尺 bad - reject ,其 中 每 个
子表达式对应于字符串不代表拒绝计算的上面三种情况之一 。

^
现在构造表达式 /? bad - start ,使它产生所有不以 在 加 上 的 起 始 格 局 Ci 开 头 的 字 符
串。格 局 Cl 形如 (?0 W1 W2 … UL>”U # 。 为处理 Cl 的 每 一 部 分 ,把 i? bad - start 写 成 几 个 子
表达式的并 :
i? bad - start = S0 \J S\ U…U U& U S#
表达式 SQ 产生所有不以奶开头的字符串 。令 SG 是 表 达 式 。记 法 △ - 。是 △
9

中除去仍以后 ,所有符号的并的简写 。
表达式 S! 产 生 所 有 第 二 个 位 置 上 不 是 训 的 字 符 串。令 Si 是 一 般 地 讲,
对 于 表 达 式 S, 是 。于 是 S: 产生所有这样的字符串 ,它们在前 Z 个位 t

置上包含任何字符 ,在位置 〖+ 1 上 包 含 除 % 以外的任何字符 ,在位置 ;


+1 以后包含任意
字符串 。 注意 ,这里已经使用了指数运算 。实际上 ,在这时候指数运算只是为了方便 ,而
不是必需的 ,因 为 本 来 可 以 把 符 号 △ 重复 H欠 ,而 不 会 过 度 地 增 加 表 达 式 的 长 度 。但是在
下面的子表达式中 ,指数运算对于把长度保持在多项式内就起决定性作用了。


表达式 s6 产生所有在〃 2 到 2 & > 的某个位置上不包含空白符的字符串 。 为 此 本 来 可
+

^_
以引进子表达式 S„+ 2 直到 S2 >
,但是那样做将会使表达式 i4ad - start 的长度为指数 。改令
Sb = A 1 (△ U 〆
e
于是 S6 产生的字符串在前 n + 1 个位置包含任何字符 ,在 接 下 来 的 个位置也包含任何字
符 ,其中 〖 也可以从 0 到 2U
)
- 2 , 再下一个位置包含除空白符以外的任何字符 。
最 后 ,3 # 产生所有在位置 YA + 1 上不包含符号 # 的 字 符 串。令 S # 是
前边已经完成了 i? bad
- Start 的构造 ,现在开始下一部分 i? bad - reieCt 。它 产 生 所 有 非 正 常 结
束的字符串 ,即不包含拒绝格局的字符串 。任何拒绝格局都包含状态 Reject ,所 以 令
236 第三部分复杂性理论

尺 bad - reject
— A—
^
^
于是 i
-
ad reject 产 生 所 有 不 含 的 字 符 串。
最后构造表达式 i 使它产生所有这样的字符串 : 其中的一个格局不能正确
^ - bad window 9

地转变为下一个格局 回忆一下 ,在库克 列文定理的证明中 ,只要第一个格局的每三个


。 -
连续符号都能根据转移函数正确地产生第二个格局的相应的三个符号 ,就判定第一个格局
合法地产生第二个格局 。所以 ,如果一个格局不能产生另一个格局 ,通过考察适当的六个
符号就能使错误显现出来 。采用这种思想来构造 i? bad - window :
尺 bad - window U △* abcA( 2 -2) d e f 已 *
badiabc ,de / )
其中 bad( a 6c ,
c/e/) 的 意 思 是 根 据 转 移 函 数 不 能 生 成 de/ 。 并运算只是对 △ 中这样的
符 号 山e ,
-
/ 进行的 。图 9 1 显示了在一个计算历史中这些符号的位置 。

丨#
2” (
_
*)
2
i

图 9- 1 相邻格局的对应位置

为了计算吣的长度 ,确定岀现在其中的指数的长度 。 其中岀现了几个量级大约为


2( & 的指数 ,它们的二进制总长为 O( V )。因此尺2 的长度是 rz 的多项式 。 ■

9.2 相对化
EQREXt 难解性的证明依赖于对角化法 。 为什么不用同样的方法证明 SAT 是难解的
呢? 或许 ,可以用对角化法证明一个非确定型多项式时间图灵机能够判定一个不在 P 中的
语言 。 本节介绍相对化 ( relativization ) 方法 ,它给出有力的证据排除了用对角化法解决
P 与 NP 问题的可能性 。
在相对化方法中 ,将修改计算模型 ,给图灵机一些本质上是 “免费 ” 的信息 。依据实
际提供给它的信息 ,图灵机就可能比以前更轻松地解决某些问题 。
例如 ,假定对任何长度的布尔公式 ,给图灵机以在一步内解决可满足性问题的能力 。
不管怎样实现这一奇迹 想象一个附带的 “黑匣子” 给了机器这种能力 。 可以把这个黑
匣子称为谕示 ,以强调它没必要对应于任何物理设备 。 显然 ,不管 P 是否等于 NP ,机器
都可以利用谕示在多项式时间内解决任何 iVP 问题 ,因为每一个 JVP 问题都可多项式时间
归约到可满足性问题 。这样的图灵机被称为相对于可满足性问题进行计算 ,因此才有术语
相对化 。
一般地讲 ,谕示可以对应于任何具体的语言 ,不仅仅是可满足性问题 。 谕示允许图灵
机判定该语言的成员资格 ,而不必自己计算岀答案 。 下面把这个概念简略地形式化 。读者
可能会回忆起在 6.3 节曾经碰到过谕示 。 那时 ,定义它是为了根据不可解度来给问题分
类 。这里 ,利用谕示是为了更好地理解对角化方法的能力 。
针对一个语言 A 的谕示是一个能够判断任何串加是否在该语言中的设
备 。谕示图灵机 (oracle Turing machine ) MA 就是在通常的图灵机基础上增加查询 A 的谕 %

示的能力 。每当 MA 在称为谕示带 (oracle tape ) 的 特 殊 带 子 上 写 下 一 个 字 符 串 时 , 它 就


第 夕 章 难 解 性 237

能 在 一 步 内 计 算 得 知 这 个 字 符 串 是 否 属 于 A。
$ PA 是 采 用 谕 示 A 的 多 项 式 时 间 谕 示 图 灵 机 可 判 定 的 语 言 类 。 类 似 地 可 以 定 义
NPA# 0

如 前 面 提 到 的 ,相 对 于 可 满 足 性 问 题 的 多 项 式 时 间 计 算 包 含 了 NP 的 全 部 。
, 因为 P T 是 一 个 确 定 型 复 杂 性 类 ,在 补 运 算

^ ^
。进 一 步 ,coNP

^
换 言 之 ,NP£ P P
下 封 闭。
(5BBTO 正如 pa7 包 含 不 属 于 P 的 语 言 一 样 。NP T 包 含 不 属 于 NP 的 语 言 。问

-
题 7.2 1 中 定 义 的 语 言 M l N FORMULA 的 补 集 给 出 了 这 样 的 一 个 例 子 。

-
MIN FORMULA 似 乎 不 在 NP 中 ( 虽 然 它 是 否 属 于 NP 还 不 知 道 )。 然 而 ,
MJiV- FO履ULA 属 于 NPSAT , 因 为 以 SAT 为 谕 示 的 非 确 定 型 多 项 式 时 间 谕 示 图 灵 机 可
以如下检查彡是否属于它 。首 先 ,因 为 非 确 定 型 机 器 可 以 猜 测 使 两 个 布 尔 公 式 的 值 不 相 同
的 赋 值 ,所 以 两 个 布 尔 公 式 的 不 等 价 问 题 是 NP 内 可 解 的 ,从 而 等 价 问 题 属 于 coNP。 然
后 ,判 定 MJiV- FORMULA 的 非 确 定 型 谕 示 机 器 非 确 定 地 猜 测 一 个 更 小 的 等 价 公 式 ,用 谕
示 SAT 来 检 查 它 是 否 真 的 是 等 价 的 ,若 是 ,则 接 受 。 ■

对角化方法的局限
4
下 一 个 定 理 表 明 存 在 谕 示 A 和 B ,使 得 可 以 证 明 ? 与 NPA 不 同 ,而 PB 与 NPB 相 同 。
这 两 个 谕 示 很 重 要 ,因 为 它 们 的 存 在 表 明 不 太 可 能 用 对 角 化 方 法 解 决 P 与 NP 问 题 。
对 角 化 方 法 的 核 心 是 一 台 图 灵 机 对 另 一 台 图 灵 机 的 模 拟 。模 拟 是 这 样 完 成 的 :模 拟 机
器 能 够 确 定 另 一 台 机 器 的 行 为 ,从 而 以 不 同 的 方 式 动 作 。 假 定 给 这 两 台 机 器 以 同 样 的 谕
示 ,那 么 每 当 被 模 拟 机 器 询 问 谕 示 时 ,模 拟 机 也 询 问 ,所 以 模 拟 过 程 可 以 像 以 前 一 样 进 行
下 去 。因 此 ,凡 是 仅 用 对 角 化 方 法 证 明 的 关 于 图 灵 机 的 定 理 ,当 给 两 台 机 器 以 相 同 谕 示 的
时 候 ,将 仍 然 成 立 。
特 别 地 讲 ,如 果 能 用 对 角 化 方 法 证 明 P 与 NP 不 同 ,就 能 下 结 论 说 它 们 相 对 于 任 何 谕
示 也 是 不 同 的 。但 是 PB 与 NPS 相 等 ,所 以 结 论 不 成 立 。因 此 对 角 化 方 法 不 足 以 分 开 这 两
个 类 。类 似 地 ,依 据 简 单 模 拟 的 证 明 不 能 说 明 这 两 个 类 相 等 ,因 为 那 将 证 明 它 们 相 对 于 任
何 谕 示 都 是 相 等 的 ,但 实 际 上 PA 与 NPA 不 相 等。

1. 存 在 谕 示 A 使 得 PA N P A 。

即 可。 ^
2. 存 在 谕 示 B 使 得 PB = N P B 。
证 明 思 路 展 示 谕 示 B 是 容 易 的 ,只 需 令 B 是 任 意 的 PSPACE 完 全 问 题 ( 如 TQBF )

构 造 谕 示 A 。设 计 A 使 得 NPA 中 的 某 个 语 言 LA 在 证 明 它 时 需 要 蛮 力 搜 索 ,因 而 不
NPA & 结 论 。构 造 过 程 依 次 考 察 每 一 个 多 项 式 时 间 谕 示

^
可能属于 PA 。因 此 可 以 得 岀 PA
机 器 ,保 证 每 一 个 都 不 能 判 定 语 言 L a 。
证 明 令 B 是:TQBF 。有 下 面 一 系 列 包 含 关 系 :

NP擊 S NPSPACE c PSPACE P聊

^
包 含 关 系 1 成 立 ,因 为 可 以 把 非 确 定 型 多 项 式 时 间 谕 示 机 器 转 变 为 非 确 定 型 多 项 式 空 间
机 器 ,该 机 器 不 使 用 谕 示 ,而 是 计 算 出 对 TQBF 的 查 询 的 答 案 。由 萨 维 奇 定 理 可 知 包 含 关 系
238 第三部分复杂性理论

2 成立 。包含关系 3 成立是因为 TQBF 是 PSPACE 完 全 的 。因 此 下 结 论 = NPT F



下面说明怎样构造谕示 A 。对于任意的谕示 A ,令是所有这样的字符串的集合 :A
中有一个长度相同的字符串 。 于是
L A = { w|彐 :
c 6 A[ | x | = | w | ] }
显然 ,对于任何 A ,语言 LA 属于 NPA 。

'
如下设计 A 。SMl 9 M2 ,


为 了 证 明 不 属 于P … ,是所有多项式时间谕示图灵机
的列表 。 为了简单 ,假定 : 在时间 V 内运行 。构造过程分步骤进行 。 第 f 步构造 A 的一
部 分 ,保 证 不 判 定 LA 。 通过声明某些字符串在 A 中而另外一些字符串不在 A 中来构
造 A 。 每一步仅确定有穷个字符串的状态 (指在或者不在 A 中 )。幵始 ,没有关于 A 的任
何信息 。从步骤 1 开始 。


步骤 / 迄今为止 ,已经声明有穷个字符串在或不在 A 中。选择 让它比所有这些
串的长度都长 ,而且《 充分大使得 2” 比一大 , 是 :的运行时间。现在说明怎样扩展

关于 A 的信息 ,使得只要 P 不 在 中 ,Aff 就接受它。


在输入 P 上运行 M ,,如下回应它的谕示查询 。如果
符串回应与它的状态一致 。如果
^ 查询一个状态已经确定的字
的状态还未确定 ,就对查询返回 NO , 并声明 不
在 A 中 。继续模拟 Mf ,直到它停机 。
^
现 在 从 的 角 度 考 虑 问 题。如 果 M, 发现一个长为《 的字符串在八中 ,它就应该接
受 ,因 为 它 知 道 1”在 中。如 果 M, 确定所有长为〃 的字符串都不在 A 中 ,它就应该拒
^
绝 ,因为它知道 1” 不在 LA 中。但是 ,它没有足够的时间来询问所有长为 n 的字符串 ,而
且我们已经对它所做的每一个查询都回答 NO。所以当 Mf 停机时必须决定是接受还是拒
绝 ,而它还没有足够的信息保证它的决定是对的 。
现在的目标是确保它的决定是不对的 。为此 ,观察它的决定 ,然后扩展 A 使其反面成
立 。于是 ,如果 M, 接受 1% 就声明所有剩下的长为 n 的字符串都不在 A 中 ,从而确定 1”
不属于 LA 。 如 果 拒 绝 1”,就 可 以 找 到 一 个 尚 未 查 询 过 的 长 为 n 的字符串 ,并声明
该字符串属于 A ,从而保证 1 属于 LA 。 这 样 的 字 符 串 必 定 存 在 ,因 为 运 行 W 步 ,少
于长为 n 的字符串总数 2 任何情况都能确定不判定 。
'
步骤 / 把那些状态还没有确定下来且长度不超过 n 的字符串都声明为不在 A 中 ,该步
完成 。 从步骤 〖 + 1 继续进行下去。
已经证明没有多项式时间谕示图灵机能够以谕示 A 判定 LA ,因此定理得证 。 ■

总之 ,相对化方法表明 : 为了解决 P 与 NP 问题 ,必须分析计算 ,而不仅仅是模拟它


们 。在 9.3 节中 ,将介绍一种可能会导向这种分析的方法 。

9.3 电路复杂性
将按照数字电路设计的电子器件用导线连在一起 ,就构成了计算机 。也可以用对应数
字电路的理论模型 (称 为 布 尔 电 路) 来模拟如图灵机这样的理论模型 。建立图灵机与布尔
电路之间的联系有两个目的 。第一 ,研究者相信电路提供了一种方便的计算模型 ,用以处
理 P 与 NP 问题及其相关问题 。第二 ,电路为有关 SAT 是 NP 完 全 的 库 克
供了另一种证明方法 。 本节讨论这两个主题 。
- 列文定理提
一个布尔电路 ( boolean circuit ) 是由导线 ( wire ) 连 接 的 门 ( gate ) 和
第9章 难 解 性 239

输入 ( input ) 的 集 合 ,其 中 不 允 许 出 现 循 环 。 门 有 三 种 形 式 :与 门 、 或 门 和 非 门 ,如
-
图 9 2 所示。
布尔电路中导线传递布尔值 0 和 1。门是计算布尔函数 AND、 OR 和 NOT 的 处 理 器 。
当两个输入都是 1 时 ,AND 函数输岀 1 ,否 则 输 出 0。 当两个输入都是 0 时 ,OR 函 数 输
出 0 , 否 则 输 出 1。NOT 函 数 输 出 其 输 人 的 反 面 ,换 言 之 ,若 输 入 是 0 , 它 输 岀 1 ,若输
人 是 1 ,它 输 出 0 。输 入 被 标 记 为 X\ ,••• 。其中一个门被指定为输出门 ( output gate )。
-
图 9 3 描绘了一个布尔电路 。

输入变量

' A A
输人

输出
与 或 非 输出门

图 9- 2 “与” 门 、“或” 门和 “非 ” 门 图 9- 3 布尔电路的例子

布尔电路从输入的赋值中计算输出值。它沿着导线传播值 ,计 算 与 相 应 的 门 关 联 的 函
数 ,直到输出门被赋予一个值 。图 9 4 显示了布尔电路从输入的赋值中计算出值的过程 。 -


用函数来描述布尔电路的输入 / 输出行为 。 给带 n 个输人变量的布尔电路 C 关 联 一 个
函数 / c:{ 0 , 1 },其中 ,当输入 XI ,
1 }” { 0 , … , 设 置 为 <21 ,
…,a „ 时 ,若 C 的 输 出 为 6 ,
…,
则写 /cUi , & )= 6。称 C 计算函数 /c 。有时考虑有多个输出门的布尔电路 。带々个输

出位的函数计算一个值域为{ 0 ,
1 H 的 函 数。
(Hd 7T - 输 入 奇 偶 函 数 ( parity function ) parityn:{ 0 ,1 } W
- { 0 ,1 }
> 输 出 1 ,当且
仅当输人变量中有奇数个 1。图 9 5 的电路计算有 4 个变量的奇偶函数 parity - “

输人 0 0

0 0

T1 输 出

图9 4 - 布尔电路计算的例子
-
图9 5 计算 4 个变量的奇偶函数的布尔电路

实际上 ,可以用电路来检查适当地编码为 { 0 ,1 } 上的语言的成员资格 。存 在 的 问 题


是 ,任何具体的电路只能处理某一固定长度的输入 ,而 语 言 可 能 包 含 不 同 长 度 的 字 符 串 。
所以 ,不是用单一电路来检查语言的成员资格 ,而是用整个一族电路来完成这一任务 ,每
个输入长度有一个电路 。在下面的定义中形式化这一概念 。
240 第三部分复杂性理论

嶺 一 个 电 路 族 (circuit family) C 是 电 路 的 一 个 无 穷 列 表 (G , Ci ,C2 ,


) …),
其 中 C„ 有 72 个 输 入 变 量 。 称 C 在 { 0 ,1 } 上 判 定 语 言 A ,如 果 对 于 每 个 字 符 串 加( 6 八 )
, 仪

^
当 且 仅 当 ( ( 加)= 1,其 中 n 是 w 的 长 度 。
电 路 的 规 模 (size) 是 它 所 包 含 的 门 的 数 目。当 两 个 电 路 有 同 样 的 输 入 变 量 ,并 且 在
每 一 输 入 赋 值 上 都 输 出 同 样 值 的 时 候 ,称 它 们 是 等 价 的 。如 果 一 个 电 路 没 有 与 之 等 价 的 更
小 的 电 路 ,则 它 是 ( 规 模 ) 极 小 的 (size minimal )。极 小 化 电 路 问 题 在 工 程 上 有 明 显 的 应
用 ,但 是 一 般 难 以 解 决 。甚 至 判 定 一 个 具 体 的 电 路 是 否 是 极 小 的 这 个 问 题 也 不 见 得 是 在 P


或 NP 内 可 解 的 。一 个 电 路 族 中 的 每 一 个 电 路 C, 如 果 是 极 小 的 ,则 称 该 族 是 极 小 的 。一
个 电 路 族 (Co ,Ci ,C2 ,
… ) 的 规 模 复 杂 度 (size complexity ) 是 一 个 函 数 /: N N ,其 中
f( n ) 是 C„ 的 规 模 。当 明 显 在 讨 论 规 模 时 ,用 电 路 族 的 复 杂 度 指 代 其 规 模 复 杂 度 。
电 路 的 深 度 ( depth ) 是 从 输 人 变 量 到 输 出 门 的 最 长 路 径 的 长 度 (导 线 的 数 目)。如 同
定 义 电 路 的 规 模 一 样 ,可 以 定 义 深 度 极 小 ( depth minimal) 的 电 路 和 电 路 族 以 及 电 路 族 的
深 度 复 杂 度 (depth complexity )。 在 关 于 并 行 计 算 的 1 0.5 节 中 ,电 路 的 深 度 复 杂 度 尤 为
重 要。
语 言 的 电 路 复 杂 度 ( circuit complexity ) 是 该 语 言 的 极 小 电 路 族 的 规 模
复 杂 度 。 语 言 的 电 路 深 度 复 杂 度 ( circuit depth complexity ) 类 似 定 义 ,只 是 把 规 模 换 成
深 度。
容 易 推 广 例 9.21 ,给 出 计 算〃个 变 量 的 奇 偶 函 数 的 有 ou ) 个 门 的 电 路 。
一 种 办 法 是 构 造 一 棵 由 计 算 XOR 函 数 的 门 组 成 的 二 叉 树 ,这 里 XOR 函 数 就 是 2 输 入 奇 -
偶函数 iparity ,然 后 如 前 面 的 例 子 那 样 ,用 2 个 NOT 、 2 个 AND 和 1 个 OR 实 现 每
个 XOR 门 。
令 A 是 包 含 奇 数 个 1 的 字 符 串 组 成 的 语 言 ,那 么 A 的 电 路 复 杂 度 是 0(〃)。 ■

语 言 的 电 路 复 杂 度 与 它 的 时 间 复 杂 度 有 关。任 何 时 间 复 杂 度 小 的 语 言 其 电 路 复 杂 度 也


小 ,如 下 面 的 定 理 所 述 。
设 hN N 是 一 个 函 数, 若 A G T I M E( Krz )),则 A 的 电 路 复
杂 度 为 O U2( n ))。
该 定 理 提 供 了 一 条 证 明 P关 N P 的 途 径 ,以 此 证 明 N P 中 的 某 个 语 言 的 电 路 复 杂 度 超
过 多 项 式。
证 明 思 路 设 M 是 在 时 间 Mrz ) 内 判 定 A 的 图 灵 机 。( 为 了 简 单 ,忽 略 M 的 实 际 运 行
时 间 0(〆 ) 对 每 一 个 n ,构 造 电 路 (
〃)) 中 的 常 数 因 子 。 :模拟 M 在 长 为 w 的 输 入 上 的 运
算 。C„ 的 门 分 成 行 ,每 一 行 对 应 M 在 长 为 rz 的输入上进行运算的〆〃) 步 之 一 。门 的 每 一
行 代 表 M 在 相 应 步 骤 上 的 格 局 (状 态 、读 写 头 位 置 、 带 子 内 容 )。 每 一 行 用 导 线 连 到 上 一
行 ,以 使 它 从 上 一 行 的 格 局 能 够 计 算 本 格 局。修 改 M 使 得 输 入 编 码 为 { 0 ,
1 }。 另 外 ,当
M 即 将 接 受 时 ,它 把 读 写 头 移 到 最 左 单 元 ,在 进 人 接 受 状 态 之 前 先 在 那 里 写 下 符 号 U。这
样 一 来 ,就 可 以 指 定 电 路 的 最 后 一 行 的 一 个 门 为 输 出 门 。
证 明 设 M =( Q,
2,r,d,go ,
(
7aeeept ,
teieet ) 在 时 间 Krz ) 内 判 定 A ,设 w 是 长 为 n 的 输
入 。定 义 M 在 u;上 的 画 面 为 一 张 的 表 格 ,其 行 是 M 的 格 局。画 面 的 顶 行 包
含 M 在 w 上 的 起 始 格 局 。第 f 行 包 含 计 算 历 史 的 第 纟 步 的 格 局。
为 了 方 便 ,本 证 明 修 改 了 格 局 的 表 示 形 式 。在 3.1.1 节 描 述 的 旧 的 形 式 中 ,状 态 岀 现
在读写头正在读取的符号的左边 。与之不同 ,现在把状态和读写头下的符号表示为一个单
一的复合字符 。例如 ,若 M 在状态心带子上包含字符串 1011 ,读写头正读取左起第二个
符号 ,旧形式为切011 ,新形式为
的符号 0。

_
11 ,其中复合字符

画面的每一格可以包含一个带子符号 (r 的 成 员 ) 或 状 态 和 带 子 符 号 的 组 合 (Q x r
的 成 员 )。称 画 面 的 第 〖 行 、 第 j 列 的 那 一 格 为 画 面 的 顶 行 是 Cd /[ i ,i ],
ceLL\\ ,t { n )\ , 该 行 包 含 起 始 格 局 。
~
…,
_ 第 夕 章 难 解 性

在 定 义 画 面 的 概 念 中 ,关 于 M 做 了 两 个 假 设 。 第 一 ,正 如 证 明 思 路 中 所 讲 的 ,仅当
读写头在最左带子单元上并且该单元包含符号U时 ,M 才接受 。第二 ,一旦 M 停机 ,它 就
永 远 待 在 同 一 格 局 中 。 所 以 ,通 过 查 看 画 面 最 末 一 行 的 最 左 单 元 就 能 确 定

cell [\ ,\ ]
-
M 是 否 已 经 接 受 。图 9 6 显 示 了 M 在 输 入 0010 上的部分画面 。

°
^
0
2 3
0 0
tin )
起始格局
第二个格局
241

同 时表示状态 g 和读写头下

0 0
0
cell [ t( n ) ,\ ]


( 接受位置 )
第/(«) 个格局

图 9- 6 M 在输入 0010 上的画面

每 一 单 元 的 内 容 都 由 上 一 行 的 某 些 单 元 来 决 定。 如 果 知 道 了 1 ,> 1 ], -
WZ[f — 1 ,
7 ]和 c W[

l,
)+ l] 的 值 ,就能根据 Af 的 转 移 函 数 获 得 的 值。例 如 ,
-
下图放大了图 9 6 的画面的一部分 。上一行的三个符号 0 、 0 和 1 是不含状态的带子符号 ,
所以中间符号在下一行必须保持为 0 , 如下图所示 。

0 0

现在开始构造电路 C„ 。对 应 画 面 的 每 一 个 单 元 有 多 个 门 ,这 些 门 从 影 响 某 一 单 元 的
另外三个单元的值中计算出该单元的值 。
为了使构造更容易描述 ,添加一些灯来表示电路中某些门的输出 。 灯 只 是 用 作 说 明 ,
不影响电路的操作 。
设 々 是 r U ( r x Q) 中 元 素 的 数 目 。对于画面的每一个单元有々盏灯 ,r 的 每 个 成 员
对应一盏灯 ,(r x Q) 的 每 个 成 员 对 应 一 盏 灯 ,总 共 盏 灯。称 这 些 灯 为
其 中 i< <(〖(〃)o e n j( r x Q)。在一个单元中的灯的状况表明了该单元的内容 ;如 果

~
242 第三部分复杂性理论

^_
开着 ,ceUli , 就包含符号 5。当然 ,如果电路构造正确 ,一个单元中只能
有一盏灯开着 。
不妨挑一盏灯来看看 ,假设就是 W心,
)] 中 的 如 果 该 单 元 包 含 符 号 S,
这 盏 灯 应 该 开 着 。考 虑 影 响 的 三 个 单 元 ,确 定 哪 些 赋 值 会 使 包 含 s。
通过考察转移函数 5, 就可以做此决定。
假定 ,按照 5,当单元 ceW[z — 1,j
_
l],cell [ i — l , _
j ],ceLL \ i — \ , 7 + 1] 分别包含 a ,
6, _
c 时 ,cell{i ,]\ 包 含 s ~
0 用导线连接电路 ,使得如果 Zfg /i心一 1 , ) 一 1, a ],light[i — l ,j,
—l,+ l ,c] 都开着 ,贝P蝓/U[f ,

^^
b] 和
~
/U[i ) ),s] 也开着 。 为此把 z 一 1 行的这三盏灯连 ’

到与门 ,其输岀连到
一般来讲 , — _ _
cell \ i — \ ,j ], cell \ i — \ , 7 + 1] 有几个不同的赋值 (ai ,
都 可 以 使 包 含 5。 在 这 种 情 况 下 ,用 导 线 连 接
电路 ,使得对应每一组赋值 A,
匕,cf ,各自的灯都连到与门 ,所有与门都连到或门 。这个
电路如图 9 7 所示 。-
刚才描述的电路对每盏灯都一样 ,只是
o

^
在边界上有几处例外 。 画面的左边界上的每 ⑧ )…
个单元 ,即 ceZZ[f ,
l ], ,只 有 上
一行的两个单元可能影响它的内容 。 在右边
界上的单元也是一样 。在这种情况下 ,修改
电路 ,让它模拟 M 在这种情况下的行为 。
第一行的单元都没有前驱 ,需要用一种
特殊方式处理它们 。 这些单元包含起始格
局 ,它们的灯用导线连到输人变量 。 于是
_

^
\ \] 连到输入训 ,因为起始格
light[\ A , q
- —
_
图9 7 盖灯的电路
局以起始状态符 Qb 开始 ,读写头在 wi 上起

动 。 类似地 ,light[l 9 l j <? oO ] 通过非门连到输入 wi 。进一步 , 咖[1,


2,1],
…,咖[l ,
n,

1] 连到输入 ,n, 2 ,0]r”, g7 [l ,


而 g/ [ l , n, , " "

0] 通过非门连到输入 UU 2
"
VU .

^ ^ ^ ^
2 ••• ■

因为输入字符串 w 决定了这些值 。另外 ,light \i l 9 n + l 9 \S\ ,•••,light[l 9 t( n ),U] 都 开 着 ,


^
因为第一行中剩余的单元对应带子上初始为空格 (U) 的位置 。最后 ,第一行中所有其他
灯都关着 。
到此为止 ,已经构造了一个电路来模拟 M 的第 Krz ) 步 。剩下要做的就是指定一个门
为电路的输出门 。当 M 在第 Mn ) 步在带子左端的一个包含 U 的单元上进人接受状态 gaeeept
时 ,它接受加。所以指定输出门为与 / [(
纟《 ),, acceptUl ] 相关联的门 。 这就完成了本
1|
^
定理的证明 。 ■

除了把电路复杂性与时间复杂性联系起来以外 ,定理 9.25 还给岀了定理 7.22 ( 即库


克- 列文定理) 的另一种证明 ,如下所述 。称布尔电路是可满足的 ,如果输入的某一赋值
使电路输出 1。电路可满足性 (circuit- satisfiability ) 问题就是判定一个电路是否是可满足
的 。令
CIRCUIT - SAT = { ( C ) I C 是可满足的布尔电路}
第 夕 章 难 解 性 243

前面的定理 9.25 说 明 布 尔 电 路 能 够 模 拟 图 灵 机 。 用 这 个 结 果 来 证 明 CJRCUJT- SAT 是


NP 完全的 。
CIRCUIT- S A T 是 NP 完 全 的 。
证 明 为 了 证 明 该 定 理 ,必须证明 CJRCUn^- SAT 属 于 NP,并 且 NP 中的任何语言
-
A 都可归约到 CWCWT SAT 。第一点是显然的 。为了证明第二点 ,必须给出多项式时间

_
归 约 /,把字符串映射为电路 ,其中
f ( w ) = < C>
蕴涵
w 布尔电路 C 是可满足的
因 为 A 属 于 NP ,所以它有多项式时间验证机器 V,其 输 入 的 形 式 为〈 x ,
C〉,这里 c
可以是证明 x 属 于 A 的 证 书 。 为了构造 /,用 定 理 9.25 的方法得到模拟 V 的 电 路。把 w
的符号填入对应于:r 的 电 路 的 输 入 。剩 下 的 电 路 输 入 都 对 应 证 书 c。把 这 个 电 路 称 为 C,
并输出它 。
若 C 是 可 满 足 的 ,则存在一个证书 ,所 以 w 属 于 A 。 反 之 ,若 加 属 于 焱 ,则 存 在 一
个 证 书 。所 以 C 是可满足的 。
为 了 证 明 该 归 约 在 多 项 式 时 间 内 运 算 ,必 须 考 察 定 理 9.25 的 证 明 ,注 意 到 电 路 的
构 造 可 以 在〃的 多 项 式 时 间 内 完 成 。验 证 机 的 运 行 时 间 是 V ,所 以 构 造 的 电 路 的 规 模 是
OU2 M 。电 路 的 结 构 非 常 简 单 ( 实 际 上 它 的 重 复 度 很 高 ),所 以 归 约 的 运 行 时 间 是
0( # ) 0

现在证明 3SAT 是 NP 完全的 ,从而完成库克 列文定理的另一种证明方法 。 -


3SAT 是 NP 完 全 的 。
证明思路 3 SAT 在 NP 中 是 显 然 的 。 下 边 证 明 所 有 NP 中的语言都在多项式时间内
-
归约到 3SAT。 为此把 C伙Ct/JT SAT 在多项式时间内归约到 3SAT。归约把电路 C 转化
为公式卜其中 C 可满足当且仅当 0 可 满 足 。公式为电路中的每个变量和每个门都保留一
个变量 。
在 概 念 上 ,公 式 模 拟 了 电 路 。 彡的满足赋值包含 C 的 满 足 赋 值 ,它 也 包 含 C 在 满 足
赋值上的计算历史中每一个门的值 。 实际上 ,0 的 满 足 赋 值 猜 测 C 在 满 足 赋 值 上 的 所 有
计 算 ,并 且 最 后 0 的 子 句 检 查 计 算 的 正 确 性 。 另 外 ,0 包 含 一 个 子 句 来 规 定 C 的 输 出
是 1。
-
证 明 给 出 一 个 从 C伙CUJT SAT 到 3SAT 的 多 项 式 时 间 归 约 / 。设 C 是 一 个 电 路 ,
包含输入工1 ,…, XZ 和门 g l ,
…,心 。归 约 从 C 构造包含变量 X I , …,
… yXl ,gl , grn 的公式必 。

必的每一个变量对应 C 的 一 条 导 线 。变 量 : 对 应 输 入 导 线 ,变 量 g, 对 应 门 输 出 的 导 线 。
把多的变量标记为
^
现在描述彡的子句 。首先使用蕴涵直观地描述 的 子 句 ,再 将 蕴 涵 ( P Q ) 转 换 成

—^^
( P V Q) o C中每一个带输入导线和输出导线的非门等价于表达式
( zvi

► vuj ) A ( w, wj )
该表达式转换成两个子句
7)

^
( wi V A (t 7V
注意 ,当且仅当 % 和 的 赋 值 正 确 地 反 映 非 门 的 功 能 时 ,这两个子句才同时被满足 。
244

( ( wi

转换成四个子句为
A

iuui \!
第三部分复杂性理论

C中 每 一 个 带 输 入 和 以 及 输 岀 的 与 门 等 价 于 表 达 式

^7)
Wj
W) A ( ( w7

M wi ) A (^ V
C中 每 一 个 带 输 入 和 以 及 输 出 的 或 门 等 价 于 表 达 式
((
^7 A ^7)
转换成四个子句为
ivui
Wk ) A

uJk ) A ( wi V 7 V
\j Wj \J
(( 研
t
A

/\
Wj )
'

^7 V
-

w j )^ W k )
*

_
wT ) A

) 八 ( ^T M vuj M vuk ) f\ ( wi V 7 V

四 个 子 句 才 能 被 满 足 。另 外 ,把 子 句 加 人 # 中 ,V0 , 是 c 的输出门 。
所描述的某些子句包含的文字少于三个 。通过重复文字就可以把这些子句扩展到所需
要的长度 。例如 ,将子句 (⑽ ) 扩展为等价的子句 OlVm \/ VUm \J Wm ) 这就完成了构造 。
下边简要地说明了该构造满足要求 。如果存在满足 C 的赋值 ,那么根据 C 在该赋值上
^
在这两种情况下 ,只有当变量 VOi 、 VUi 和 的 赋 值 正 确 地 反 映 了 门 的 功 能 时 ,所 有
I
A
( ( wz

A ( w7 V

((
A wj)

A ^7 )
t
->■
zvk )

V wT ) A ( w7 V

Wk )
A

A
((
^* A

( ( w/

0
^
^7 V
A Wj )

wk )

wk )

的计算历史来给变量 A 赋值 ,就可以得到满足彡的赋值 。 反之 ,如果存在满足彡的赋值 ,


它就给岀了 C 的赋值 ,因为它描述了 C 的整个计算历史 ,其中输出值是 1。归约可以在多项
式时间内完成,因为计算历史简单 ,输出规模是输入规模的多项式 (实际上是线性的)。 ■

练习
A9 . 1
证明 TIME( 2”)= TIME( 2» +1 ) o
A9.2 证明 TIME( 2n )$ TIME( 22 ”)。
A9.3 证明 NTIME( n ) C PSPACE。
9.4 -
如在图 9 4 中所做的那样 ,标出图 9 5 所描绘的电路中所有门计算出的值 ,从而说明它在输 -
人 0110 上的计算历史 。
9.5 给出三个输人变量上计算奇偶函数的电路 ,并说明它在输入 011 上的计算历史 。
9.6 证明若 AGP , 则 PA = P。
9.7 给出带指数的正则表达式 ,产生如下在字母表 { 0 ,1 } 上的语言 :
Aa. 所有长度为 500 的字符串 。
Ab. 所有长度不超过 500 的字符串 。
Ac. 所有长度不少于 500 的字符串。
Ad. 所有长度不等于 500 的字符串。
e. 所有恰好包含 500 个 1 的字符串。
f . 所有包含至少 500 个 1 的字符串。
g. 所有包含至多 500 个 1 的字符串 。
h. 所有长度不少于 500 并且在第 500 个位置上为一个 0 的字符串 。
i. 所合包含两个 0 并且其间至少相隔 500 个符号的字符串 。
9.8 若 尺 是 正 则 表 达 式 ,令 尺 代 表 表 达 式
Rm UR U…U尺
说明怎样利用通常的指数算子实现算子 ,但不许用 o

证明若 NPsP5 ,贝lj NP = coNP。

^
9.9
9. 1 0 在问题 8.29 中已经证明 ,ALBA 是 PSPACE 完全的 ,
a. 说明 ALBA 是否属于 NL 并给出解释 。
b. 说明 ALBA 是否属于 P 并给出解释 。
第P 章 难 解 性 245

9.11 在问题 7.19 中给出 了语言 MAX- CLJQLTE ,证明 MAX CLJQLTE 6 PMr 。 -


问题
回忆一下 ,指定多个输出门 ,就可以考虑输出 { 0 ,1 } 上的字符串的电路了。设 a

^
l }2”
{0 ,
‘ :
9.12
l + i 计算两个 + 1 位结果 。 证明可以用 0( 2 )
{0,
” 位二进制整数的和并输出 规模的电路计


/

算函数 n o

9. 13 定义函数 majority :{ 0 ,
l}n { 0 ,1 }为 :

0 Y j X i < n/ 2
majorityn( x \ ,••• ,xn )=
1 YjXi
^n 2
于是 ma知rh:
y „ 函数返回输入中的多数派 。证明 majority 可以用下面的电路计算 :
^ /

a. OU 2 ) 规模的电路 。
b. Odnlogn ) 规模的电路 。(提示 :递归地把输入数分成两半并利用问题 9.12 的结果 。

*
9.14
9.15
如问题 9.13
假设 A 和 B
— :
样定义问题 ma知n7 y „ 。 证明它可以用 O( TZ ) 规模的电路计算 。
是两个谕示 。 现只知道其中一个是 TQBF 的谕示 ,但不知道到底是哪一个 。请给
出一个能访问 A 和 B 的算法 ,并且该算法能在多项式时间内解决 TQRF 问题 。
9.16 证明存在谕示 C 使得 NPC 关 coNPc 。
9.17
- - query oracle Turing machine )

^
/c 查询谕示图灵机 ( 是在每个输入上允许至多进行々次査询的
谕 示 图 灵 机 。用 符 号 表 示 对 谕 示 A 的 f 查询谕示图灵机 M ,定 义 为 能 在 多 项 式 时 间
内 被 判 定 的 语 言 集 合。
a. 证 明 NPUcoNPGPM7 ,1 。 '

^
,1

^
b. 假设 NP关 coNP ,证明 PUcoNP P5 。
.
9 18 -
定 义 唯 一 满 足 ( unique sat ) 问 题 为 : 是 一 个 只 有 唯 一 满 足 赋 值 的 布 尔 公 式 }。
证明 L/SA:TGPSA 。 7'

.
9 19 令 EREXt =〈 〉尺是一个具有指数形式的正则表达式 ,L( i? )= 0 } , 证明
{ 尺| EREXtGP。
9.20 说明下面的关于 P关 NP 的错误 “证明” 错在哪里 。 采用反证法 。假设 P = NP ,则 SATGP。

^
所以 ,对于某个々,SAT 6 TIME( )0 因 为 NP 中的每个语言多项式时间可归约到 SAT% 所
NPGTIME( V )。 因此 P Q T I M E( V )。但是 ,由时间层次定理 ,TIMECV + 1 ) 包 含 不 在

^ —
TIME( ) 中的语言 ,这与 PGTIME( V ) 矛盾 。所以 P关 NP。
9.21 考虑函数外 XN 2 * # * 定义如下 :令 pad( s , r> = s # ,其中 j = max( 0 ,Z m ), 是 5 —

-
l ) 就是在 5 的末尾添加足够多的新符号 # ,使得结果的长度至少是 Z 。 对
的长度 。 于是 pad( s ,
于任何语言 A 和函数 /:N N , 定义语言恥AA ,
/) 为 :
pad ( A ,
/) = { pad ( 5,
/( m )) | 饥 是 5 的 长 度}
证明 :若 AGTIMEU ), 6 W 2 )GTIME(
则舛以A , 3)


9.2 2 证 明 :若 NEXPTIME 关 EXPTIME ,贝lj P> NP。你会发现问题 9.21 中定义的函数外

^
对证明
本问题是有用的 。
A9 .2 3 —
如 问 题 9.21 样定义 pad
a. 证明 :对任何语言 A 和任何自然数々,A 6 P 当且仅当
0

(A,

^^
V )GP。
b. 证明 P关 SPACE( n )。
9.24 :
证明 TQBF$ SPACE( TZ1/3 )。
*
9.25 参 考 问 题 5 . 1 4 中 关 于 2 DFA ( 双头有限自动机 ) 的定义 ,证明在 P 中存在一个语言不能被
2 DFA 识别 。

习题选解
9.1 大 O 记法定义了时间复杂性类 ,因此常量因子对分类没有影响 。 函数 2”+ 1 的时间复杂性是
246 第三部分复杂性理论

0( 2« ), 所 以 A TIME(2W ) 当 且 仅 当 AGTIME( 2”+ 1 )。


9.2 由 于 2 <22 " ,故 TIME( 2 » )GTIME( 22 ”) 成 立 。利 用 时 间 层 次 理 论 ,可 以 证 明 这 个 包 含 关 系
是 真 包 含 的 。 函 数 22”是 时 间 可 构 造 的 ,因 为 在 0( 22”) 时 间 内 ,一 个 图 灵 机 可 以 先 写 一 个 1
然 后 紧 跟 个 0 。 因 此 时 间 层 次 理 论 确 保 存 在 这 样 一 个 语 言 A , 它 可 以 在 0( 22 ) 内 判 定 ,但
不 能 在 o(22”/log22”)= o( 22V 2 w ) 内 判 定 。 所 以 A TIME( 22”),但 A 任 TIME( 2”)。
9.3 因 为 任 何 图 灵 机 在 某 个 计 算 分 支 上 运 行 耗 费 时 间 时 ,它 在 该 分 支 上 使 用 的 单 元 格 至 多 为
个 ,所 以 NTIME( n )GNSPACE( « )。 根 据 萨 维 奇 定 理 已 知 NSPACE( /z )GSPACEU2 )。 根
据 空 间 层 次 定 理 SPACEU 2 ) S SPACECn3 )。由 于 SPACE U3 )G PSPACE ,所 以 NTIME(;
i)S

PSPACE。
9.7 :
a. I 5 00 b.(2 Ue)500 c. 25002 * d.(2 Ue)499 U 25012 *

9. 23 a. 令 A 是任何语言 ,々GN。若 AGP , 则 舛d( A ,


V ) GP,这 是 因 为 通 过 以 下 几 个 步 骤 可 以 得
出 这 个 结 论 。第 一 步 ,通 过 将 w 写 成 的 形 式 ( 其 中 s 不 包 含 符 号 # ) 从 而 判 断
舛 是 否 成 立 。第 二 步 ,判 断 = 是 否 成 立 。 第 三 步 ,判 断 5 GA 是 否 成 立 。
在 多 项 式 时 间 内 完 成 第 一 步 是 显 然 的 。第 二 步 的 运 行 时 间 为 UI 的 多 项 式 ,因 为 U|<|w|,
运 行 时 间 为 Id 的 多 项 式 ,所 以 第 二 步 在 多 项 式 时 间 内 完 成 。若 pad( A,
nk )6 P ,则 AGP ,
因 为 通 过 用 # 对 w 进 行 填 充 直 到 其 长 度 为 这 样 可 判 断 是 否 成 立 ,接 着 判 断 它
是 否 属 于 两 个 步 骤 都 仅 需 要 多 项 式 时 间。
b. 假 设 P = SPACE( TZ )。 令 A 是 一 个 语 言 ,它 属 于 SPACEU2 ),但 不 属 于 SPACEU )。 根 据
空 间 层 次 定 理 ,A 是 存 在 的 。因 为 在 填 充 语 言 里 消 耗 的 空 间 是 线 性 的 ,存 在 足 够 的 空 间 运
n 2 )GSPACEU )。 根 据 假 设 ,pad( A ,n2 )e P , 因 此
行 A 的 OU 2 ) 空 间 算 法 ,所 以 夕W( A ,
根 据 (a ) 中 的 证 明 ,AGP , 从 而 AGSPACEU )。推 出 了 矛 盾 。
I 第 10 章
Introduction to the Theory of Computation , 3 e

复杂性理论高级专题

本 章 简 要 地 介 绍 复 杂 性 理 论 中 的 几 个 其 他 专 题 。 这 是 一 个 非 常 活 跃 的 研 究 领 域 ,包
含 着 丰 富 的 研 究 内 容 。 本 章 涉 及 很 多 更 为 高 级 的 专 题 内 容 ,但 不 是 对 所 有 问 题 进 行 全 面
综 述 。需 要 特 别 指 出 的 是 ,其 中 有 两 个 重 要 的 专 题 超 出 了 本 书 的 范 围 ,它 们 分 别 是 : 量
子 计 算 ( quantum computation ) 和 概 率 可 核 查 证 明 ( probabilistically checkable proof )。
《 The Handbook of Theoretical Computer Science 》[7 4 ] 提 供 了 关 于 计 算 理 论 早 期 工 作 的
综述。
本 章 的 主 要 内 容 包 括 近 似 算 法 、 概 率 算 法 、 交 互 式 证 明 系 统 、并 行 计 算 以 及 密 码 学
等 。除 了 交 互 式 证 明 系 统 和 密 码 学 两 节 中 用 到 概 率 算 法 之 外 ,其 他 各 节 都 是 相 互 独 立 的 。

10 . 1 近似算法
在有的问题如最优化问题 (optimization problem ) 中 ,我 们 试 图 在 所 有 的 可 行 解 中 找
到 最 好 的 解 。例 如 ,寻 找 图 中 的 最 大 团 ,最 小 顶 点 覆 盖 ,或 者 两 个 顶 点 之 间 的 最 短 路 径
等 。前 两 个 问 题 是 NP 难 解 问 题。当 最 优 化 问 题 是 NP 难 解 问 题 的 时 候 ,不 存 在 找 到 最 好
解 的 多 项 式 时 间 算 法 ,除 非 P = NP。
在 实 践 中 ,找 到 绝 对 最 好 的 解 通 常 较 为 困 难 ,而 且 可 能 用 户 并 非 一 定 要 找 到 某 个 问 题
的 绝 对 最 好 的 解 ,即最优解 。 一 个 接 近 最 优 的 解 可 能 已 经 足 够 好 ,而 且 可 能 更 容 易 找 到 。
顾 名 思 义 ,近似算法 (approximation algorithm ) 是 为 寻 求 这 种 近 似 最 优 解 而 设 计 的 。
例 如 ,考 虑 7.5 节 所 讨 论 的 顶 点 覆 盖 问 题 。顶点覆盖问题被描述为一个表示判定问题
( decision problem ) 的 语 言 VERTEX- COVER 。判 定 问 题 只 有 两 个 答 案— 是 或 非 。该 问

- -
题 的 最 优 化 形 式 记 作 MJiV VERTEX COVER 。任 意 给 定 一 个 图 ,其 目 标 是 在 所 有 可 能 的
顶 点 覆 盖 中 找 到 一 个 最 小 的 顶 点 覆 盖 。下 述 多 项 式 时 间 算 法 近 似 地 解 这 个 最 优 化 问 题 。它
给 出 一 个 顶 点 覆 盖 ,其 规 模 不 超 过 最 小 顶 点 覆 盖 的 2 倍 。
A =“对于输人〈G〉 ,这里 G 是 一 个 无 向 图 :
1. 重 复 下 述 操 作 直 至 G 中 所 有 的 边 都 与 有 标 记 的 边 相 邻 。
2. 在 G 中 找 一 条 不 与 任 何 有 标 记 的 边 相 邻 的 边。
3. 给 这 条 边 作 标 记。
4. 输 出 所 有 有 标 记 的 边 的 顶 点 。

fc& jUlBI 上 述 算 法 A 是 一 个 多 项 式 时 间 算 法 ,它 给 出 G 的 一 个 顶 点 覆 盖 ,其 规
模 不 超 过 G 的 最 小 顶 点 覆 盖 的 2 倍。
证明 A 的 运 行 时 间 显 然 是 多 项 式 界 限 的 。设 X 是 它 输 出 的 顶 点 集 合 ,H 是 有 标 记
的 边 的 集 合 ,因 为 G 的 每 一 条 边 要 么 属 于 H ,要 么 与 H 中 的 一 条 边 相 邻 ,所 以 X 与 G 中
所 有 的 边 关 联 。因 此 ,X 是 一 个 顶 点 覆 盖 。
为 了 证 明 X 的 规 模 不 超 过 最 小 顶 点 覆 盖 y 的 2 倍 ,我 们 要 确 认 两 个 事 实 :X 中 顶 点
的 数 目 大 小 是 H 的 2 倍 和 H 不 大 于 Y。首 先 ,H 中 的 每 一 条 边 为 X 提 供 2 个 顶 点 ,从 而
248 第三部分复杂性理论

X 中 顶 点 的 数 目 大 小 是 H 的 2 倍 。 其 次 ,Y 是 一 个 顶 点 覆 盖 ,从 而 H 中 的 每 一 条 边 与 Y
中 的 某 个 顶 点 关 联 。由 于 H 中 的 边 互 不 相 邻 ,故 Y 中 的 顶 点 不 可 能 同 时 关 联 H 中 的 两 条
边 。由 于 Y 中 有 不 同 的 顶 点 关 联 H 中 的 每 一 条 边 ,所 以 顶 点 覆 盖 Y 不 小 于 H 。因 此 ,X
中 顶 点 的 数 目 大 小 不 超 过 Y 的 2 倍。 *

M / iV- V£RT£X- COV£ R 是 一 个 最 小 化 问 题 ( minimization problem ),因 为 我 们 的 目
标 是 求 可 行 解 中 最 小 的 解 。 在 最 大 化 问 题 ( maximization problem ) 中 ,我 们 试 图 求 最 大
的 解 。如 果 一 个 最 小 化 问 题 的 近 似 算 法 总 能 找 到 不 超 过 最 优 解 k 倍 的 可 行 解 ,则 称 这 个 算

- -
法 是 k 优 的 (々 optimal )。 前 面 关 于 顶 点 覆 盖 问 题 的 算 法 是 2- 优 的 。对 于 最 大 化 问 题 ,一

个 t 优 近 似 算 法 总 能 找 到 不 小 于 最 优 解 大 小 的 的 可 行 解。
+
下 面 是 最 大 化 问 题 MAX - CUT 的 近 似 算 法 。把 顶 点 集 V 划 分 成 两 个 互 不 相 交 的 子 集
S 和 了,称 为 无 向 图 中 的 割 ( cut ) 0 一 个 顶 点 在 S 中 ,另 一 个 顶 点 在 T 中 的 边 对 称 作 割 边
( cut edge ) 0 如 果 一 条 边 不 是 割 边 ,则 称 作 非 割 边 ( uncut edge ) 0 割边的数目称作割的大

-
小。MAX CUT 求 输 入 图 G 中 的 最 大 割 。正 如 在 问 题 7.5 4 中 所 说 明 的 ,该 问 题 是 NP 完
全 问 题 。下 述 算 法 因 子 2 的 范 围 内 在 近 似 MAX CUT 。 -
B =“对 于 输 人〈 G〉,这 里 G 是 顶 点 集 为 V 的 无 向 图 :
1. 令 S = 0 和 T = V。

2. 如 果 把 一 个 顶 点 从 S 移 到 T 或 从:T 移 到 S ,使 割 的 大 小 变 大 ,则 做 这 样 的 移
动 ,并 且 重 复 这 一 步 。
3. 如 果 不 存 在 这 样 的 顶 点 ,则 输 出 当 前 的 割 并 且 停 止。

该 算 法 从 一 个 (假 定 是 ) 坏 的 割 开 始 ,然 后 做 局 部 改 进 ,直 到 不 能 进 一 步 做 局 部 改 进
为 止 。虽 然 这 个 过 程 一 般 不 能 给 出 最 大 的 割 ,但 是 可 以 证 明 ,它 给 出 的 割 的 大 小 至 少 是 最
大割大小的一半。

- -
上 述 算 法 B 是 AMX CL/T 的 2 优 的 多 项 式 时 间 近 似 算 法 。
证 明 由 于 每 次 执 行 步 骤 2 增 加 割 的 大 小 ,而 割 的 大 小 不 超 过 G 的 边 数 ,故 B 在 多 项
式 时 间 内 运 行。
现 在 证 明 B 输 出 的 割 不 小 于 最 大 割 的 一 半 。实 际 上 ,要 证 明 更 强 的 结 论 : B 输 出 的 割
至 少 包 含 G 中 所 有 边 的 一 半 。 观 察 到 ,在 G 的 每 一 个 顶 点 ,割 边 不 少 于 非 割 边 ,否 则 B
要 把 该 顶 点 移 到 另 一 边 。把 所 有 顶 点 的 割 边 数 加 在 一 起 ,这 个 和 是 割 边 总 数 的 2 倍 ,因 为
每 一 条 割 边 对 它 的 两 个 端 点 各 计 算 一 次 。根 据 前 面 的 观 察 ,这 个 和 不 小 于 所 有 顶 点 非 割 边
数 之 和 。于 是 ,G 中 的 割 边 不 少 于 非 割 边 ,从 而 B 输 出 的 割 中 至 少 包 含 所 有 边 的 一 半 。 ■

10.2 概率算法
概 率 算 法 以 随 机 过 程 为 工 具 。典 型 算 法 包 含 一 条 “掷 硬 币 ” 的 指 令 ,并 且 掷 硬 币 的 结
果 可 能 影 响 算 法 后 面 的 执 行 和 输 出 。对 某 些 类 型 的 问 题 ,相 对 于 确 定 型 算 法 ,用 概 率 算 法
更容易解决。
对 于 一 个 具 体 的 计 算 任 务 ,用 掷 硬 币 做 出 决 定 怎 么 能 比 通 过 实 际 计 算 或 者 估 计 而 得 到
的 最 好 的 选 择 更 好 呢? 有 时 ,计 算 最 好 的 选 择 可 能 需 要 过 多 的 时 间 ,而 估 计 则 可 能 带 有 偏
好 ,使 得 出 的 结 论 无 效 。例 如 ,统 计 学 家 用 随 机 抽 样 确 定 有 关 一 个 大 的 群 体 中 所 有 人 的 信
息 ,如 他 们 的 爱 好 或 政 治 倾 向 。调 查 所 有 的 人 可 能 需 要 太 长 的 时 间 ,调 查 一 部 分 随 机 挑 选
第1 0 章 复 杂 性 理 论 高 级 专 题 249

出 来 的 人 则 可 能 得 出 错 误 的 结 论。

1 0 . 2. 1 BPP 类
为 了 更 为 形 式 化 地 讨 论 概 率 计 算 问 题 ,这 里 首 先 定 义 一 个 新 的 计 算 模 型 — 概 率 图 灵
机 ,然 后 介 绍 一 个 与 高 效 的 概 率 计 算 相 关 的 复 杂 性 类 并 给 出 几 个 例 子 。

I霸 腳Id鞠 概 率 图 灵 机 ( probabilistic Turing Machine ) M 是 一 种 非 确 定 型 图 灵 机 ,


它 的 每 一 非 确 定 性 步 称 作 掷 硬 币 步 ( coin- flip step ) , 并 且 有 两 个 合 法 的 下 步 动 作 。按 照 下
述 方 式 把 概 率 赋 给 M 对 输 入 w 的 每 一 个 计 算 分 支 6。定 义 分 支 6 的 概 率 为

^E
Pr[6] = 2 ~

其 中 ,6 是 在 分 支 6 中 出 现 的 掷 硬 币 步 的 步 数 ,定 义 M 接 受 加 的 概 率 为
Pr[M 接 受 w ] = PrM
b是 接 受 分 支
换 言 之 ,如 果 模 拟 M 对 w 的 计 算 ,在 每 一 掷 硬 币 步 ,用 掷 硬 币 决 定 下 一 步 的 动 作 ,
则 M 接 受 w 的 概 率 等 于 它 到 达 接 受 格 局 的 概 率 。令
Pr[ M 拒 绝 w ]= 1 — Pr[ M 接 受 ic
; ]
通 常 ,当 概 率 图 灵 机 接 受 属 于 某 一 语 言 的 所 有 字 符 串 并 且 拒 绝 不 在 这 个 语 言 中 的 所 有
字 符 串 时 ,称 概 率 图 灵 机 判 定 该 语 言。但 是 如 果 允 许 机 器 有 小 的 错 误 概 率 ,如 对 于 某 个 正

(
数 e 0<e< 去),如 果
1. 比 蕴 涵 Pr[M 接 受 — e,并 且
2. A 蕴 涵 Pr[ M 拒 绝 w ]>l — e ,
则 称 /W 以 错 误 概 率 f 判 定 语 言 A 。换 句 话 说 ,模 拟 M 得 到 错 误 答 案 的 概 率 至 多 为 e 。我 们
接 下 来 考 虑 错 误 概 率 的 边 界 。 错 误 概 率 的 边 界 依 赖 于 输 入 串 的 长 度〃。 例 如 ,错 误 概 率 =
2 一〃表 示 指 数 地 小 的 错 误 概 率 。
我们感兴趣的是在时间和空间上运行高效的概率算法。度量概率图灵机的时间和空间
复 杂 度 的 方 法 与 度 量 非 确 定 型 图 灵 机 的 一 样 ,使 用 对 每 一 个 输 入 的 最 坏 情 况 下 的 计 算
分 支。

IrJaiHik BPP 是 多 项 式 时 间 的 概 率 图 灵 机 以 错 误 概 率
+ 判 定 的 语 言 类。

我们以错误概率
f 定 义 BPP。但 是 根 据 下 述 加 强 引 理 (amplification lemma ,任 何 严 )

格地在 0 和
+ 之 间 的 常 数 错 误 概 率 都 给 岀 等 价 的 定 义 。这 个 引 理 提 供 了 一 种 简 单 的 方 法 使

错 误 概 率 指 数 地 小 。注 意 :错 误 概 率 为 的 概 率 算 法 ,由 于 运 行 它 的 计 算 机 的 硬 件 失
灵 ,给 出 错 误 结 果 的 可 能 性 远 大 于 由 于 掷 硬 币 不 走 运 给 出 错 误 结 果 的 可 能 性 。

+
^
设 e 是 一 给 定 的 常 数 ,且 0<e< 。又 设 iV 是一台错误概率为 e 的多

项 式 时 间 概 率 图 灵 机 ,则 对 于 任 意 给 定 的 多 项 式 /> U ),存 在 与 Afi 等 价 的 错 误 概 率 为



2 一〆 的 多 项 式 时 间 概 率 图 灵 机 M2 。
证 明 思 路 以2 用 如 下 方 式 模 拟 M1 : 运 行 多 项 式 次 ,并 且 取 这 些 运 行 结 果 中 的 多
数 作 为 计 算 结 果 。错 误 概 率 随 iV 的 运 行 次 数 指 数 地 下 降。
250 第三部分复杂性理论

2
f 时的情况 。这对应于一只装有许多红球和蓝球的盒子 。已知 f 的球是一种
考虑 e

颜色 ,其余 的球是另一种颜色 ,但是不知道哪一种颜色的球多。 随机地抽取若干个球


f
( 例如 ,100 个),看哪一种颜色的频率高 ,以此能够检验哪一种颜色多。几乎可以肯定 ,
盒中数量多的颜色在样本中的频率高 。

^
这些球对应 iV 的计算分支 : 红色对应接受分支 ,蓝色对应拒绝分支 。M2 借 助 运 行

^ ^
iV 对颜色取样 。计算表明 ,如果 M2 运行 iV 多项式次 ,并且输出岀现频率高的结果 ,则
M2 犯错误的概率指数地小 。

证 明 给 定 图 灵 机 M! 和多项式 p( n ), 以错误概率 ■

判定一个语言 ,要构造

下述图灵机 M2 , 它 以 错 误 概 率 判 定 同 一 语 言。
M 2 = “对输入 J0 :
1. 计算々的值 (请注意下面的分析)。
2. 对输人:r 进行 2々次独立的 iV

^
模拟运行 。
3. 如果 iV

^
接受:r 的次数多 ,则接受 ;否则拒绝 。

^
我们设法限定e M2 在输入:r 上运行错误的概率 。 阶段 2 产生一个由模拟 iV 得到的
2々个结果的序列 ,每个结果要么正确要么错误 。如果这些结果大多数都正确 ,M2 给 岀 正
确的回答 。我们限定概率为至少一半的结果都是错误的 。
假定 S 表示阶段 2 *M 2 得到的结果序列 。 令 Ps 表示 M 2 得到 S 的概率 。偁定 S 中
+ w = 2匕

有 c 个正确的结果 ,w 个错误的结果 ,我们有 c 如 果 并 且 M 2 得到 S ,那
么以2 输出不正确 。 我们把这样的序列 S 称 为 坏 的 序 列 。令 是 !在:r 上出错的概率 。
如果 S 是一个坏的序列 ,那么
e( l — e ),再有
至多是 e V l — e 户 。
PS < ( G 产(1

Ps 至多是 ew( l — e ) 。此外 ,因为


c
— L ) 。由于 h <e<l / 2 ,
C

^ e<l
所 以 G( 1 —
— e ,所以 ew( l — e ) c

^-
对所有 S 为坏序列的情况 / 求和 ,即得到 M2 输出不正确的概率 。 坏序列至多有 22 A
个 ,这是显而易见的 ,因为所有不同序列的总数为 22人因此 ,得到如下等式 :
Pr[M2 在 输 入 x 上 输 出 不 正 确 ]

^
^
= P s < 22 k (l ~ e ) k = ( 4e( l - e ))
坏 的s

|
-
由于假定 e< - ,我们有钴(1 一 )<1。因此 ,上述概率将随纟的增加指数地减少 ,

M2 的错误概率也将随 6 的增加指数地减少 。 为得到一个特定的 6 值 ,使得我们能很好地


将 M2 的错误概率限定在小于 ( 其中(>1 ),我们令《= — log2( 4e ( l — e )),并选择
t /a Q 于是 ,我们得到多项式时间内的错误概率 2 1W 。 ■

1 0 . 2. 2 素数性
素数是大于 1 并且不能被 1 和自身以外的任何正整数除尽的整数 。大于 1 的非素数叫

© 错误概率的分析来自切诺夫界限 ,这是概率论中一个公认的标准结果 。这里我们给出一个替代的 、 自包含的


计算 ,它避免了对该结果的依赖 。
第 JO 章 复 杂 性 理 论 高 级 专 题 251

作合数 。判断一个整数是素数还是合数是一个非常古老的问题 ,有很多相关的研究 。现在


已经有了解决该问题的多项式时间算法 [4]。但是 ,由于种种原因 ,可能不适合在这里讲
述过多关于该工作的实现细节 。在本节中 ,我们描述一个简单得多的检验一个数是素数还
是合数的多项式时间概率算法 。
判定一个数是否是素数 ,一种最直接的方法是检查所有小于这个数的整数 ,看是否有
能整除这个数的数 ,即因子 。由于数的大小是随它的长度呈指数增长的 ,故这个算法具有
指数时间复杂度 。我们要描述的测试素数性的概率算法的运行方式完全不同 。它不搜索因
子 。 实际上 ,还没有找到求因子的多项式时间概率算法 。
在讨论算法之前 ,首先回顾一下数论中的某些表示法 。在本小节中讨论的所有数都是
整数 。对于任一大于 1 的数户,如果两个数仅相差 /> 的整数倍 ,我们说两个数是模 p 等价
的 。如果:r 和 ;
y 是 模 等 价 的 ,则 记 作 x = ( mod p ) 令 x mod p 等于使 x = 3;
( mod p )
^ 0

p — l },Zp 表 示 { 0 ,
的最小非负数:y 。 为 方 便 起 见 ,令 表 示 集 合 { 1 ,
…, 1 },则
每 个 数 都 和 中 的 某 个 数 是 模 等 价 的 。我 们 可 以 用 该 集 合 以 外 的 数 表 示 该 集 合 中 与 之
模 f 等价的数 。比如 ,可以用一 1 表示 /> 1。 —
算法背后的主要思想源于下述费马小定理 ( Fermat ’ s little thereom ) 0

也 如 果 户 是 素 数 ,且 则 a 广1 三
l ( mod 户)。

简单几步计算
a = 2 , 则 定 理 称 因 为 7 是 素 数 ,所 以
例如 ,如果 / = 7 ,
>
— 定 等 于 1。经 过

2 ( 7-I ) = 26 = 64 , 64 mod 7 = 1
可以证实这个结论 。假如用 /> = 6 试试 ,那么 ,
2 ( 6-I ) = 25 = 32 , 32 mod 6 = 2
得到的结果不是 1。根据这个定理 ,6 不是素数 。当然 ,我们早已知道 6 不是素数 。但是 ,
这个方法不用找到它的因子 ,就能证明 6 是合数 。问题 10.16 要求给出这个定理的证明 。
可以把上述定理看作一种 “测试” 素数的方法 ,称为费马测试 ( Fermat test )。 当我
-
们说 P 通过在 a 的费马测试 ,是指 V i ^ l ( mod p ) 该定理说明 ,任意素数 /> 都能够通
Q

过 关 于 所 有 的 费 马 测 试 。观 察 发 现 6 不 能 通 过 某 些 费 马 测 试 ,因 此 6 不 是 素 数 。
能不能利用费马测试给出判定素数性的算法? 几乎可以 。 如果一个数能够通过所有关
于小于它且与它互素的数的费马测试 ,则称这个数是伪素数 ( pseudoprime )。除了相对来
说少量的卡米切尔数 ( Carmichael number ) 夕卜 ,所有的伪素数都是素数 。卡米切尔数是
合数 ,但能通过所有比它小且互素的数的费马测试 。下面首先给岀测试伪素数的多项式时
间概率算法 ,然后给出能够完全测试素数性的多项式时间概率算法 。
判定一个数是否具有伪素数性 ,要对之进行全部的费马测试 ,因此判定伪素数性的算
法需要指数时间 。多项式时间概率算法的关键是 ,如果一个数不是伪素数 ,则它至少不能
通过全部费马测试的一半 。( 我们暂时接受这个断言 。问题 10.14 要求给出它的证明 。
)算
法随机进行若干次测试 。如果有一次测试没有通过 ,则这个数一定是合数 。如果测试都通
过 ,则这个数很可能是一个伪素数 。算法含有一个用来确定错误概率的参数是。

PS£[/DOPi? JMf =“ 对输入 p:
1. 在 Zf 中随机地选取 a i , …, 。

^
(

2. 对于每一个 i ,计算 a 厂 mod /? 。


1
252 第三部分复杂性理论

3. 如 果 所 有 计 算 值 都 等 于 1 ,则 接 受 ;否 则 拒 绝 。

如 果 P 是 伪 素 数 ,则 它 能 通 过 全 部 测 试 ,从 而 算 法 一 定 会 接 受 。如 果 f 不 是 伪 素 数 ,
则 它 至 多 能 通 过 全 部 测 试 的 一 半 。在 这 种 情 况 下 ,它 通 过 每 一 个 随 机 选 择 的 测 试 的 概 率 不

1 。于 是 ,它 通 过 全 部 纟 个 随 机 选 择 的 测 试 概 率 不 大 于 2 。因 为 模 指 数 是 多 项 式 时
^
大于

间 内 可 计 算 的 (见 问 题 7.4 0 ),故 这 个 算 法 在 多 项 式 时 间 内 运 行 。
为 了 把 这 个 伪 素 数 性 算 法 转 换 成 素 数 性 算 法 ,我 们 引 入 更 为 复 杂 的 测 试 ,以 避 免 卡 米
切 尔 数 带 来 的 问 题 。 基 本 原 理 是 ,对 于 任 一 素 数 1 恰 好 有 两 个 模 f 的 平 方 根 ,即 1 和
1。对 于 许 多 合 数 ,包 括 所 有 的 卡 米 切 尔 数 在 内 ,1 有 4 个 或 更 多 的 平 方 根 。例 如 ,±1
和±8 是 1 模 2 1 的 4 个 平 方 根 。如 果 一 个 数 通 过 在 a 的 费 马 测 试 ,则 算 法 随 机 地 求 1 模 这
个 数 的 一 个 平 方 根 ,并 且 看 这 个 平 方 根 是 否 是 1 或 一 1。如 果 不 是 ,则 这 个 数 不 是 素 数 。
如 果 通 过 在 a 的 费 马 测 试 ,由 于 1 ,从 而
mod f 是 1 的 一 个 平 方
mod
根 。 如 果 这 个 值 仍 是 1 ,则 可 以 重 复 用 2 除 指 数 ,只 要 得 到 的 指 数 仍 是 整 数 ,然 后 看 第 一
个 不 为 1 的 值 是 一 1 ,还 是 某 个 其 他 的 数 。下 面 描 述 这 个 算 法 ,并 且 给 出 它 的 正 确 性 的 形
式 证 明 。取 々>1 作 为 一 个 参 数 ,它 确 定 最 大 错 误 概 率 为 2 -\
P R I M E= “对 输 入
1. 若 户 是 偶 数 ,则 如 果 户= 2 , 则 接 受 ;否 则 拒 绝 。
2. 在 Zf 中随机地选取 a 1 ,••• ,ak o
3 对 i= l ,
• ,k : 拳 籲

4. 计 算 af - i m o d p ,并 且 如 果 不 等 于 1 ,则 拒 绝 。
5. P —' = s • 21 ,其 中 是 奇 数。
6.
7.
计算序列 '
^-
2 1 , ,a
-
* 2
mod pQ
如 果 该 序 列 中 的 某 个 数 不 等 于 1 ,则 找 到 最 后 一 个 不 等 于 1 的 数 。如 果 这
个 数 不 等 于 一 1 ,则 拒 绝 。
8. 这 时 已 经 通 过 全 部 测 试 ,故 接 受 。

下 述 两 个 引 理 证 明 算 法 是 正 确 的 。当 p 是 偶 数 时 ,算 法 显 然 正 确 。因 此 我 们
只 需 考 虑 当 /> 为 奇 数 时 的 情 况 。如 果 算 法 使 用 在 步 骤 4 或 步 骤 7 拒 绝 ,则 称
是 一 个 ( 合 数 性 ) 见 证 (( compositeness) witness )。
f 是 一 个 奇 素 数 ,则 Pr[PRJM£ 接受户]= 1。
如果 ^:
证 明 首 先 要 证 明 如 果 /> 是 素 数 ,则 不 存 在 见 证 ,因 而 不 存 在 算 法 的 拒 绝 分 支 。 如 果
_
a 是 步 骤 4 中 的 见 证 ,即 1 mod
根 据 费 马 小 定 理 ,/> 是 合 数 。如 果 <2 是 步 骤 7 中
^
(

的 见 证 ,则 存 在 使 得 6 吴± l ( mod /? )和 62 三 l( mod /? )。于 是 ,bz — l = 0 ( mod p ) 0

因 子 分 解 沪 一 1,得 到
(6 - 1 K 6 + 1) = 0 ( mod p)
因 而 存 在 正 整 数 c ,使 得
— 1)( 6 + 1) = cp
(6
因 为 6关± l( mod /0 , 所 以 6 — 1 和 6 + 1 都 严 格 地 在 0 和 户 之 间 。 而 一 个 素 数 的 倍 数 不 能
表 示 成 小 于 它 的 数 的 乘 积 ,故 P 是 合 数 。 ■

下 述 引 理 显 示 算 法 以 很 高 的 概 率 识 别 合 数 。 首 先 ,我 们 引 用 数 论 中 的 一 个 重 要 的 基 本
第1 0 章 复 杂 性 理 论 高 级 专 题 253

工 具 。 如 果 两 数 没 有 除 1 以 外 的 公 因 数 ,则 说 两 数 互 素 。中国剩余定理 (Chinese remainder


thereom ) 表 明 ,如 果 p 和 g 互 素 ,则 在 和 X Zg 间 存 在 映 射。每 个 数
应 于 一 个 对 ( a ,6), 其 中 使 得 r 三 a ( mod /> ),且 r E 办( modg )。

如 果 户 是 一 个 奇 合 数 ,则 Pr[Pi? ZM£:接受户]<2 -々 。
证 明 如 下 所 示 ,如 果 /> 是 奇 合 数 ,a 是 从 Z 中 随 机 选 取 的 一 个 数 ,则 ,
Pr[a 是 一 个 见 证 ]>

这 只 需 要 证 明 在 中 见 证 至 少 和 非 见 证 一 样 多 。 为 此 ,对 每 一 个 非 见 证 我 们 设 法 找 到 一
+
个 与 它 对 应 的 独 有 的 见 证。
对 于 每 一 个 非 见 证 ,在 步 骤 6 中 计 算 的 序 列 要 么 都 是 1 ,要 么 含 有 一 个 一 1 ,这 个 一 1 的
后 面 跟 着 1。例 如 ,1 本 身 是 第 一 类 非 见 证。由 于 6 是 奇 数 ,(一 1 )s • 2 1 且( 一 1 )5.2'三1,
故 一 1 是 第 二 类 非 见 证 。 在 所 有 第 二 类 非 见 证 中 ,找 出 一 个 一 1 在 序 列 中 的 最 大 位 置 的 非
见 证。设 这 个 非 见 证 是 A , 一 1 在 它 的 序 列 中 的 位 置 为 ),这 里 序 列 位 置 从 0 算 起 。于 是 , ’

hs • 21 = — 1 ( mod / )? 0

由 于 P 是 合 数 ,所 以 或 者 P 是 一 个 素 数 的 幂 ,或 者 可 以 把 它 写 成 两 个 互 素 的 数 g 和 r
的 乘 积。我 们 首 先 考 虑 后 一 种 情 况 。 根 据 中 国 剩 余 定 理 ,在 中 存 在 一 个 数 ,使 得
t = /i ( mod q )
t 三1 ( mod r )
因此,
ts - 2
}

1 ( mod q )
t5' 2' = l ( mod r )


1
因 为 f 2’吴 ± Kmod 户) 但 是 f 三 l ( mod 户),所 以 〖 是 一 个 见 证。
现 在 我 们 得 到 了 一 个 见 证 ,还 可 以 得 到 更 多 的 见 证。根 据 下 述 两 点 观 察 ,可 以 证 明 对
于每一个非见证
± l ( mod p)且 s • 2J
A mod /> 是 与 它 对 应 的 独 有 的 见 证。首 先 ,根 据 选 择 j 的 方 式 ,々
= l ( mod p) Q 因 此 ,心 mod p 是 一 个 见 证 ,因 为(A ) s • 2 吴 ±1 而 且
; - 2} z
=

J
( dt ) s • 2 l ( mod /0
三 0

其 次 ,如 果 di 和 山 是 两 个 不 同 的 非 见 证 ,则 山 纟 mod p
d t mod p。 这 是 因 为
} 1
p=\ , iAM t • ts • 2 J
一1 p= l
^
所 以 ,如 果 ⑹ mod p=
2

mod ,贝lj
t5 • 2 mod mod 0 tdz 户

mod p = t • ts' 2^ di mod p = dz


J
d\ = t • ts•2 d\
所 以 ,见 证 不 会 比 非 见 证 少。这 样 ,我 们 证 明 了 /> 不 是 一 个 素 数 幂 时 的 情 况 。
对 于 户 是 一 个 素 数 幂 时 的 情 况 ,我 们 有 /> = 矿 ,其 中 g 是 一 个 素 数 ,e>l 。令 = 1 +
1
矿一 。使 用 二 项 式 定 理 扩 展 多 项 式 P 可 以 得 到
a
= + qe l )p = 1 + P • q6-1 + 矿—1 更 高 次 幂 的 倍 数
~

这 和 1 mod 是 等 价 的 。因 此 ,〖 是 一 个 阶 段 4 见 证 。这 是 因 为 :如 果 夕- 1 三 l ( mod 夕),


^
是 一 个 非 见 证 ,则
_
则 # 三〖吴 l( m o d f )。像 前 一 个 例 子 一 样 ,可 以 用 这 个 见 证 去 获 取 其 他 很 多 见 证 。 如 果 d
,于 是 ,A mod /? 是 一 个 见 证。更 进 一 步 ,如 果 和

^
1 E l ( mod p )

^
di 是 两 个 不 同 的 非 见 证 ,则 mod p dit mod 否 则,
d\ = d\ • t • tp mod p = dz • t • tp l mod p = dz
l ~ ~
254 第三部分复杂性理论

因 此 ,见 证 的 数 目 一 定 和 非 见 证 的 数 目 一 样 多 ,证 毕 。
上 述 算 法 及 对 它 的 分 析 给 岀 下 述 定 理 。令
PRIMES = { n \ n 是 二 进 制 的 素 数 }
iglMfilsl RRJMESeBPP 0

注 意 ,这 个 素 数 性 概 率 算 法 具 有 单 侧 错 误 ( one- sided error )。 当 算 法 输 出 拒 绝 时 , 输


入 一 定 是 合 数 ,当 输 出 接 受 时 ,我 们 只 知 道 输 入 可 能 是 素 数 或 合 数 。因 此 ,只 有 当 输 入 是
合 数 时 ,才 可 能 岀 现 错 误 的 回 答 。单 侧 错 误 是 许 多 概 率 算 法 的 共 同 特 点 ,因 而 我 们 为 它 指
定 一 个 专 门 的 复 杂 性 类 RP。
RP 是 多 项 式 时 间 概 率 图 灵 机 识 别 的 语 言 类 ,在 这 里 ,在 语 言 中 的 输 入

以不小于
+ 的 概 率 被 接 受 ,不 在 语 言 中 的 输 入 以 概 率 1 被 拒 绝 。

用 类 似 于 引 理 1 0.5 中 使 用 的 概 率 加 强 技 术 (实 际 上 这 里 更 简 单 些 ),可 以 使 错 误 概 率
指 数 地 小 ,并 且 保 持 多 项 式 运 行 时 间 。前 面 的 算 法 表 明 COMPOSITES

^
RP。

1 0 . 2. 3 只读一次的分支程序
分 支 程 序 是 复 杂 性 理 论 和 某 些 实 际 领 域 (诸 如 计 算 机 辅 助 设 计 ) 中 使 用 的 一 种 计 算 模
型 。这 个 模 型 表 示 一 种 判 定 过 程 ,它 询 问 输 入 变 量 的 值 ,并 且 根 据 对 询 问 的 回 答 决 定 如 何
行 进 。 我 们 把 这 样 的 判 定 过 程 表 示 成 一 个 图 ,它 的 顶 点 对 应 于 判 定 过 程 中 在 该 点 询 问 的
变 量。
本 小 节 考 察 检 验 两 个 分 支 程 序 是 否 等 价 的 复 杂 性 。一 般 来 说 ,这 个 问 题 是 coNP 完 全
的 。 如 果 对 分 支 程 序 类 作 某 种 自 然 的 限 制 ,则 能 够 给 岀 检 验 等 价 性 的 多 项 式 时 间 概 率 算
法 。基 于 下 述 两 个 原 因 ,我 们 对 这 个 算 法 特 别 感 兴 趣 。 首 先 ,不 知 道 这 个 问 题 的 多 项 式 时
间 算 法 ,因 而 这 是 明 显 扩 大 了 能 够 有 效 检 验 成 员 资 格 的 语 言 类 的 一 个 概 率 例 子 。 其 次 ,为
了 分 析 布 尔 函 数 的 性 状 ,算 法 引 人 一 种 技 术 ,把 非 布 尔 值 赋 给 正 常 的 布 尔 变 量 。 在 1 0.4
节 将 会 看 到 ,这 种 技 术 在 交 互 式 证 明 系 统 中 起 很 大 作 用。
分 支 程 序 ( branching program ) 是 一 个 有 向 无 环 图 。其 中 ,除 两 个 输
出 顶 点 (output node ) 被 标 记 为 0 或 1 外 ,它 的 所 有 顶 点 都 被 标 记 为 变 量 。被 标 记 为 变 量
的 顶 点 叫 作 查 询 顶 点 ( query node ) 每 一 个 查 询 顶 点 引 出 两 条 边 ,一 条 标 记 0 ,另 一 条 标
0

记 1。两 个 输 出 顶 点 没 有 引 出 的 边 。 在 分 支 程 序 中 指 定 一 个 顶 点 为 起 始 顶 点 。
分 支 程 序 能 够 确 定 如 下 的 布 尔 函 数 。 对 查 询 顶 点 标 记 的 所 有 变 量 ,任 取 一 个 赋 值 ,从
起 始 顶 点 开 始 ,沿 途 在 每 一 个 查 询 顶 点 按 照 赋 给 该 顶 点 标 记 的 变 量 的 值 选 择 一 条 引 出 的
边 ,直 至 到 达 一 个 输 岀 顶 点 为 止 。分 支 程 序 的 输 出 就 是 该 输 出 顶 点 的 标 记 。 图 1 0 1 给 出 了 -
两 个 分 支 程 序 的 例 子。
分 支 程 序 与 L 类 的 关 系 类 似 于 布 尔 电 路 与 P 类 的 关 系 。问 题 1 0.1 3 要 求 证 明 多 项 式 个
顶 点 的 分 支 程 序 能 够 检 验 { 0 ,1 } 上 任 何 属 于 L 的 语 言 的 成 员 资 格 。
如 果 两 个 分 支 程 序 确 定 的 函 数 相 同 ,则 称 它 们 是 等 价 的 。问 题 1 0.9 要 求 证 明 检 验 两
个 分 支 程 序 等 价 的 问 题 是 coNP 完 全 的 。这 里 考 虑 分 支 程 序 的 一 种 受 限 制 的 形 式 ,只 读 一

有向图如果没有有向环 ,则是一个无环图 。
第1 0 章 复 杂 性 理 论 高 级 专 题 255

0.

⑻ (b)

图 10 1- 两个只读一次的分支程序

次 的 分 支 程 序 ( read- once branching program ) 是这样一种分支程序 ,在 它 的 从 起 始 顶 点


到输出顶点的每一条有向路径上 ,每一个变量至多能被查询一次 。图 10 1 中 的 两 个 分 支 -
程序都是只读一次的 。令
EQRQBP = { < BI ,B2 > I 氏 和 132 是两个等价的只读一次的分支程序 }
EQROBP 在 BPP 中 。
…,
证明思路先试着对氏和氏中岀现的所有变量 A , :rm 赋 给 随 机 的 值 ,并 且 计 算
这两个分支程序关于这个赋值的输岀结果 。如 果 艮 和 关 于 这 个 赋 值 的 输 出 结 果 相 同 ,
则接受 ;否则拒绝 。但是 ,这个策略是行不通的 。因为两个不等价的只读一次的分支程序
可能只对变量的 M 个 可 能 赋 值 中 的 一 个 赋 值 不 一 致 ,选 取 到 这 个 赋 值 的 概 率 指 数 地 小 ,
从 而 当 氏 和 氏 不 等 价 时 ,也可能以大概率接受 ,这是不能令人满意的 。
修改这个策略 ,改成对变量随机地选取一个非布尔赋值 ,并且以适当规定的方式计算
氏 和 B2 的值 。能 够 证 明 当 氏 和 不 等 价 时 ,这两个随机计算出来的值多半不相等 。
证 明 把:n ,
…,:rm 的多项式赋给只读一次的分支程序 B 的 顶 点 和 边 ,步骤如下 :把
常数函数 1 赋 给 起 始 顶 点 ,如果标记:r 的 顶 点 已 经 被 赋 给 多 项 式 P ,则 把 多 项 式 赋 给
从这个顶点引出的标记 1 的 边 ,把 多 项 式 (1 一: 赋 给 从 这 个 顶 点 引 出 的 标 记 0 的 边。
如果进入某个顶点的所有边都已被赋给多项式 ,则把这些多项式的和赋给这个顶点 。把赋
给标记 1 的输岀顶点的多项式赋给这个分支程序本身 。下 面 给 出 EQROBP 的 多 项 式 时 间 概
率算法 。设7 是一个至少含有 3 m 个元素的有限域 。
D =“ 对 输 人 和 氏 是 两 个 只 读 一 次 的 分 支 程 序 ;
1. 在 J7中 随 机 地 选 取 m 个元素 <21 ,
…,am 。
2. 计 算 赋 给 历 和 执 的 多 项 式 外 和 外 在 以 , …,am 的 值 。
3. 如 果 /> i ( ai ,
…,am )= /?2 ( ai , ),则 接 受 ,否 则 拒 绝 。


由于计算分支程序的多项式的值不必真的构造出这个多项式 ,这 个 算 法 可 以 在 多 项 式

时间内运行。下 面 证 明 它 以 不 超 过
f 的错误概率判定 £QROBP 。
先考察分支程序 B 与赋给它的多项式 P 之间的关系 。注 意 ,对 于 B 的 变 量 的 任 何 布
尔赋值 ,赋给顶点的所有多项式的值都为 0 或 1。所有值为 1 的多项式都在对应这个赋值
的计算路径上 。因 此 ,当变量取布尔值时 ,B 和 的 值 相 同 。类 似 地 ,由 于 B 是只读一次
的 ,可 以 把 /> 写 成 积 项 參

:y 的 和 ,这 里 每 一 个 乂 是 心 ,
•• (1 一 心 ) 或 1,而 且 每 一 个
256 第三部分复杂性理论

积 项 对 应 于 B 中 一 条 以 起 始 顶 点 到 标 记 1 的输出顶点的路径 。当 一 条 路 径 不 含 变 量:r , 时 ,
:y / = 1。
取 P 的每一个这种含有 % = 1 的 积 项 ,把 它 分 裂 成 两 个 积 项 的 和 ,其中一项的 % =
A ,另 一 项 的 y{ = l ~ OCi o 由 于 l = xz +
( l — X,),这 样 得 到 一 个 等 价 的 多 项 式 。 继 续 分 裂

积 项 ,直到每一个 M 为 A 或者 (1 - ) 为止 。最 后 得 到 一 个 等 价 的 多 项 式 g ,对于使 B

^
等于 1 的每一个赋值 ,g 含有一个积项 。 下面着手分析算法 D 的 性 状 。
首先证明 ,如 果 历 和 氏 等 价 ,则 D 总 是 接 受 。如 果 两 个 分 支 程 序 等 价 ,则 它 们 恰
好在同样的赋值取值为 1。因 而 ,多项式 % 和 g 2 包含的积项完全一样 ,两 者 相 等 。 所 以 ,
內和外在每一个赋值都相等 。
2
其 次 证 明 ,如 果 氏 和 氏 不 等 价 ,则 D 拒 绝 的 概 率 不 小 于
f ,这 个 结 论 可 由 引 理
10.14 立即得到 。 糴

前面的证明依赖下述引理。它涉及随机地找到多项式的一个根的概率 ,这个概率与多
项式的变量数 、 变量的次数以及基础域的大小有关 。
对 于 每 一 个 <i>o ,单 变 量 :
i 的 d 次多项式 > 或者最多有 j 个 根 ,或 者

处 处 等 于 0。
证 明 对 d 作归纳 。
归 纳 基 础 : 对 d = 0 的 证 明 。0 次 多 项 式 是 一 个 常 数 ,如果这个常数不是 0 , 则多项式
显然没有根。
归纳步骤 :假设引理对 d — 1 成 立 ,要 证 明 对 d 成 立 。 如 果 是 不 恒 为 0 的 d 次多项
式 ,它有一个根 a ,则 整 除 于 是 ,p! ( sc ~ a ) 是 不 恒 为 0 的 c/ 一 1 次 多 项 式 。 根

^
据归纳假设 ,它 最 多 有 一 1 个根。 麵

HEMil 设 只 是 / 个 元 素 的 有 限 域 ,户 是 ,
…, 的不恒为 o 的 多 项 式 ,每 一
… , 随机地选自夕,则
个 变 量 的 次 数 不 超 过 d 。 如果幻 ,

证 明 对 m 作归纳 。
‘ ^ P r b U h •• )= 0]<
md
o

归 纳 基 础 : 对 m = l 的 证 明 。根 据 引 理 10.13 , 最 多 有 d 个 根 ,因 而 以 是 一 个 根 的
概率不超过 d / f 0

归纳步骤 :假设引理对 m — 1 成立 ,要 证 明 对 m 成立 。设 A 是力的一个变量 。 对于


每一个 i<d ,令 九 是 由 中 含 4 的项组成的多项式 ,但这里 M 已被提出来 。于是
P = po + :
J \ PI + I />2 H hxf pd
^
a w )= 0 , 则可能有两种情况 。 或者所有 A 的值等于 0 或者某个 A 的值不等

-
如果 6( ,…,

^
于 0 , 且 化 是 把 心 ••• CLm 代 入 Po , ,Pd 后 得 到 的 一 元 多 项 式 的 根 。
^
对于第一种情况 ,由 于 不 恒 为 0 , 一定有一个九不恒为 0 。 于是 ,所 有 A 的值等
于 0 的概率不大于九的值等于 0 的 概 率 。 根 据 归 纳 假 设 ,因 为 九 最 多 有 m — 1 个 变 量 ,
故这个概率不大于 ( m — l )d / /。
对于第二种情况 ,如果某个 A 的值不为 0 , 则 把 a 2 , … , 代 入 后 ,p 化 简 成 单 变 量
d
的多项式 ,它不恒为 0 。 归纳假设已经证明 是这个多项式的根的概率不大于

^
工1

… , 是 多 项 式 p 的 根 的 概 率 不 大 于 (m — l )<i//+ <i//= 7?2 <i//。


因 此 ,ai ,
第 JO 章 复 杂 性 理 论 高 级 专 题 257

最 后 ,在 算 法 中 使 用 随 机 性 时 ,有 一 点 是 非 常 重 要 的。我 们 对 概 率 算 法 的 分 析 是 基 于
在 计 算 时 有 可 供 使 用 的 真 随 机 源 的 假 设 的 。 但 是 ,真 随 机 源 可 能 是 很 难 ( 或 不 可 能) 获 得
的 ,因 而 通 常 用 伪 随 机 发 生 器 ( psudorandom generator ) 模 拟 它 。 伪 随 机 发 生 器 是 一 种 确
定 型 算 法 ,它 们 的 输 出 好 像 是 随 机 的 。虽 然 任 何 确 定 型 过 程 的 输 出 绝 不 可 能 是 真 随 机 的 ,
但 是 某 些 确 定 型 过 程 的 产 生 结 果 具 有 随 机 产 生 结 果 的 某 些 特 征 。随 机 性 的 算 法 使 用 这 些 伪
随 机 发 生 器 时 ,能 够 同 样 好 地 工 作 ,但 是 证 明 一 般 是 非 常 困 难 的 。实 际 上 ,概 率 算 法 使 用
某 些 伪 随 机 发 生 器 时 ,有 时 不 能 很 好 地 工 作 。已 经 设 计 出 非 常 复 杂 的 伪 随 机 发 生 器 ,在 存
在 单 向 函 数 的 假 设 下 ,不 可 能 在 多 项 式 时 间 内 检 验 出 它 们 产 生 的 结 果 与 真 随 机 结 果 的 区
别 。(见 1 0.6 节 关 于 单 向 函 数 的 讨 论 。

10.3 交错式
交 错 式 是 非 确 定 性 的 推 广 ,在 解 释 复 杂 性 类 之 间 的 关 系 和 对 具 体 问 题 按 照 复 杂 性 进 行
分 类 时 ,交 错 式 已 被 证 明 非 常 有 用。利 用 交 错 式 ,我 们 能 够 简 化 复 杂 性 理 论 中 的 各 种 证 明
和 展 示 时 间 与 空 间 复 杂 性 度 量 之 间 惊 人 的 联 系。
与 非 确 定 型 算 法 一 样 ,交 错 式 算 法 可 以 含 有 把 一 个 过 程 分 支 成 多 个 子 过 程 的 指 令。两
者 的 区 别 在 于 决 定 接 受 的 方 式 。如 果 有 一 个 初 始 的 过 程 接 受 ,非 确 定 型 计 算 就 接 受 。而 当
一 个 交 错 式 计 算 分 成 多 个 过 程 时 ,有 两 种 可 能 :一 种 可 能 是 ,算 法 规 定 如 果 有 一 个 子 过 程
接 受 ,则 当 前 过 程 接 受 ;另 一 种 可 能 是 ,规 定 如 果 所 有 的 子 过 程 接 受 ,则 当 前 过 程 接 受 。
用 树 表 示 产 生 子 过 程 的 分 支 结 构 ,可 以 形 象 地 表 现 交 错 式 计 算 和 非 确 定 型 计 算 之 间 的
区 别 。 每 一 个 顶 点 表 示 过 程 中 的 一 个 格 局 。在 非 确 定 型 计 算 中 ,每 一 个 顶 点 做 它 的 儿 子 的
()R 运 算 。 这 对 应 于 通 常 的 非 确 定 型 接 受 方 式 :只 要 有 一 个 儿 子 接 受 ,该 过 程 就 接 受 。 在
交 错 式 计 算 中 ,按 照 算 法 的 决 定 ,顶 点 可 以 做 AND 运 算 或 OR 运 算 ,这 对 应 于 交 错 式 计
算 的 接 受 方 式 :如 果 所 有 的 儿 子 都 接 受 ,则 该 过 程 接 受 ,或 者 如 果 有 一 个 儿 子 接 受 ,则 该
过 程 接 受 。我 们 如 下 定 义 交 错 式 图 灵 机 。
feai囑bHO 交 错 式 图 灵 机 ( alternating Turing machine ) 是 一 种 具 有 特 殊 功 能 的 非 确
定 型 图 灵 机 。 除 gaccept 和 夕 卜, 它 的 状 态 分 成 全 称 状 态 ( universal state ) 和 存 在 状 态
( existential state )。 当 对 输 入 串 运 行 交 错 式 图 灵 机 时 ,根 据 对 应 的 格 局 是 包 含 全 称 状 态 还

是 包 含 存 在 状 态 ,用 A 或 V 标 记 它 的 非 确 定 型 计 算 树 的 每 一 个 顶 点 。如 果 一 个 顶 点 标 记 八
且 它 的 儿 子 都 接 受 ,或 者 标 记 V 且 它 的 儿 子 中 有 一 个 接 受 ,则 指 定 这 个 顶 点 接 受 。如 果 起
始 顶 点 被 指 定 为 接 受 ,则 接 受 输 入 。

-
图 10 2 给出非确定型计算树和交错式计算树。交错式计算树的顶点标有 A 或 V ,分
别 表 示 计 算 儿 子 的 AND 或 OR 。

1 0 . 3. 1 交错式时间与交错式空间
交 错 式 图 灵 机 的 时 间 复 杂 性 和 空 间 复 杂 性 的 定 义 与 非 确 定 型 图 灵 机 的 一 样 ,是 每 个 计
算 分 支 所 用 的 时 间 和 空 间 的 最 大 值 。交 错 式 时 间 复 杂 性 类 和 空 间 复 杂 性 类 定 义 如 下 :

a
ATIME( f ( r? ))= |L 是 被 一 台 OUU )) 时 间 的 交 错 式 图 灵 机 判 定 的 语 言 }
a
ASPACE( f( n ))= |L 是 被 一 台 0( /( n )) 空 间 的 交 错 式 图 灵 机 判 定 的 语 言 }
258 第三部分复杂性理论

接受 拒绝一 接受

非确定型 交错式

-
图 10 2 非确定型计算树与交错式计算树

定义 AP 、 APSPACE 和 AL 分别是多项式时间 、 多项式空间和对数空间的交错式图灵


机判定的语言类 。

tiHEKH 永真式 (tautology ) 是一个布尔公式 ,对于变量的每一个赋值 ,它的值


都等于 1。令 TAUT = {〈 p|0 是一个永真式 }。下述交错式算法表明 TAUT 在 AP 中 。
“对输入 ( </> ):
1. 全称地选取对彡的变量的所有赋值 。
2. 对一个具体的赋值 ,计算 # 的值 。
3. 如果 # 的值为 1 ,则接受 ;否则拒绝 。

算法的步骤 1 用全称分支非确定性地选取对彡的变量的每一个赋值 。 这样 ,为了使整
个计算接受 ,要求所有的分支都接受 。 步骤 2 和 3 确定性地检查在一个具体的计算分支中
选取的赋值是否满足这个公式 。因此 ,这个算法如果确认所有的赋值都是满足的 ,则接受
它的输入 。
注意到 TAUT 是 coNP 的一个成员 。 事实上 ,用类似刚才的算法 ,可以很容易地证明
coNP 中的任何问题都在 AP 中 。 ■

(ilEBEI 这个例子描绘了 AP 中的语言的特点 ,但不知道它是在 NP 中还是在 coNP


中。回想一下问题 7.21 中定义的 MJiV- FORMULA 语言。下述算法表明 MJiV FOi?MULA 在
-
AP 中 。
“对输入
1. 全称地选取所有比彡短的公式 0。
2. 存在地选取对 的变量的一个赋值 。

^
3. 计算 0 和 0 关于这个赋值的值。
4. 如果这两个公式的值不同 ,则接受 ;如果这两个公式的值相同 ,则拒绝 。

算法开始时 ,在步骤 1 用全称分支选取所有更短的公式 ,然后 ,在步骤 2 转到存在分
支选取一个赋值。 交错式一词源于在全称分支与存在分支之间交错或转换的能力 。 ■

交错式使我们能够给岀复杂性的时间度量与空间度量之间显著的联系 。粗略地说 ,下
述定理说明 ,对于多项式相关的界限 ,交错式时间与确定型空间等价 ;当时间界限指数地
多于空间界限时 ,交错式空间与确定型时间等价 。
gUMBKEI 对 于 ,有
第1 0 章 复 杂 性 理 论 高 级 专 题 259

ATIME( /( rz )) SPACE( /( n )) ATIMEC /2( n ))


对于 /( r2 )>logn ,有

^ ^ ,
ASPACE( /( n )) = TIME( 20( (”)))
因此 ,AL = P , AP = PSPACE 以及 APSPACE = EXPTIME。下面把这个定理的证明
分成 4 个引理 。
feifci■醒 蜃 对 于 /U )>r2 ,有 ATIME( /( rO )GSPACE( /( n ))。
证明把 0( /( n )) 时间的交错式图灵机 M 转换成 0( /( n )) 空间的确定型图灵机 S,
S 如下模拟 M: 对于输入 w ,S 对 M 的计算树做深度优先搜索 ,确定哪些顶点接受 。如果
树根 ( 对应起始格局) 接受 ,则 S 接受 。
机器 S 需要空间来存储在深度优先搜索中使用的递归栈 。 递归的每一层存储一个格
局 。递归的深度是 M 的时间复杂度 。每一个格局使用 0( /U )) 空间 ,M 的时间复杂度为
o( /u ))。因此 ,S 使用 o( /2 u )) 空间 。
注意到 S 在递归的每一层不需要存储整个格局 ,因而可以改进它的空间复杂度 。代替
存储整个格局的是 ,只记录 M 从上一格局到这个格局时所做的非确定型选择 。 然后 ,通
过多次执行从头开始的计算 ,并按照记录的 “路标” 进行 ,S 可以找到这个格局。这样把
在递归的每一层空间的使用减少到常数 。于是 ,整个使用的空间为 0( /( n ))。 ■

对 于 /( )> [ATIME( /2 ㈤ )。
有 SPACE( /㈤

证 明 从 一 台 0( /(〃)) 空间的确定型图灵机 M 出发 ,构造一台交错式图灵机 S,用
0( / 2( )) 时间模拟它 。 方法类似于在萨维奇定理 (定理 8.5 ) 的证明中使用的方法 ,在

^
那里构造了一个关于可产生性问题的一般过程 。
在可产生性问题中 ,任给 M 的两个格局 Cl 、Q 和一个数〖 ,要检验 M 是否能在《 步内
从 得到 。关于这个问题的交错式过程 ,首先存在地分支去猜想 n 和 c2 之间的格局

^
C2

cmo 然后全称地分支成两个过程 ,一个递归地检验在 V 2 步 内 是 否 能 得 到 cm ,另一个


递归地检验在 〖/2 步内是否能得到 c 2 。
机器 S 用 这 个 交 错 式 递 归 过 程 检 验 起 始 格 局 在 步 内 是 否 能 到 达 一 个 接 受 格 局。
使得 M 在它的空间界限内的格局数不超过 〃

^
这里 ,选取 2 %。
该交错式过程的每一个分支使用的最大时间等于在递归的每一步写一个格局的时间
0( /( 72 ))乘以递归的深度 1呢〃
2 (”> = 0( /( 0 )。因此 ,算法在交错式时间 0( 尸 U )) 内
运行 。
^
对 于 /( n )>logw ,有 ASPACE( /( r2 ))GTIME( 20
( /(

” )。

证 明 构 造 一 台 时 间 的 确 定 型 图 灵 机 S,模拟 0( /(〃)) 空间的交错式图灵机


M 0 S 构 造 的 计 算 图 如 下 。顶 点 集 是 M 关于 w 的所有格局 ,每一顶
对于输人 w ,
点最多使用 d( / U )) 空间 ,这里 ,d 是某个适合于 M 的常数因子 。从每一个格局到 M 移
动一步所得到的格局连一条边 。构造图之后 ,S 反复扫描这个图 ,给某些顶点作接受的记
号。一开始 ,仅给 M 真正的接受格局作记号 。如果一个执行全称分支的格局的所有儿子
都有记号 ,则给它作记号 ;如果一个执行存在分支的格局有一个儿子有记号 ,则给它作记
号 。机器 S 连续扫描和作记号 ,直到在一次扫描中没有给顶点作记号为止 。 最后 ,如果 M
关于 w 的起始格局作了记号 ,则 S 接受 。
由于 /U )>log M 关于 w 的格局数为 2以/(
… 。因 此 计 算 图 的 大 小 为 可
260 第三部分复杂性理论

在 〃 时 间 内 构 造 它 。扫 描 一 次 差 不 多 也 用 同 样 的 时 间 。因 为 除 最 后 一 次 外 , 每 扫
描一次至少给一个顶点作记号 ,故扫描的总次数不超过顶点数 。 因 此 ,使用的总时间为

对于 / U ) > log n ,有 ASPACE ( / ( n ) ) 3TIME ( 20( ,)。


⑷)

证 明 要 说 明 交 错 式 图 灵 机 s 如何用 0( /(〃)) 空 间 模 拟 时 间 的 确 定 型 图 灵 机
M 这 个 模 拟 是 有 点 难 办 的 ,因 为 S 可使用的空间比
0

M 的 计 算 长 度 要 小 很 多 。 这 里 ,S 只 有 足 够 的 空 间 存
储进人
… 在 加 上 运 行 的 画 面 的 指 针 ,如 图 10 3 所示 。
采用定理 9.25 证 明 中 给 出 的 格 局 表 示 法 ,一 个 符
号可以既表示机器的状态 ,又表示读写头下的带单元的
-

-
内 容 。在图 10 3 中 ,单元 d 的内容取决于它的父辈 a 、 2^ /
( (« ))

6 和 c 的内容 (左、 右边界上的单元只有两个父辈)。


S 递 归 地 进 行 ,猜 想 并 验 证 画 面 中 各 个 单 元 的 内
不在第一行 ,为了验证单元 d 的内容 ,

^
容 。如果单元
S 存在地猜想它的父辈的内容 。 按 照 M 的 转 移 函 数 ,

^
验 证 这 些 内 容 是 否 能 产 生 的 内 容 。 然 后 ,S 全 称 地
图 10 - 3 表示 M 在 w 上 运 行 的 画 面

^
分支去递归地验证这些猜想的内容 。如果 在第一行,
因为知道 M 的 起 始 格 局 ,S 直接地验证 d 的 内 容 。可 以 假 设 M 在接受时把它的读写头移
到带的左端 ,因 此 ,S 通过验证画面左下方单元的内容 ,能 够 确 定 M 是 否 接 受 加。从 而 ,
S 只需要存储一个指向画面中一个单元的指针 ,故使用的空间为 log2G( /(
… = 0( /(〃))。 ■

1 0 . 3. 2 多项式时间层次
交错式图灵机提供了一种手段 ,在 PSPACE 类中定义一个类的自然层次 。
设 z 是 一 个 自 然 数 ,及 交 错 式 图 灵 机 是 以 存 在 步 骤 开 始 ,在每一个输入
和每一个计算分支上最多含有纟次全称步骤与存在步骤轮换的交错式图灵机 。 交错式图
灵 机 与 此 类 似 ,只是它以全称步骤开始 。
令 Z ,TIME( f ( n ) ) 为 Z 交 错 式 图 灵 机 在 0( /( « )) 时 间 内 可 判 定 的 语 言 类 。类 似 地 ,
对于 /L 交 错 式 图 灵 机 定 义 f7 ,T I M E ( f ( n ) ) 类 。 对 于 空 间 界 限 的 交 错 式 图 灵 机 定 义
J / SPACE( f ( n ) ) 类 和 /7,SPACE( f ( n ) )。下述语言类集合称作多项式时间层次 ( polyno-

mial time hierarchy ):


S i P = {J S i T l M E U k )
ntp = uk n t T i M E ( ^ )

我们定义类 PH = U兄 P = Ui
! :P。显 然 ,NP =2iP , 而 且 coNP /LP。此 外 ,M I N- F O R -

MULA 6 iI2 P。
i i
^
10.4 交互式证明系统
交互式证明系统提供了一种定义类似 NP 的概率语言类的手段 ,这 很 像 多 项 式 时 间 概
率算法给岀类似 P 的概率语言类 。交互式证明系统的开发对复杂性理论产生了深刻的影
第1 0 章 复 杂 性 理 论 高 级 专 题 261

响 ,给密码学和近似算法这两个领域带来了重大进展 。为了体会一下这个新概念 ,我们重


新对 NP 作点直观的分析 。
NP 中的语言是这样的一些语言 :它们的成员都有容易验证的短的资格证书。如果需
要的话 ,请回到 7.3 节 ,重温一下对 NP 的系统阐述 。 现在重新简洁地描写这个系统阐
述 ,这次增添两个新东西 :一个证明者和一个检验者 ,前者寻找成员资格的证明 ,后者验
证证明 。设想证明者好像正在设法使检验者相信 u;是 A 的成员 。要求检验者是一台多项
式时间界限的图灵机 ,否则 ,它自己就能够给出答案 。对证明者不加任何计算界限 ,因为
寻找证明是相当耗时的 。
以 SAT 问题为例。证明者可以提供一个满足的赋值 ,使多项式时间的检验者相信公
式多是不可满足的 。证明者能够类似地使计算有限制的检验者相信一个公式是不可满足的
吗? 由于不知道 SAT 在 NP 中的补 ,因此不能依赖上述证明思想 。 然而 ,假如给证明者
和检验者添加两个额外的特性 ,令人惊奇地发现答案是肯定的 。首先 ,允许它们进行双向
对话 。其次 ,检验者可以是一台多项式时间的概率图灵机 ,它以很大的把握 ( 但不是绝对
的把握) 做岀正确的回答 。这样一对证明者和检验者构成一个交互式证明系统 。

1 0. 4 . 1 图的非同构
我们用一个漂亮的例子 图同构问题来阐明交互式证明概念 。如果能够重新安排 G
的顶点的顺序 ,使得它与 H
ISO

样 ,
< ,H
={ G
则称图 G 与 H 同构 (isomorphic )。令
>|G 和 H 是 两 个 同 构 的 图 }
虽然 JSO 显然在 NP 中 ,但是至今没有找到这个问题的多项式时间算法 ,也没有证明它是
NP 完全的 。它是 NP 中尚未确定位置的 、 为数不多的自然问题中的一个 。
这次考虑 JSO 的补 ,即语言
NON ISO = < < G ,H > | G 和 H 是 两 个 不 同 构 的 图 }
由于不知道如何提供两个图不同构的短的证书 ,故不知道 iVONISO 在 NP 中 。 然而 ,当
两个图不同构时 ,正如将要证明的那样 ,证明者能够使检验者相信这个事实 。
假设有两个图仏和 02 。如果它们同构 ,证明者提供它们的同构映射 ,即顶点的重新
排列 ,能够使检验者相信这个事实 。但是 ,如果它们不同构 ,证明者怎么使检验者相信
呢?不要忘记 : 检验者不一定相信证明者 ,因此对于证明者来说 ,仅仅说它们不同构是不
够的 。证明者必须使检验者信服才行。考虑下述简短的协议。
检验者随机地选择 G! 或仏 ,随机地重新排列它的顶点 ,得到图 H。 检验者把 H 送
给证明者 ,证明者必须回答 H 是由 Gi 还是由 G2 得到的 。这就是整个协议 。
如果 Gi 和 02 确实不同构 ,证明者总能够执行协议 ,因为它能够区分 H 是来自 Gi 还
是来自 G2 。但是 ,如果两个图同构 ,则 H 可能来自 Gi ,也可能来自 G2 。因而即使不限
制计算能力 ,证明者给出正确回答的机会也不会好于一半对一半 。于是 ,如果证明者能够
始终如一地正确回答 (例如 ,重复 100 次协议 ),则检验者获得两个图确实不同构的令人
信服的证据 。

1 0 . 4 .2 模型的定义
为了形式地定义交互式证明系统模型 ,描述检验者 、证明者以及它们的相互作用。我
们会发现 ,记住图的非同构这个例子是有用的 。定 义 检 验 者 ( Verifier ) 是 一 个 函 数 V,
262 第三部分复杂性理论

它 根 据 至 今 传 递 的 信 息 历 史 ,计 算 下 一 次 传 送 给 证 明 者 的 信 息 。函 数 V 有 3 个 输 入 :
1. 输 入 串 。我 们 的 目 标 是 确 定 这 个 字 符 串 是 否 是 某 个 语 言 的 成 员 。在 iVOiVJSO 例 子
中 ,输 入 串 是 两 个 图 的 编 码 。
2. 随 机 输 入 。为 了 便 于 给 岀 定 义 ,给 检 验 者 提 供 一 个 随 机 选 取 的 输 入 串 ,用 来 代 替
在 计 算 中 做 概 率 动 作 的 能 力 。两 者 是 等 价 的 。
3. 部 分 信 息 历 史 。 函 数 不 能 存 储 已 进 行 过 的 对 话 。 因 此 ,通 过 用 一 个 字 符 串 表 示 到
现 在 为 止 交 换 的 信 息 来 提 供 额 外 的 存 储 能 力 。用 记 号 # m2 # … 表 示 交 换 信 息

-
检 验 者 的 输 出 或 者 是 序 列 中 的 下 一 个 信 息 m:+ 1 ,或 者 是 指 明 交 互 作 用 的 结 果 : 接 受
或 拒 绝 。于 是 V 的 函 数 形 式 为 X2 * X2* 2* U < 接受,拒 绝 }。
V( w ,r ,7?2 i # … 表 示 输 人 串 为 随 机 输 入 为 r,当 前 的 信 息 历 史 为 M
到 ,以 及 检 验 者 给 证 明 者 的 下 一 个 信 息 为
I 。
证 明 者 ( Prover ) 的 计 算 能 力 是 无 限 的 。定 义 它 为 一 个 函 数 P ,有 两 个 输 入 :
1. 输 入 串 。
2. 部 分 信 息 历 史 。
证 明 者 的 输 出 是 给 检 验 者 的 下 一 个 信 息 。 形 式 地 ,P 的 形 式 为
… # mi ) = mi + i 表 示 在 交 换 信 息

X 2 * — *2
,/ 之 后 ,证 明 者 把 mi +\ 送 给 检
验 者。

序列 ,
…, m k ,使 得
^
现 在 定 义 证 明 者 和 检 验 者 之 间 的 交 互 作 用。对 于 给 定 的 字 符 串 w 和 r ,如 果 存 在 信 息

.
1 当〈 々 且 Z 为 偶 数 时 ,V( w , r,mi # … # 772,)= 772 ,+ 1;

-
2 当〈 0<f 々 且 f 为 奇 数 时 ,P( w , mi # … ;
3. 该 信 息 历 史 中 的 最 后 一 个 信 息 是 接 受 。
则 记 作 (V P )( w , r )= 接 受 。
为 了 简 化 IP 类 的 定 义 ,假 设 检 验 者 的 随 机 输 入 和 检 验 者 与 证 明 者 之 间 交 换 的 每 一 个
信 息 的 长 度 都 是 P( n ),这 里 是 仅 与 检 验 者 有 关 的 多 项 式 。此 外 ,还 假 设 交 换 的 信 息 总

-^
数 不 超 过 下 述 定 义 给 出 交 互 式 证 明 系 统 接 受 输 入 串 w 的 概 率。对 于 任 意 长 度 为 n
的 字 符 串 iv , 定 义
Pr[V P 接 受 加] = Pr[( V

P )( ,r) = 接 受 ]
其 中 r 是 随 机 选 取 的 长 度 为 />(〃) 的 字 符 串。
如 果 存 在 一 个 多 项 式 时 间 可 计 算 函 数 V ,使 得 对 任 意 函 数 P 、 函 数 P

-
和字符串 XV ,
1.w 6 A 蕴 涵 pr[V< P 接 受 VU ]> }。
2.w
+
^
A 蕴 涵 Pr[V P 接 受 加]< 。
则说语言 A 在 IP 中 。 ^
换 句 话 说 ,如 果 wGA ,则 某 个 证 明 者 P (
— 个 “ 诚 实 的” 证 明 者) 能 使 检 验 者 以 高
概 率 接 受 ;但 如 果 则 没 有 证 明 者 (一 个 “不 诚 实 的” 证 明 者 戶) 能 够 使 检 验 者 以
高 概 率 接 受。
第 JO 章 复 杂 性 理 论 高 级 专 题 263

可以像在引理 10.5 中使错误概率指数地小那样 ,通过反复运行 ,放大交互式证明系


统 的 成 功 概 率。显然 ,IP 包含 NP 类 和 BPP 类 ,我们还证明了它包括语言 JVOiVJSO , 但
不知道 iVOiVJSO 在 NP 还 是 BPP 中 。 下 面 将 要 证 明 ,IP 类 出 人 意 料 地 大 ,它 等 于
PSPACE 类 。

10. 4. 3 IP = PSPACE
本 节 证 明 复 杂 性 理 论 中 一 个 著 名 的 定 理 :IP 类 与 PSPACE 类 相 等 。 于 是 ,对 于
PSPACE 中 的 任 一 语 言 ,证明者能够使多项式时间的概率检验者相信该语言中字符串的成
员资格 ,而这种成员资格的常规证明可能是指数长的 。
纖iiCTRgl IP = PSPACE 0

把 这 个 定 理 分 解 成 两 个 引 理 ,分 别 给 出 一 个 方 向 的 包 含 关 系 。 第 一 个 引 理 证 明 IPG
PSPACE。虽 然 有 一 点 技 巧 ,但是这个引理的证明是用多项式空间的机器对交互式证明系
统 的 一 般 模 拟。
diyiUHIkfci IPGPSPACE。
证 明 设 A 是 IP 中 的 一 个 语 言 。假设当输入 W 的长度为 n 时 ,A 的 检 验 者 V 恰好交

^
p = p( n ) 个信息 。构造一台模拟 V 的 PSPACE 机 器 M。首 先 ,对任意的字符串 w 定 义
Pr[V 接受 = max 接 受
2
当 加 在 A 中 时 ,这 个 值 至 少 等 于 当 W 不在 A 中 时 ,至多等于
f。下面说明如何
在多项式空间内计算这个值 。用 M,表示信息历史 # … #; 。把 V 与 P 交互作用的定
义 推 广 到 从 任 意 信 息 流 幵 始 。如果能够用信息 m,+1 ,
.
1 当
2 当
且 为偶数时,
t

且 i 为 奇 数 时,
V( w ,,
r mi # …

…,
;
;,使得
mp 扩 充 M
^^ ^ ;
3. 该 信 息 历 史 中 最 后 一 个 信 息 是 接 受 。
则记作 (V P )( W ,

r,
M;)= 接 受 。
注意 ,这些条件要求 V 的 信 息 和 中 已 经 存 在 的 信 息 保 持 一 致 。进一步推广早先给
出的几个定义 。对 于 长 度 为 的 随 机 串 r ,定 义
Pr[从 iVf, 开 始 P )( w ,r 9 M j ) = 接 受 ]
接 受 加] = PTrl( V
这里 ,为了以后证明的需要 ,我们引人符号 P ,它 表 示 概 率 是 考 虑 所 有 和 M,上信息一 ^
致 的 串 r 上的概率 。如果不存在这样的 r,则定义概率为 0。然后定义
Pr[从 M) 开 始 V 接 受 = max Pi[从 M) 开 始 接 受 加]

对 每 一 个 和 每 一 个 信 息 流 M,,从 j = p 开 始 递 减 ) ,对 气进行归纳定义 。
^
对 包 含 户 个 信 息 的 信 息 流 如 果 对 一 些 串 r,Mp 和 V 的 信 息 一 致 并 接 受 ,则
令 N M p = l 否 则 ,令 N M p = 0 o
0
~
</> 和一个信息流 M;,如下定义 iVM;。
对)
max , NM 若)< /> 且 为 奇 数
Nm .
J
wt- avgmNM M
若), 且 为 偶 数
这里 Wt- avgw NM .+ 1 表示 Sm,+ 1 ( Prr[V( w ,r ,M;
.
- )= m>+i ] • N M J + 1 ),其中 Prr 表示在长度
i。这 是 NMJ
( }

为 /> 的 随 机 r 上 到的概 +I
以检验者传送信 +1 的 概 率 为 权 重 的 平
264 第三部分复杂性理论

均 值。

令 M 是 空 信 息 流 。 下 面 给 岀 关 于 iVM。的 两 个 断 言 。首 先 ,能 够 在 多 项 式 空 间 内 计 算
iVM。。对 于 每 一 个 )和 M, ,算 法 递 归 地 计 算 ]VM; ;
的 值 。计 算 max, 是 很 直 接 的 。为 计 算
wt - avgm ,我 们 需 要 遍 历 所 有 长 度 为 的 串 r ,删 除 那 些 使 得 检 验 者 产 生 与 中 的 信 息
不 一 致 输 出 的 串。如 果 所 有 的 串 r 都 被 删 除 了 ,那 么 wt - avg;V i = 0。 如 果 有 些 串 保 留 下
来 ,我 们 确 定 使 检 验 者 输 出 的 那 部 分 串 ,然 后 通 过 计 算 部 分 的 均 值 来 确 定 iVM;n i (

的 权 重 。递 归 的 深 度 为 /> ,故 只 需 要 多 项 式 空 间 。
其 次 ,NM。等 于 Pr[V 接 受 W ]。 为 了 确 定 u; 是 否 在 A 中 需 要 这 个 值 ,下 面 用 归 纳 法
证 明 第 二 个 断 言。
对 于 每 一 个 和 M),
Nm;= Pr[从 开 始 V 接 受 w ]
对 )作 归 纳 证 明 。归 纳 基 础 是 )= /> ,归 纳 从 f 到 0 逐 步 进 行 。
归 纳 基 础 :首 先 证 明 > 时 断 言 成 立。 是 接 受 或 者 拒 绝 。 如 果 是 接 受 ,则
NMp 定 义 为 1。此 时 ,由 于 信 息 流 已 经 表 明 接 受 ,故 Pr[从 开 始 ]= 1。因 此 ,
接 受 1;
断 言 为 真 。当 是 拒 绝 时 ,与 此 类 似 。 "
归 纳 步 骤 :假 设 对 于 j + l<P 和 任 意 的 信 息 流 M + 1 断 言 为 真 。 要 证 明 断 言 对 )和 任 ,
意 的 信 息 流 也 为 真 。如 果 )是 偶 数 ,则 %+ 1 是 7 传 给 P 的 信 息 。于 是 有

NM . = ( PTr [ V ( v u , r , M j ) = +i ] •
m; )

= X] ( Prr[V ( w , r , M> ) = m,
+ ] • Pr[从 M,+ i i 开 始 V 接 受 w ])

ipr[从 M) 开始 V 接受 W ]

"/
等式 1 是 气的定义 。根 据 归 纳 假 设 有 等 式 2。等 式 3 由 Pr[从 开 始V接 受 的 定 义
得 到 。因 而 当 7 是 偶 数 时 ,断 言 成 立 。如 果 j 是 奇 数 ,则
'
+ 1 是 P 传 给 V 的 信 息。 于
是有

= max PI[从 My+1 ■

开 始 V 接 受 w]

ipr[从 M) 开 始 V 接 受 加]
等 式 1 是 iVM 的 定 义 。等 式 2 使 用 归 纳 假 设 。我 们 把 等 式 3 分 成 两 个 不 等 式 。由 于 使 下 限
最大的证明一能够送岀使上限最大的信息 m + ,故 有<。又 由 于 这 个 证 明 者 不 可 能 送 出
/

』 1

比 这 个 m,+ 更 好 的 信 息 ,故 有>。送 出 任 何 不 使 上 限 最 大 的 信 息 都 会 使 最 后 得 到 的 值 变
1

小。这 就 证 明 当 )为 奇 数 时 断 言 也 成 立 ,从 而 完 成 定 理 1 0.2 6 的 一 个 方 向 的 证 明 。 ■

现 在 证 明 该 定 理 的 另 一 个 方 向 。这 个 引 理 的 证 明 引 人 一 个 新 的 分 析 计 算 的 代 数 方 法 。
dllil 腿 PSPACE£ IP 0

在 证 明 这 个 引 理 之 前 ,我 们 先 证 明 一 个 较 弱 的 结 果 ,用 来 说 明 这 个 新 技 术 。 可 满 足 性
的计数问题定义为语言
第 JO 章 复 杂 性 理 论 高 级 专 题 265

# SAT = |# 是 恰 好 有 々 个 满 足 赋 值 的 合 取 范 式 }

# SATG IP。
证明思路该证明描述一个协议 ,按照这个协议 ,证明者使检验者相信 :A 确实是给
定的合取范式> 的满足赋值的个数 。在给出这个协议之前 ,先考虑另一个协议 。它具有一
般协议的某种风格 ,但由于需要指数时间的检验者 ,因而是不能令人满意的 。设彡有变量

对 于 定 义 函 数 /: 如 下 :对 于 <21 ,
… e < o ,i }, 令 /〆 ,…,
七 ) 等于炎的


满足条件:r,= a 7 ()<f ) 的满足赋值的个数 。常数函数 /() 是 0 的满足赋值的个数 。如果
… , 满足 0 ,则 /m( ai ,
ai , …, am ) 等于 1; 否则等于 0。显然 ,对每一个 f<m 和 , …,
,有
… ,az ) = /:+1( ai ,
f i( ai , …, a ,- ,
0 ) + /VH ( ai ,
… ,a ,,
1)
关 于 的 协 议 ,从 阶 段 0 开 始 到 阶 段 m + 1 结束 。输入是有序对 ( 丰 , 0 k)

阶段 0 P 把 / () 传给 V。


V 检查々= /()。如果不相等 ,则 V 拒 绝 。
阶 段 1 尸 把 /〆 ) 和 /Kl ) 传送给 V。
V 检查 /QO /iCC + h d ),如果不相等 ,则 V 拒 绝 。

^
^
阶段 2 P 把 /2 ( 0 ,0 ),/2 ( 0 , 1 ),/2(1 ,0 ) 和 /2( 1 , 1 ) 传送给 V。
V 检査 /1( 0 )= /2( 0 ,0)+/2(0 , 1) 和 /i( l )= /2( l ,0 )+ /2( l ,l )o
如果有一个不相等 ,则 V 拒 绝 。

阶段 m 的每一个赋值 ,P 把 / , , ) 传送给 V。

对于
V检查 1
个 联 系 /m —!与 /w 的等式 。

如果有一个不相等 ,则 V 拒 绝 。
阶段 m + 1 对于 的每一个赋值 ,V 通过计算

^
关于这个赋值的值来检查
) 的值是否正确 。 如果对于所有的赋值都正确 ,则 V 接受 ;否 则 拒 绝 。 协议的描述
完毕 。
由于检验者必须花指数时间读证明者传送给它的指数长的信息 ,该协议没有提供
在 IP 中的证明 。尽管如此 ,现在我们来检查它的正确性 ,因为这可以帮助我们理
解下面的更有效的协议 。
凭直觉 ,如果证明者能够使检验者相信 A 中字符串的成员资格 ,则协议判定语言 A。
换句话说 ,如果字符串是 A 的成员 ,则有一个证明者能够使检验者以大概率接受 。如果该
字符串不是 A 的成员 ,则没有证明者 —即使是不诚实的或狡猾的—能够使检验者接受
的概率大于一个较小的数值 。用符号 P 表示正确地执行协议的证明者 。 当输入在 A 中时 ,
它使 V 以大概率接受 。用 P 表示当输入不在 A 中时任何与检验者相互作用的证明者 。 把
戶看成一个对手 ,当 V 应该拒绝时 ,戶好像正在企图让 V 接受 。记号 P 暗示这是一个
“不诚实的” 证明者 。
在刚刚描述的 # SAT 协议中 ,检验者不考虑它的随机输入 。只要选定了证明者 ,它
的运行就是完全确定的 。因而 ,为了证明协议正确 ,我们证明如下两点事实 。首先 ,如果
々〉中々正好是彡的满足赋值的个数 ,则有某个证明者 P 能使 V 接受 ;在每一
在输人 < >,

阶段中 ,给予正确响应的证明者都是这么做的 。第二 ,如果々不正确 ,则每一个证明者 P


266 第三部分复杂性理论

都会使 V 拒绝 。下面证明第二种情况 。
如果々不对 ,并且戶给出了准确的响应 ,则由于 /o ( ) 是 0 的满足赋值的个数并且
k , 因而 V 在阶段 0 就马上拒绝 。为了阻止 V 在阶段 0 拒绝 ,戶必须违背协议传送
foO
^
。 。
一个错误的 /() 值 ,记作 /()。 形象地说 ,/o ( ) 是关于 /() 值的一个谎言 。 和现实生 。
活中一样 ,谎言引出谎言。为了在后面的阶段不被戳穿 ,戶不得不继续对其他的 A 值说
谎 。这些谎言和戶一道最终将在阶段 m + 1 被戳穿 ,在那里 V 直接验证 / m 的值 。

7
更精确地说 ,因为 o( )关 / o( ),戶在阶段 1 送出的值 /:⑺) 和力(1 ) 中至少有一个
是不正确的 ;否则 ,V 在检查是否 /()( ) = /!( C + A d ) 时 拒 绝 。 例 如 /〆()) 的值不正

确 ,记送岀的值为 /1( 0 )。 如此继续下去 ,可以发现在每一个阶段 ,戶一定要送出某个不

正确的值 ,

^
^
… , ),否 则 V 就会拒绝 。但是 ,当 V 在阶段 m + 1 检查那个不正确的值

_
々 …, „ )
(A , 时 ,无论怎样它都会拒绝 。于是 ,我们得出结论 ,如果々是不正确的 ,则

不论 P 怎么做 ,V 都拒绝 。因此 ,该协议是正确的 。


这个协议的问题是信息的数目在每个阶段加倍地增长 。加倍的原因是检验者为了确认
一个值 /,( • • ) 需要两个值 /1 + 1 ( … ,
0 ) 和 /i+ 1( … ,
1 )。如果能找到一种方法 ,使得检验
者在确认一个 /, 值时只使用一个 /,+ 1 值 ,那么信息的数目就一点也不会增加 。采用下述
办法能够做到这一点 : 把函数 /: 的输人扩大到非布尔值 ,并且对从一个有限域中随机选
取的 z 确认一个值 / z + i ( … ,
z)。
证明设 # 是变量 A 到 : 的 合 取 范 式 。 采 用 算 术 化 (arithmetization ) 技 术 ,把 多
…,
关联到一个多项式 f( A , /> 模 仿 0 ,用 算 术 运 算 + 和 X 模拟布尔运算 A 、 V 和
'

^
如下所示 ,设《 和 是两个子公式 ,把表达式
八夕 替换成
替换成 1 -a
a V /? 替换成
观察发现 ,f 的变量的次数都不大 ,这一点在后面是重要的 。运算 # 和 a 生成的
多项式的次数不超过关于 a 和 的 多 项 式 的 次 数 之 和 。因 而 ,任 何 变 量 的 次 数 不 超 过 n ,
这 里 w 是 彡 的 长 度。
如果给 P 的变量赋布尔值 ,则 f 和 0 在该赋值上得到的结果一样 。当变量取非布尔值


时 ,不能用 # 对计算 P 做出明显的解释 。然而 ,不管怎样 ,在这个证明中要使用这样的赋
值来分析 这很像在定理 10.12 的证明中用非布尔赋值分析只读一次的分支程序 。变量
在 g 个元素的有限域 J 上取值 ,这里 g 不小于 2

用户重新定义函数 / ,在证明思路中曾定义过它们。对于 0<i<m 和 a\ ,… ,
ai ' 令
… ,<2,) =
f i (a i , y] p( a\ ,
…,a )

… 6 < 0 ,1}
注意到这个新定义是原有定义的推广 ,当所有 A 取布尔值时 ,两者一样 。于是 ,/ 0 ( ) 仍
是必的满足赋值的个数 。每一个函数 /,( & ,… , ) 可表示 A 到 的多项式 。这些多项
式的次数不超过 P 的次数 。
下面给出关于 # SAT 的协议 。一开始 V 接收输入 〈 0 , ^
々> 并 且 算 术 化 一 得 到 多 项 式 ^
第1 0 章 复 杂 性 理 论 高 级 专 题 267

Po 所有的算术运算在域夕上进行 ,参与算术运算的至多有 g 个不同的元素 。 其中 ,g 是大


于 2” 的素数 。( 找到这样一个满足条件的 g 需要一个附加的步骤 。 我们暂时忽略这一点 ,
因为马上将要给岀的证明是一个更强的结果 ,即 IP = PSPACE ,它不需要这一点 。 ) 双层

-
方括号内的注释放在描述每一个阶段的开始 。
阶段 0 [ P 传送 / ()。1 。

P V:P 把 / () 传送给 V。

V 检査 6 = /()。如果为假 ,则 V 拒绝 。

-
阶 段 1 〖 P 使 V 相信 : 如果 ( n ) 是正确的 ,则 /0 ( ) 是正确的 。S

^
P V:P 传送 /i(z) 作为 Z 的多项式的全部系数 。
V 利用这些系数计算 /i( 0 ) 和 /以1 )。
V 检 查 是 否 成 立 。若 不 成 立 ,则 拒 绝 。( 记 住 :所 有 计 算 都 在

-
域上进行 。 )
V P :V 从只中随机地选取一个数 n ,并且把它传送给 P。
阶 段2 使 V 相信 : 如果 /2( n , n ) 是正确的 ,则 /An ) 是正确的 。1
P- V: P 传送 /2( ri , z ) 作为 2:的多项式的全部系数 。
^
V 利用这些系数计算 /2( n ,0 ) 和 /2( n ,

-
l )。
V 检查 /i( n )= /2( n ,0 )+ /2( n ,
1 ) 是否成立 。若不成立 ,则 拒 绝 。
V P :V 从 7 中随机地选取一个元素 r 2 并且把它传送给 P。

阶段 •
IP 使 V 相信:如果 /z(n ,
…,r,) 是正确的 ,则 / (n ,
…,n一 D 是正确的。 1
^
/

P- V: P 传送 /:( n ,
^
… ,n
- , 作为 :的多项式的全部系数 。
i %) 2

0 和 / n , , n- ,l
n ,
V 使用这些系数计算 /:( n,…, —i ) z( ••• i )o

… ?n- i ) = /; ( r i , y r i-\ ,0 )+ /,( n ,


― •• * ,
n—1 ,
1 ) 是否成立 。若不成

-
V 检査 /: dn , •

立 ,则拒绝 。
V P :V 从 7中随机地选取一个数匕 ,并且把它传送给 P。

阶段 m + 1 〖 V 直接验证 / n, 1

^^
••• , ) 是正确的 。

V 计算 p( n ,
… , ) 并且与 /卜 … , ) 比较。如果两者相等 ,则 V 接受 ;否则拒
绝 。协议的描述完毕 。 ^
下面证明这个协议识别 # SAT。首先 ,当# 有々个满足赋值时 ,如果证明者 P 按照协
议办事 ,则 V 显然一定接受 。其次 ,要证明当 0 的满足赋值的个数不是々时 ,没有证明者

能够使 V 接受的概率大于一个很小的值 。令戶是任意的证明者 。

为了阻止 V 马上拒绝 ,P 在阶段 0 必须为 / o( ) 传送一个不正确的值 /()。因此 ,在 。


阶段 1 ,V 计算的 / JO ) 和乃(1 ) 中一定有一个是不正确的 ,从而戶传送的 /〆 ) 作 为 =

^
z 的多项式系数一定是错的 。 把这些系数表示的函数记作 / z)。下面是证明中的关键
步骤 。

^
当 V 在 7 中取一个随机数 n 时 ,可以断言 / n ) 不 大 可 能 等 于 /dn )。 当 n>10
时 ,我们可以证明
268 第三部分复杂性理论

P r[ / i ( n ) = /i ( n ) ] < n-2
这个概率的上界来自引理 10.13: 次数不大于 d 的一元多项式最多有 个根 ,除非它
恒等于 0。因此任何两个次数不大于 d 的一元多项式最多在 d 个地方相等 ,除非它们处处
相等 。

回忆一下关于
A , 并且如果戶传送的关于 /l 的多项式的次
的多项式的次数不大于 /2
^
数大于〃,则 V 拒绝 。 已经肯定这两个多项式不处处相等 。因而根据引理 10.13 , 它们最
多在〃个地方相等 。7 的大小大于 2 。n 正好使它们相等的机会不超过 72 / 2 当〃>10
时 ,这个值不大于
-2
'
再扼要地重述一下至此所证明的东西 。如果 /Q( ) 是错的 ,则 /\ 的多项式一定是错的 ,

从而根据前面的断言 ,/i ( n ) 大概也是错的 。如果出现可能性很小的事件 7 ( n ) 等于


i

/i ( n ) , 戶在阶段 1 “很走运”,那么它在协议的剩余部分按照关于 P 的指令执行 ,能够


使 V 接受 (虽然 V 应该拒绝 )。
继续证明 。如果 Z ( n ) 是错的 ,V 在阶段 2 计算的 / ( n ,0 ) 和 / ( n ,l ) 中 ,至 少
2 2

有一个是错的 ,因而戶传送的 /2( n ,


幻作为 % 的多项式系数一定是错的 。把这些系数表
示的函数记作?( n ,幻 。 多项式 / ( n ,幻和
2
_
/ (n ,
幻的次数不大于〃,从而和前面一样 ,
2 2

它们在夕中随机数 r 处相等的概率小于〃 。 于是 , 当 V 随机地选取 r 时 ,72 ( n , r )


2
2
2 2

多半是错的 。
一 般 来 讲 ,如 此 进 行 可 以 证 明 对 于 每 一 个 如 果
…,
fi-\ ( n , n _ i ) # fi-i ( n ,
… » n~ i )
则当 72>10 时 ,对于在中随机选取的 r,, -
P r[/i ( n ,
••• ,
&) = fi( n ) ] < n~2

于是 ,由于对 /Q ( ) 给 出 不 正 确 的 值 , 戶 大 概 要 被 迫 对
…,
/m ( n , rm ) 给岀不正确的值 。碰巧可能在某个阶段 〗,虽然 /: 和/;不同 ,但是 V 选取
的 n 使/ z ( n ,
… ,n ) = /z ( n ,… 赘 rz )。 P 碰上这种好运的概率为阶段数 m 乘以 n - 2 ,不超
m/ n 0

+1 直接验证 /
如果 P
— 直不走运 ,它最后要传送一个不正确的 /m( n ,… , ) 值 。而 V 在阶段
的这个值 ,这时任何错误都将会被发现 。 因此 ,如果々不等于

^
m m 的满足
赋值的个数 ,则任何证明者都不能使检验者接受的概率大于 l / n Q
为了完成定理的证明 ,还需证明检验者在概率多项式时间内运行 。 根据对它的描述 ,
这是显然的 。 ■

下面回到引理 10.29 PSPACEGIP 的证明 。 类似上述定理 10.30 的证明 ,只是在这里


要使用一个新的思想 ,用来降低协议中岀现的多项式的次数 。
证明思路先试一下在上述证明中采用的思想 ,从而找到困难在什么地方 。 为了证明
PSPACE 中的每一个语言都在 IP 中 ,只需证明 PSPACE 完全语言 TQBF 在 IP 中 。 设 0
是一个带量词的布尔公式
i p = Q\ X \ Q Z X 2 … Q m l m[彡]
其中彡是一个合取范式 ,每一个 Q, 是 3 或 V 。函数 /z 的定义和前面一样 ,只是这次要把
第 JO 章 复 杂 性 理 论 高 级 专 题 269

量 词 考 虑 进 来 。对 于 和 ai , 、_
… , 6 { 0 ,1 },令
1, Qt + l 工 t + l •••Qm 工 m[ 多 (
'

… )] 为真
f i ( a\ ,… =
0, 否 则
其 中 ,今( ai ,
…,ai ) 是 在 # 中 把 <21 , , 代人 XI ,•• nr* .
于是 ,/o ( ) 是 0 的 真 假 值 。下
^

9 1 0

述算术恒等式成立 :
V
当 Q, + i =
当 Q» + i = 3 时 ,
回忆一下定义 x * 3;
时,
/* ( (21 ,
fi ( a] ,
…,

= l —( l —:r )( 1 — 3;
(2 , ) =

)。
/VH ( <2 i ,
…,(2 i ,
0) • /f+1 ( ai , , a , , 1 )
… , af ) = fi+\ ( a\ , ••• , a ,- , 0 ) * /m ( ^ i , , a , , 1 ) --
模 仿 # SAT 协议的做法 ,把所有 /: 扩张到一个有限域上 ,并且对量词使用这些等式 ,
而不是对加法运算使用等式 。这个想法的问题出在算术化时每一个量词可能使产生的多项
式的次数加倍 ,从而这些多项式的次数可能指数地增长 。这样一来 ,证明者为了描述这些
多项式 ,必须传送指数多个系数 ,进而检验者必须运行指数时间来处理这么多系数 。
为了保持多项式的系数较少 ,引入化简运算 R ,它能降低多项式的次数而不改变它们
对布尔输入的性状 。
证 明 设 是 带 量 词 的 布 尔 公 式 ,其 中 0 是 一 个 合 取 范 式。为 了 算
术化 0,引入下述表达式
ip = Qr 1 Rr 1 03: :
1 3:
203:
3 3:
... Q工 m 尺工 1 …仏历[ 必]

^^ ^ -
2 1 仏2 仏 3

暂且不管 Rx, 的含义 ,它只在定义函数 /: 时有用 。 把


/

0 重新写成
0’= S\ y\ S2 y 2 -
尺 },:
其中每一个 S/ 6 { V ,3 , y:6 { A ,
…,xm }。
m 9
SkykLi> \
^
对 于 每 一 个 定 义 函 数 /: 如 下。 f k U r , ,xm ) 为算术化 4 得到的多项式〆:n ,
…,
Xm ) o 对于纟<々,用 /:+ 1 定义 /i:
Si+i = V 时 ,
当 / ( …)= /m ( …,
! 0 ) • /m(…, 1) ;
当 S,+i = 彐时 , /i( …)= /*+i( … , 0 ) * /,+i(… , 1);
当 Si+i = R 时 , /i(…, a ) = ( l — a )/,+1(…, 0) + a/i+i( … ,
1) 0

如果 51+ 1 是乂或 3 , 则 /: 比 / +1 少一个输入变量 。如果 S£ +1 是 R ,则这两个函数的


1

输入变量的个数相同 。因此 ,一般来讲 ,函数 /, 将不依赖于〖 个变量 。为避免书写麻烦 ,




用 “•• 代替 , …, d j ,其中 ) 是一个适当的值 。 此外 ,重新排列这些函数的输入顺序 ,

^

使得 :y:+ i 是最后一个输入变量 。
注意 ,当输入是布尔值时 ,对多项式作尺工运算不改变它们的值 。因此 ,/0 ( ) 仍是 4
的真假值 。但是 ,注意到 i?: r 运算产生的结果关于 x 是线性的 。在 〆 中 ,把 添 加
在 QA 的后面 ,是为了在算术化 Q 导致变量次数加倍之前把每一个变量的次数都减少为 1。
现在已为描述协议做好了准备 。本协议中的所有算术运算都在一个元素个数不少于 V
的有限域 7 上进行 ,其中〃是 0 的长度 。V 自己能够找到一个这么大的素数 ,因而不需要

P 提供 。
阶 段 0 〖 P 传送 /G( )。1
P v:P 把 / ( ) 传 送 给 V。
^
Q


V 验证 /0 ( )= 1 。如果 /()关1 ,则 V 拒 绝 。
270 第三部分复杂性理论

A - n ,…) 是正确的 。1

^
阶段 / IP 使 V 相信 :如果 /z( n ,… ,r ) 是正确的 ,则
P V :P 传送 /Kn ,
…,z ) 作为 z 的多项式的所有系数 。( 这里 n 表示令这些变量
^
0 0 0

等于前面随机选取的值 n , , 厂2 參
•• o)

V 使用这些系数计算 /:( n … ,
0) 和 M n …,
1 )。
V 检查下述等式
/i ( n … ,
0 ) • /z ( n … ,
1) 若 Si = V
f i-i ( r\ …)
、/* n …,
( 0 * /i n " ,
) ( . l) 若 Si = 3

-
f i-i ( n ••• ,
若不成立 ,则 V 拒绝 。
r) = (l —
^/A n … ,0 + rA ( n … ,1
) ) 若 = i?

_
V P :V 从 7 中取一个随机数 r ,并且把它传送给 P。(当 Sz = 尺时 ,用这个 r 代替
前面的 r 。

+
转到阶段纟 1 ,P 必须使 V 相信 / n … ,

r ) 是正确的 。
阶段 /< + 1 [ V 直接验证 h ( n ,
… , ) 是正确的 。l
… , ),并且与它知道的 A ( n , , ) 值比较 。 如果两者相等 ,则 V
V 计算 Mn ,
接受 ;否则拒绝 。整个协议的描述完毕 。
^
这个协议的正确性证明类似于 # 5八7 协议的正确性证明 。 显然 ,如果 0 为真 ,则 P
能够执行协议 ,并且 V 将会接受 。如果 0 为假 ,则 P 在阶段 0 必须说谎 ,传送一个不正确
的 /o() 的值。在阶段 i,如果 V 有不正确的 /£ -i ( n … ) 的值 ,则 /, ( n …,0) 和 / ( n …,1)
i

中一定有一个值不正确 ,从而关于 /f 的多项式一定不正确 。因此 ,在阶段纟,如果戶走


运 ,f i ( n … ,
r ) 正确的概率不超过这个多项式的次数除以有限域 J 的大小 ,即 W 。 协

22 ) 个阶段 ,故
议进行 0(; P 在某个阶段走运的概率不超过 1 / 如果戶永远不走运 ,则
V 将在阶段々+ 1 拒绝 。 職

10.5 并行计算
并行计算机 ( parallel computer ) 是能够同时执行多个操作的计算机 。用并行计算机
求解某些问题可能会比用顺序计算机 ( sequential computer ) 快得多 ,后者每次只能做一
个操作 。 在实践中 ,两者之间的差别有点模糊不清 ,因为多数真实的计算机 ( 包括 “顺
序” 计算机) 被设计成在执行各条指令时使用某种并行性 。我们在这里关注的是大规模并
行性 ,即在一个计算中有数量巨大 (比如数百万或更多) 的处理单元一起积极参与工作 。
本节简洁地介绍并行计算理论 ,描述一个并行计算机的模型 ,然后利用这个模型给岀
几个能够很好并行化的问题 。此外 ,还要讨论并行化不适合某些问题的可能性 。

1 0 . 5. 1 一致布尔电路
在并行算法的理论研究中 ,用得最多的模型之一叫作并行随机存取机 ( Parallel Ran -
dom Access Machine , PRAM )。在 PRAM 模型中 ,理想化的处理器具有一个简单的模仿
实际计算机的指令集 ,它们通过共享存储相互作用。 在这一小节中 ,不可能详细地描述
PRAM 。我们使用在第 9 章为别的目的引入的另一个并行计算机模型— 布尔电路 。
作为并行计算模型 ,布尔电路有自己的优点和缺点 。 从好的方面讲 ,这个模型的描述
_
简单 ,使证明比较容易 。电路还明显地像现实中的硬件设计 ,在这个意义上模型是现实
的。从不好的方面讲 ,由于各个处理器是很弱的 ,电路不便于用来 “ 编程”。 此外 ,在布
尔电路的定义中不允许有回路 ,而现实中构造的电路可能有这样的回路 。
在并行计算机的布尔电路模型中 ,把每一个门作为一个独立的处理器 ,因此把布尔电
路的处理器复杂度 ( processor complexity ) 定义为它的规模。认为每一个处理器在一个单
位时间内计算它的函数 ,因此把布尔电路的并行时间复杂度
定义为它的深度 ,即从一个输入变量到输出门的最长距离 。
任何一个具体的电路都有固定的输入变量数 ,故像定义 9.22 中定义的那样 ,我们用
电路族判定语言 。 必须对电路族强加一个技术性要求 ,使它们对应于 P R A M 之类的并行
计算模型 。 在这类模型中 ,一台机器能够处理各种长度的输人 。这个要求使你能够容易地
得到电路族中的所有成员 。这个一致性 ( uniformity ) 要求是合理的 ,因为只知道存在小
的电路判定一个语言的某些成员并不是很有用 ,这个电路本身可能很难找到 。因而给出下
述定义 。
㈣邏 1
的 输 入 为 时 ,丁 输 出 〈 C„ 〉

则称这个语言的规模

门工
(H E19

A-:
:y ) V (- x A :
y =( 工 1
设 ( Cc Q,

^
,则 称 该 电 路 族 是 一 致 的 。
回忆一下 ,定义 9.23 分别用最小规模和最小深度的电路族定义语言的规模复杂度和
深度复杂度 。 为了明确要实现一个具体的并行时间复杂度需要多少处理器 ,或者反过来要
实现一个具体的处理器复杂度需要多少并行时间 ,我们在这里同时考虑一个电路族的规模
和深度 。如果存在规模复杂度为 /(〃) 和深度复杂度为的一致电路族识别某个语言 ,

令A是
- 深度联合电路复杂度不超过 (/U ),

y )。设电路的输入为
1
< o,
i}
g( n ))。
第1 0 章 复 杂 性 理 论 高 级 专 题

上由所有含奇数个 1 的字符串组成的语言。通过计算奇偶
函数可以检查 A 的成员资格 。可以用标准的 A N D、 O R 和 N O T 运算实现两个输入的奇偶
, … ,x n o 获取奇偶函数的电路的一个
(

…) 是 一 族 电 路 ,如 果 存 在 对 数 空 间 的 转 换 器 T,当 T
C2 , :
271

parallel time complexity )

办法是构造仏门 ,这里 = 工1 ,& A- 1 ( 〗<72 )。 这个构造使用 0 0 ) 规模和 0( 72 )


深度 。
例 9.24 通过构造 ㊉门的二元树 ,描述了奇偶函数的另一个具有 O U ) 规模和 O( l o g n )
深度的电路 。这个构造有重大的改进 ,它使用的并行时间比前者指数地少。因此 ,A 的规
模 - 深度复杂度为 (0( n ),0( l o g r z ))。 ■

极i C T E a 回忆一下 ,可以用电路计算输出字符串的函数 。考虑布尔矩阵乘法函数 。


输入是 2 m 2 = w 个变量 ,表示两个 m X m 矩阵 A = } 和 3= { 心 }。输出是 m 2 个值 ,表
示 m X m 矩阵 C ={ Q },其中

= V ( ciij A bjk )
对于每一个 f ,j 和々,这个函数的电路有计算 % A 心的门 g # 。另外 ,对于每一个和々,
电路包含一棵计算 V ## 的或门的二元树 。 每一棵这样的树有 m - 1 个或门和 l o g m 的深
度 。因此 ,这些布尔矩阵乘法电路的规模为 0( m 3 )= 0( n 3 / 2 ),深度为 O( logrz )。
设八 = { <2(; _
} 是 一 个 m X m 布尔矩阵 ,A 的传递闭包 ( transitive closure )

是矩阵
A V A2 V ••• V Am
272 第三部分复杂性理论

其中 A 是 f 个 A 的矩阵乘积 , V 是矩阵元素的按位 OR 。传递闭包运算与 PATH 问题关


系密切 ,因而与 NL 类的关系密切 。设 A 是有向图 G 的 邻 接 矩 阵 , 是 顶 点 与 G 相同 、

边表示 G 中存在一条路径 。 _
边表示 G 中存在长度为〖 的路径的图的邻接矩阵 。A 的传递闭包是图的邻接矩阵 ,图中的

可以用规模为纟和深度为 log z 的二元树表示 Ai 的计算 ,其中每个顶点计算它下面的


两个矩阵的乘积。每个顶点是一个 OU3/ 2 ) 规模和对数深度的电路 。因此 ,计算 A”的电


路的规模为 OU 2 ),深度为 0( log2 n )。对每一个 A 构造一个电路 ,共要添加 OUm ) =
CK 2 )规模和 Odogn ) 深 度 。 因 此 ,传 递 闭 包 的 规 模 - 深 度 复 杂 度 为 ( OU 5 /2 ),

0( log2 )) 蘭
” 0

1 0 . 5. 2 NC 类

- 深度复杂度 (0( V ),0( log

^
许多感兴趣的问题具有规模 )),其中々是常数 。 可以
认为 ,这样的问题是能够用适当数量的处理机高度并行化的 。这促使我们定义 NC 类 。
对于 >1 ,
Z 令 NC1 是 能 够 用 多 项 式 规 模 和 O( logy ) 深 度 的 一 致 ㊀ 电 路
族 识 别 的 语 言 类 。 NC 是 所 有 在 某 个 NO 中 的 语 言 组 成 的 语 言 类 。 用 这 种 电 路 族 计 算 的 函
'

数 分 别 叫 作 NC' 可计算的和 NC 可计算的 。


下面考察这些复杂类与我们见过的其他语言类的关系 。首先给出图灵机空间与电路深
度之间的联系 。在对数深度内可解的问题在对数空间内也是可解的 。反过来 ,在对数空间
内甚至在非确定型对数空间内可解的问题都是在对数平方深度内可解的 。

证明我们扼要地描述识别 NC1 中的语言 A 的对数空间算法 。 对于长度为 72 的输人


w ,算法构造关于 A 的一致电路族中的第 n 个电路 ,然后通过从输出门开始的深度优先搜
索计算这个电路的值 。( 为了掌握搜索的进展 ) 只需记录到当前正在考察的门的路径以及
沿这条路径所获得的部分结果 。电路具有对数深度 ,因此模拟只需要对数空间 。
NC2
^
^
NL 0

证明思路计算一台 NL 机格局图的传递闭包 。 输出表示是否存在从起始格局到接受


格局的路径的状态 。


证明设 A 是被一台 NL 机 M 识别的语言 ,这里 A 已被编码到
…)。为了得到 C„ ,要构造一个图 G,它很像 M 对长度为 rz 的输入
的一致电路族 (Co , ,
w 的计算图 。在构造电路时 ,我们不知道输人功,只知道 w 的 长 度 电 路 的 输 入 是 变 量
< 0 ,1 } 上 。 要构造 A

到 ,每 一 个 对 应 输 入 中 的 一 个 位 置。
回忆一下 ,M 关于 w 的格局描述了 M 的状态 、 工作带的内容以及输入头和工作读写
头的位置 ,但不包括 w 本身 。因此 ,M 关于 w 的格局集合实际上不依赖于 VU , 而仅与
的长度 n 有关 。这些多项式个格局构成 G 的顶点集 。
在 G 的边上标记输入变量 。设 和 是 G 的两个顶点 ,Q 指明输人头的位置是

^ ^
t Q

© 对 NO 来 说 ,用 对 数 空 间 转 换 器 定 义 一 致 性 是 标 准 的 G>2 时 ),但 对 于 NC1 来 讲 ,它 给 出 一 种 不 标 准 的


结 果 ( NC1 包 含 子 集 标 准 化 类 NC1 )。 尽 管 如 此 ,我 们 还 是 给 出 该 定 义 ,因 为 它 更 简 单 ,而 且 能 满 足 我 们 的
需要。
Steven Cook 用 “ Nick 类” 来 命 名 NC ,因 为 Nick Pippenger 是 最 早 认 识 到 NC 重 要 性 的 人 。
第1 0 章 复 杂 性 理 论 高 级 专 题 273

io 当输人头在读 1 ( 或 0 ) 时 ,按照 M 的转移函数 , 能够一步产生 C2 ,则给 G 中的边


( Cl ,
C2 ) 标记 ( 或研)。如果不管输入头在读什么 , 都能够一步产生 Q ,则不给 G 中
的这条边作标记 。
如果根据长度为〃的字符串 W 安置好 G 的边 ,则存在从起始格局到接受格局的路径
。因此 ,构造一个电路计算 G 的传递闭包 ,并且输出表示是否存在这
当且仅当 M 接受 U;


种路径的状态 ,它恰好接受 A 中长度为《 的字符串。这个电路具有多项式的规模和
0( log2 71) 深度 。
使用一台对数空间转换器 ,能够对输人 1” 构造 G 和 C „ 。请参见定理 8.20 中关于一
个类似的对数空间转换器的详细描述 。 ■

多项式时间可解的问题类包括 NC 中的所有问题 。下述定理叙述这一关系。


喊 匪:
1 NC P
^ 0

证明能够用一个多项式时间算法运行对数空间转换器 ,生成电路 C„ ,然后模拟仏


对长度为 n 的输入的计算 。 ■

10.5. 3 P 完全性
现在考虑 P 中所有问题也在 NC 中的可能性 。如果这两个语言类相等 ,那是完全出人
意料的 ,因为这意味着所有多项式时间可解的问题都能够高度并行化 。 下面介绍 P 完全
性 ,它提供了 P 中某些问题是固有可串行化的理论根据。
如果
1. BGP ,
2. P 中每一个 A 对 数 空 间 可 归 约 到 J3 ,
则称语言 B 是 P 完全的 。
下述定理仿效定理 8.18 , 并且由于 NC 电路族能够计算对数空间归约 ,故可以类似地
证明它 。我们把它的证明留作练习 10.3。
疆 動 馳 如 果 A<LB 且 B 在 NC 中 ,则 A 在 NC 中 。
我们证明电路计算问题是 P 完全的 。对于电路 c 和输入 X ,记 C(:T ) 为 C 关于 X 的

值 。令 CJi?CWT- VALUf = {〈 C,
:r〉| C 是布尔电路且 C( x )= l }。
遇通 CIRCUIT- VALUE 是 P 完 全 的 。
证明定理 9.25 中给出的构造说明了如何把 P 中任意的语言 A 归约到 CJRCUJT

VALL/f 。对于输入 w ,归约生成一个模拟 A 的多项式时间图灵机的电路。该电路的输入
-
是 w 本身 。由于生成的电路具有简单和重复的结构 ,归约能够在对数空间内实现 。 ■

10.6 密码学
在通信领域中使用密码的加密技术可追溯到几千年前 。 在古罗马时期 ,儒略 恺撒把
给他的将军们的命令译成密码 ,以防止被敌人截取。在第二次世界大战中 ,图灵机的发明
人阿伦 • 图灵领导一个英国数学家小组破译德国人的密码 ,德国人用这些密码给正在大西
洋上巡逻的潜艇发送命令 。现在各国政府十分重视密码技术 ,投入很大的力量研究很难破
译的密码和寻找别人使用的密码的弱点。 如今 ,公司和个人也使用加密增加信息的安全 。
不久的将来 ,几乎所有的电子通信将会受到密码保护 。
274 第三部分复杂性理论

近年来 ,计算复杂性理论给密码设计带来一场革命 。人们都知道 ,密码学研究的领域


目前超出了传统的通信范围 ,而要面对众多涉及信息安全的问题 。 例如 ,现在有一种技
术 ,经过数字 “签名” 后的报文可以鉴定发送人的身份 ;可以进行电子选举 ,选民在网上
投票和公开统计选举结果 ,不会泄露任何人的投票情况 ,能防止重复投票和其他违法行
为 ;构造不要求通信双方预先约定加密和解密算法的新型密码 。
密码学是复杂性理论的重要实践领域 。数字蜂窝电话 、 卫星电视直播以及网上电子商
务等全都依赖加密措施保护信息 。这些系统已进入大多数人的日常生活 。密码学已经促进
了复杂性理论和其他数学领域内的许多研究 。

1 0 . 6. 1 密钥
在传统解密技术中 ,当发信人打算给报文加密 ,使得只有某个接收人能够对它解密
时 ,发信人和收信人共有一个密钥 (secret key )。 密钥是加密算法和解密算法使用的一段
信息 。因为任何得到密钥的人都能够加密和解密报文 ,故保守密钥的秘密对密码的安全是
至关重要的 。
如果密钥太短 ,可以通过蛮力搜索整个密钥空间发现它 。甚至长一些的密钥也可能容
易受到某些攻击— 等会儿还要谈这个问题 。 使密码绝对安全的唯一办法是使用与发送的
全部报文一样长的密钥 。
与报文一样长的密钥叫作一次性衬塾 (one- time pad )。本质上 ,一次性衬垫密钥的每
一位只使用一次 ,用来加密报文的一位 ,以后不再使用密钥的这一位 。 一次性衬垫的主要
问题是 ,如果通信量很大则密钥可能相当大 。因此 ,就大多数的目的而言 ,一次性衬垫由
于非常不便通常被认为是不实际的 。
使用中等长度的密钥 ,可以进行不限量安全通信的密码是更可取的 。 有趣的是 ,理论
上不可能有这样的密码 ,但矛盾的是 ,在实践中却使用着它们 。在理论上不可能有这种类
型的密码 ,是因为能够对可能的密钥空间进行蛮力搜索 ,找到比报文短很多的密钥 。因
此 ,以这种密钥为基础的密码在原则上是可破译的 。对这种自相矛盾的怪事有一种解释 。
因为当密钥有中等长度时 ,比如 100 位 ,蛮力搜索太慢 ,所以密码在实践中无论如何是能
够保证足够的安全的 。当然 ,如果密码能用其他的快速方式破译 ,那么它也是不安全和不
应该使用的 。 最重要的是 ,要确认密码不可能被快速破译 。
现在还没有办法保证使用中等长度密钥的密码实际上是安全的 。 为保证密码不能被快
速破译 ,至少需要在数学上证明不能快速地找到密钥 。然而 ,这样的证明似乎超出当代数
学的发展水平! 理由如下 ,一旦发现密钥 ,验证它的正确性是容易做到的 ,只需检査用它
解密后的报文 。因此 ,密钥验证问题可以公式化为 P 中的一个问题 。如果能够证明不能在
多项式时间内找到密钥 ,就证明了 P 不等于 NP ,从而取得重大的数学进展 。
由于不能从数学上证明密码是不可破译的 ,因此改成依靠实践证据 。在过去 ,密码的
质量靠雇用专家来评价 。请他们破译密码 ,如果他们不能破译 ,就会增加对密码安全性的
可信度 。这种方法有明显的不足 。如果别人有比我们更好的专家 ,或者我们对自己的专家
缺乏信任 ,那么密码的完整性可能受到损害 。尽管如此 ,直到最近这还是唯一可供使用的
方法 ,像美国国家标准与技术局正式批准的数据加密标准 ( DES) 这样一些广泛使用的密
码的可靠性也有赖于它。
计算复杂性理论提供了另一种获得密码安全性证据的方法 。 我们可以给出破译这个密
第1 0 章 复 杂 性 理 论 高 级 专 题 275

码 的 复 杂 度 与 另 外 某 个 问 题 的 复 杂 度 之 间 的 联 系 ,而 后 者 已 经 有 使 人 相 信 的 难 解 性 证 据 。
回 忆 一 下 ,我 们 已 经 用 NP 完 全 性 作 为 某 些 问 题 难 解 的 证 据 。 把 一 个 NP 完 全 问 题 归 约 到
密 码 破 译 问 题 ,可 以 证 明 这 个 密 码 破 译 问 题 本 身 是 NP 完 全 的 。但 是 ,这 没 有 提 供 安 全 的
充 分 证 据 ,因 为 NP 完 全 性 涉 及 最 坏 情 况 的 复 杂 性 。一 个 问 题 虽 然 是 NP 完 全 的 ,但 是 有
可 能 在 大 多 数 时 候 它 是 容 易 解 的 。 密 码 则 必 须 总 是 很 难 破 译 的 ,因 而 需 要 考 虑 平 均 复 杂
度 ,而 不 是 最 坏 情 况 的 复 杂 度 。
整 数 因 子 分 解 问 题 是 公 认 的 在 平 均 情 况 下 非 常 难 解 的 问 题 。几 个 世 纪 以 来 ,一 些 顶 尖
数 学 家 一 直 对 因 子 分 解 感 兴 趣 ,但 是 还 没 有 人 发 现 它 的 快 速 算 法 。围 绕 因 子 分 解 问 题 已 经
建 立 了 某 些 现 代 密 码 ,破 译 这 种 密 码 对 应 因 子 分 解 一 个 数 ,这 就 构 成 这 些 密 码 是 安 全 的 、
令 人 信 服 的 证 据 。因 为 破 译 这 种 密 码 的 有 效 方 法 能 够 导 岀 快 速 的 因 子 分 解 算 法 ,这 可 是 计
算 数 论 中 的 重 大 进 展!

1 0 . 6. 2 公钥密码系统
在 传 统 的 密 码 学 中 ,甚 至 当 密 钥 适 当 地 短 时 ,密 码 的 管 理 仍 是 普 遍 使 用 密 码 的 一 个 障
碍 。一 个 问 题 是 每 一 对 希 望 进 行 专 门 通 信 的 双 方 需 要 为 此 建 立 一 个 联 合 密 钥 。 另 一 个 问 题
是 每 一 个 人 需 要 保 存 一 个 秘 密 的 数 据 库 存 放 所 有 这 样 建 立 起 来 的 密 钥。
新 近 开 发 的 公 钥 密 码 很 好 地 解 决 了 这 两 个 问 题。在 传 统 的 私 钥 密 码 系 统 ( private- key
cryptosystem ) 中 ,加 密 和 解 密 使 用 相 同 的 密 钥 。与 此 不 同 ,在 公 钥 密 码 系 统 ( public- key
cryptosystem ) 中 ,解 密 密 钥 不 同 于 加 密 密 钥 ,并 且 不 容 易 从 加 密 密 钥 中 计 算 岀 来 。
虽 然 可 能 有 人 认 为 这 是 一 个 简 单 想 法 ,但 是 将 两 种 密 钥 分 开 产 生 了 意 义 深 远 的 结 果。
现 在 每 一 个 人 只 需 要 建 立 一 对 密 钥 : 一 个 加 密 密 钥 和 一 个 解 密 密 钥 D 。各 人 保 守 自 己 的
D 的 秘 密 而 公 开 E。如 果 乙 想 给 甲 发 一 条 报 文 ,乙 要 在 公 共 的 密 钥 簿 上 找 到 甲 的 E,用
它 加 密 报 文 ,然 后 发 送 给 甲 。甲 是 唯 一 知 道 自 己 的 D 的 人 ,所 以 只 有 他 能 够 解 密 这 段
报 文。
某 些 公 钥 密 码 系 统 还 可 以 用 于 数 字 签 名 ( digital signature )。如 果 一 个 人 在 发 送 报 文
之 前 对 它 运 用 他 的 保 密 的 解 密 算 法 ,则 任 何 人 能 够 运 用 他 的 公 开 的 加 密 算 法 验 证 报 文 确 实
是 他 发 的 。于 是 ,他 有 效 地 “签 署 ” 了 那 段 报 文 。这 种 应 用 要 求 可 以 以 任 何 顺 序 运 用 加 密
算 法 和 解 密 算 法 ,RSA 密 码 系 统 就 是 这 样 的 。

10.6 . 3 单向函数
单 向 函 数 和 天 窗 函 数 是 现 代 密 码 学 理 论 的 基 础 。用 复 杂 性 理 论 作 为 密 码 学 基 础 的 一 个
优 点 是 ,它 有 助 于 在 我 们 辩 论 安 全 性 时 提 供 一 个 共 同 的 假 设 平 台 。 在 存 在 单 向 函 数 的 假 设
下 ,能 够 构 造 出 安 全 的 私 钥 密 码 系 统 。在 存 在 天 窗 函 数 的 假 设 下 ,能 够 构 造 岀 公 钥 密 码 系
统 。这 两 个 假 设 还 有 一 些 其 他 的 理 论 和 应 用 的 结 果 。 在 做 一 些 准 备 后 我 们 将 定 义 这 两 种
函 数。
如果对每一个 XV , IV 和 /( w ) 的 长 度 相 等 ,则 称 函 数 2 * 是 保 长 的 ( length -


preserving ) 0 如 果 保 长 函 数 不 会 把 两 个 不 同 的 字 符 串 映 射 到 同 一 个 字 符 串 ,即 当:r 关 y 时 ,
, 则 称 它 是 一 个 置 换 ( permutation) o

回 忆 一 下 1 0.2 节 给 出 的 概 率 图 灵 机 的 定 义 。假 定 概 率 图 灵 机 M 计 算 概 率 函 数 H
X* 这 里 对 每 一 个 输 人 w 和 输 岀 x ,令
276 第三部分复杂性理论

~
Pr[M( xt» ) = x]
为 M 从输入如开始停机在接受状态且停机时带的内容为:T 的概率 。注意 ,M 对输入 w 有
时可能不接受 ,故
Pr[M( itO = 工]< 1

下面定义单向函数 。粗略地说 ,一个函数是单向的是指它是单向容易计算的 ,但反过


来几乎总是困难的 。在下面的定义中 ,/ 表示容易计算的单向函数 ,M 表示企图反演 / 的
多项式时间概率算法 。单向置换是一种较简单的单向函数 。因此下面先定义单向置换 ,再
定义单向函数 。
teiKlltllKfeli 单 向 置 换 ( one- way permutation ) 是 具 有 下 述 两 条 性 质 的 置 换 /:
1. / 是 多 项 式 时 间 可 计 算 的 。
2. 对 于 每 一 台 多 项 式 时 间 概 率 图 灵 机 M、 每 一 个 々 和 充 分 大 的 n ,如 果 取 长 度 为 n 的
随 机 串 w 并 且 对 输 入 /( w ) 运 行 M,则

^
PrM, w [M( /XTXO ) = w] rTk
这里 PWA 表示概率是在 M 所做的随机选择和 w 的随机选取上取到的 。
单 向 函 数 (one- way function ) 是 具 有 下 述 两 条 性 质 的 保 长 函 数 /:
1. / 是 多 项 式 时 间 可 计 算 的 。
2. 对 于 每 一 台 多 项 式 时 间 概 率 图 灵 机 M、每 一 个 6 和 充 分 大 的 如果取长度为 n 的
随 机 串 w 并 且 对 输 入 /( w ) 运 行 M,则
)) = :

^
PrM ,w[M( /( i£; y,其中 f ( y ) = /( w )] n ~ k

对于单向置换 ,任何多项式时间概率算法只能以很小的概率反演 /,即不大可能从


/(如计算出 w。对于单向函数 ,任何多项式时间概率算法不大可能找到一个映射到 /( w )
的h
(HEm 乘法函数 〖 可能是一个单向函数 。设 2= { o ,
i }。对 于 任 意 的 ,
令 mult( w ) 是表示的前一半与后一半乘积的字符串 。 形式地表示为 :
mult ( zv ) = • VU 2
其中 ==Wi W 2 且当|w|为偶数时 ,|1 1|=|x 2|;当|w|为奇数时,|Wi I =|奶 I + 1。XV\
^ ^
ZU 9

和奶作为二进制数处理 。在 mult( w ) 的前面添加 0 使得它与加一样长 。 尽管人们对整


数因子分解问题做了大量研究 ,但还不知道有多项式时间概率算法能够反演即使对
于输入的多项式分之一也不知道这样的算法 。 *
如果假设存在单向函数 ,则可以构造出安全性可证明的私钥密码系统 。在这里给出这
个构造太复杂了。作为一种替代 ,我们说明如何使用单向函数实现密码的另一种应用。
安全性可证明的口令系统是单向函数的一个简单应用。 在典型的口令系统中 ,用户必
须键入一个口令才能访问某个资源 。 系统用加密方式保存用户口令数据库 。 给口令加密是
为了当数据库偶然地或故意地不加保护时保护它们 。口令数据库经常是不加保护的 ,使得
各种应用程序能够读它们和验证口令 。当用户键人一条口令后 ,系统先对它加密 ,然后判
断它是否与数据库中存储的形式相匹配 ,这样就能验证它的有效性 。显然 ,我们希望加密
方案是很难反演的 ,使得很难从口令的加密形式得到不加密的口令 。 人们自然会选择单向
函数作为口令加密函数 。
第1 0 章 复 杂 性 理 论 高 级 专 题 277

1 0 . 6. 4 天窗函数
我们不知道如果存在单向函数 ,是否一定能够构造公钥密码系统 。 为了得到这样的系
统 ,要使用天窗函数 ,对于专门的信息它能够有效地反演 。


首先 ,需要讨论给函数族做索引的函数 。设有函数族 { /: },其中 〗6 2 * ,可以用一
个函数 /:2 * X 2 * 2 * 表示它们 ,这里对于每一个 i 和 = /:(!£;
)。称 / 是 一 个
索引函数 。 如果每一个被索引函数 /, 是保长的 ,则说 / 是保长的 。
tejyJUlMFEI
机 G 和一个辅助函数
h 满足下述 3 个条件 :
1. 函数 / 和 /i 是多项式时间可计算的 。
X 2*

天窗函数 ( trapdoor function ) 是带有一台辅助的多项式时间概率图灵
2 * 的保长索引函数 / : 2 * X 2 *

2. 对于每一个多项式时间概率图灵机 、 每一个 k 和充分大的 n ,如果取 G 对 P 的


— 2 * 。 三件套 /、 G 和

随机输出 ( i ,
t ) 和随机串则

= y,
其中 f i i y ) = /;( w ) ] < n
~
k

3. 对于每一个 rz 、每一个长度为 n 的 w 和 G 对任一输入以非零概率输出的每一个 ( i 9 t ) ,


有 /i ( / , :
/, ( w ) ) = y ,这里 f i ( y ) = f i ( u} )
0

概率图灵机 G 生成索引族中一个函数的索引 ,同时生成一个值 ,它使 成为能快速


反演的函数 。 条件 2 说当缺少〖 时 /, 是难反演的 。条件 3 说当已知 〖 时乃是容易反演的 。
iMimk 这里描述一个天窗函数 ,它为众所周知的 RSA 密码系统奠定了基础 。 给
出它的联合三件套 /、G 和 /1 。生成机器 G 按如下方式运作 。 在输人 1” 上 ,它随机地选取
两个大小为〃的数 ,测试它们是否为素数 。如果它们不是素数 ,则重新选取 ,直到成功地
选取两个素数 ,或者达到预先规定的暂定界限 ,并且宣布失效 。找到 f 和 g 以后 ,它计算
N == pq 和 今(n ) = ( p — 。选取 1 〆n ) 之间的一个随机数 6 检查 e 是否与
互素 。如果不是 ,则另取一个数并且重复检查 。然后 ,计算 e 模 0( 77 ) 的乘法逆元 d。这
是可以做到的 。因为 { 1 , …, 〆〃)} 中与〆rO 互素的数在模 0 U ) 乘法运算下构成一个
群 。最后 ,G 输出 ( ( N ,e ) ,
d ) 函数 / 的索引由两个数 iV 和 e 组成。令
0

f i ,e ( w ) =
^ vue mod N
反演函数 A 为
h ( d , x ) = x d mod N
/N ,e( w ))= wedmod N =
因为 /i( <i, 故函数 /i 正好反演 /。 ■

可以使用天窗函数 ,如上述 RSA 天窗函数 ,构造公钥密码系统如下 。公开的密钥是


概率图灵机 G 产生的索引 z 。保密的密钥是对应的值 L 加密算法把报文 m 分成若干大小

不超过 log iV 的块 。对于每一块 its 发送人计算 /,。 所得到的字符串序列将是加密的报


文 。接收人用函数 & 从加密的报文获得原始报文 。

练习
10.1 证 明 :深 度 为 CKlog /0 的 电 路 族 是 多 项 式 规 模 的 电 路 族 。
10.2 证 明 :1 2 不 能 通 过 费 马 测 试 ,从 而 不 是 伪 素 数 。
10.3 证 明 :如 果 A<LB 且 B 在 NC 中 ,则 A 也 在 NC 中 。
10.4 证 明 :有 n 个 输 入 的 奇 偶 函 数 能 用 OU ) 个 顶 点 的 分 支 程 序 计 算 。
278 第三部分复杂性理论

10.5 证明 :有《 个输人的多数函数能用 OU2 ) 个顶点的分支程序计算 。


10.6 证明 : 任何有 n 个输入的函数都能用 0( 2”) 个顶点的分支程序计算 。
A10.7 证明 :BPPGPSPACE 0

问题

10.8 如果 BPL 是概率对数空间图灵机以错误概率


f 判定的语言集合 ,证明 BPLGP。
10.9 如果 , 〉氏 和 是 两 个 等 价 的 分 支 程 序 },证 明 : EQBP 是 coNP 完全的 。
3 2|
10.10 假定 ZPP - 机器 M 是一台概率图灵机 。它的每个分支有三种输出 :接 受 、 拒绝和?。 如果 M 对
每个输入串 w 都输出正确答案 (如果 wGA 则 接 受 ,如 果 则 拒 绝 ) 的概率大于等于 2/3
而且 M 从不回答错误 ,则 M 判定语言 A 。对每个输入 ,M 输出 “?
” 的概率至多为 1/3。更进
一步 ,对输人加,M 所有分支上的平均运行时间一定限定在输人串 w 长度的多项式时间 。 令

-
ZPP 是 ZPP 机器识别语言的集合 。 证明 RPHC0 RP = ZPP。
10.11 证明 :如果 NPGBPP,| 贝JNP = RP。
10.12 证明 :如果 A 是一个正则语言 ,则存在分支程序族 (氏 , 52 ,…),使得每一个艮恰好接受 A
中长度为〃的所有字符串 ,且规模不超过〃的常数倍 。
10. 13 证明 :如果 A 是 L 中 的 一 个 语 言 ,则 存 在 分 支 程 序 族 …),使 得 每 一 个 艮 恰 好 接 受
A 中长度为《 的所有字符串 ,且规模不超过〃的多项式 。
AM 0. 14 证明 :对于任意的整数 />>1 ,如果 /> 不是伪素数 ,则 /> 至少对中的一半的数不能通过费
马测试 。
10.15 回忆一下 ,NP& T 是以可满足性问题作谕示的非确定型多项式时间图灵机识别的语言类 。证
明 :NPSAT = 22 PO
10. 16 证明费马小定理 ,即定理 10.6 。(提示 :考虑序列 a2 ,
… 。一定发生什么? 如何发生?)
10.17 证明 :如果 PH = PSPACE,则多项式时间层次只有有限个不同的层次 。
10.18 证明 :如果 P = NP ,则尸= 尸只。
10.19 设 M 是一台多项式时间概率图灵机 ,语言 C 满足下述条件 :对于某个固定的 0< 1 < 2 <1 ,
蕴涵 Pr[M 接受切] <ei 。
b. >
C 蕴涵 Pr[M 接受 w ] e 2 。
证明 :C6 BPP。(提示 :利用引理 10.5。

10. 20 CNFH = {〈 pk 是一个可满足的 cnf 公式 ,其中每个子句包含任意多个文字 ,但最多只有


一个非的文字 h 问题 7.52 要求证明( ]\/1 6 ?。请给出从 CIRa/JT- VALLTE 到 CiVFH 的对

*
数空间归约 ,从而得到 CiVFH 是 P - 完全的结论。

义语言类 ^
10.21 /c 头下推自动机 (tPDA ) 是具有々个双向只读输人头和一个读写栈的确定型下推自动机 。定

PDAk = { A|A 被 一 台 I PDA 识 别 }


证明 :P = LUPDA ( 提示 :回忆一下 ,P 等于交错式对数空间可识别的语言类 。

* 10.22
^
布尔公式是一个布尔电路 ,其中每一个门只有一条输出线 ,同一个输入变量可以在布尔公式
的多处出现 。证明 :一个语言具有多项式规模的公式族当且仅当它在 NC1 中 。这里不考虑一
致性 。
10.23 设 A 是 { 0 ,1 } 上的正则语言 。证明 A 的规模 - 深度复杂度为 (0 ( 7i ),
0( bg « ))。

习题选解
10.7 如果 M 是一个运行于多项式时间的概率图灵机 ,对某个常数 r 我们对 M 进行修改 ,使得它只
次抛硬币试验 。于是 ,判定 M 接受输入串的概率的问题转化

^
能在每一计算分支上恰好进行

10.14 如 果 一 个 数 a 对 不 能 通 过 费 马 测 试 ,即 V1 吴 l ( mod 户),则 称 a 为一个见证 。 令 Z
U, …,

中 ,所 以 ( di — 〈d2
(

a 和 户 是 互 素 数 。因 此 ,;
中 一 半 的 成 员 是 见 证。

^
一 半 的 成 员 是 见 证。
)
^ ^
_
第1 0 章 复 杂 性 理 论 高 级 专 题

为 计 算 有 多 少 个 接 受 分 支 ,并 把 计 算 结 果 与 进 行 比 较 。这 种 计 算 消 耗 多 项 式 空 间 。

/> 一 1 } 中 所 有 与 互 素 的 数 。如 果 P 不 是 伪 素 数 ,它 在 中 有 一 个 见 证 a 。
使 用 可 以 得 到 很 多 的 见 证 。对 每 一 个 非 见 证 ,在 Z p* 中 找 到 一 个 独 特 的 见 证。如 果

否则 ,
a
是 一 个 非 见 证 ,能 够 得 到 A - i 三 1 ( mod /0 。因 此 ,
da mod /? 是 一 个 见 证 。如 果 A 和 山 是;
279

;表 示

mod /> )〃 1 1( mod /0 ,因 此 ,


Z 中 两 个 不 同 的 非 见 证 ,则 A a m o d a mod />。
(A — c/2 )a 0 mod /> ),故 而 对 有 些 整 数 f ,

^、
( A — 4 ) = 0。但 是 因 为 A 和 山 在 Z : ;
p ,因 此 a = c/ /( c i — 山) 且 户 有 大 于 1 的 公 因 子 。 这 导 出 了 矛 盾 ,因 为
Z 中 的 见 证 个 数 一 定 和 Z/ 中 的 非 见 证 个 数 一 样 多 ,故 而 至 少 Z

下 面 证 明 Zp .中每个不与 p 互 素 的 成 员 6 都 是 见 证。如 果 6 和 p 有 公 因 子 ,那 么 ,对 任 意 的
>0 , 有 炉 和 p 都 含 有 该 公 因 子 。闵 此 , -
^ ^ Kmod p ) 所 以 ,我 们 得 出 结 论 ,至 少 Z p 中
0


参 考 文 献

1. ADLEMAN , L. TWO theorems on random polynomial time. In Proceedings


of the Nineteenth IEEE Symposium on Foundations of Computer Science (1978),
75-83.
2 . ADLEMAN , L. M., AND HUANG , M. A. Recognizing primes in random
polynomial time. In Proceedings of the Nineteenth Annual ACM Symposium on
the Theory of Computing (1987), 462-469.
3. ADLEMAN, L. M., POMERANCE, C., AND RUMELY, R. S. On distinguish-
ing prime numbers from composite numbers. Annals of Mathematics 117
- .
(1983), 173 206
4. AGRAWAL, M., KAYAL , N., AND SAXENA, N. PRIMES is in P. The Annals
of Mathematics, Second Series, vol. 160, no. 2 (2004), 781-793.
5. AHO, A. V, HOPCROFT, J. E., AND ULLMAN , J . D. Data Structures and
Algorithms. Addison-Wesley, 1982.
6. AHO, A. V., SETHI, R., AND ULLMAN, J . D. Compilers: Principles、 Tech-
niques, Tools. Addison-Wesley, 1986.
7. AKL, S. G. The Design and Analysis of Parallel Algorithms. Prentice-Hall
International, 1989.
8. ALON , N., ERDOS, P., AND SPENCER , J . H. The Probabilistic Method. John
Wiley & Sons, 1992.
9. ANGLUIN , D., AND VALIANT, L. G. Fast probabilistic algorithms for
Hamiltonian circuits and matchings. Journal of Computer and System Sciences
7 X (1979),155-193.
10. ARORA, S., LUND, C.,MOTWANI , R., SUDAN , M AND SZEGEDY, M.

Proof verification and hardness of approximation problems . In Proceedings
of the Thirty-third IEEE Symposium on Foundations of Computer Science (1992 ),
14-23.
11. BAASE, S. Computer Algorithms: Introdmtion to Design and Analysis. Addison-
Wesley, 1978.
12. BABAI, L. E- mail and the unexpected power of interaction. In Proceedings of
the Fifth Annual Conference on Structure in Complexity Theory (1990), 30-44.
13. BACH , E., AND SHALLIT, J . Algorithmic Number Tbeo? y、Vol. 1 • MIT Press,
1996 .
14 BALCAZAR , J. L., DIAZ, J., AND GABARRO, J . Structural Complexity /, II.
.
EATCS Monographs on Theoretical Computer Science. Springer Verlag,
1988 (I) and 1990 ( II ).
15. BEAME, P. W., COOK, S. A., AND HOOVER, H. J. Log depth circuits for
division and related problems. SIAM Journal on Computing 75, 4 (1986),
99 -1003.
^
16. BLUM , M., CHANDRA, A., AND WEGMAN , M. Equivalence of free boolean
graphs can be decided probabilistically in polynomial time. Information Pro-
cessing Letters 10 (1980), 80-82.
17 . BRASSARD , G., AND BRATLEY, P. Algo?ithmics: Theory and Practice . Pren-
tice-Hall, 1988.
18. CARMICHAEL, R. D. On composite numbers p which satisfy the Fermat
congruence a - i 三 P mod P . American Mathematical Monthly 19 (1912 ),
p

22-27.
参 考 文 献 281

19. CHOMSKY, N. Three models for the description of language. IRE Trans. on
Information Theory 2 (1956), 113-124.
20. COB HAM, A. The intrinsic computational difficulty of functions. In Pro-
ceedings of the International Congress for Logic, Methodology, and Philosophy of
-
Science , Y. Bar-Hillel, Ed., North-Holland , 1964, 24 30.
21. COOK , S. A. The complexity of theorem-proving procedures. In Proceedings
of the Third Annual ACM Symposium on the Theory of Computing (1971), 151-
158.
22. CORMEN , T., LEISERSON , C., AND RlVEST, R. Introduction to Algorithms.
MIT Press, 1989.
23. EDMONDS, J . Paths, trees, and flowers. Canadian Journal of Mathematics 17
( 1965), 449-467.
24. ENDERTON, H. B. A Mathematical Introduction to Logic. Academic Press,
1972 .
25. EVEN, S. Graph Algorithms. Pitman, 1979.
26. FELLER , W. An Introduction to Probability Theory and Its Applicatio?is, Vol. 1 .
John Wiley & Sons, 1970.
27. FEYNMAN , R. P., HEY, A. J. G., AND ALLEN , R. W. Feynman lectures on
computation. Addison-Wesley, 1996.
28. GAREY, M. R., AND JOHNSON , D. S. Computers and Intractability―A Guide
to the Theory of NP-completeness. W. H. Freeman, 1979.
29. GILL, J . T. Computational complexity of probabilistic Turing machines.
SIAM Journal on Computing 6 , 4 (1977), 675-695.
30. GOD EL, K. On formally undecidable propositions in Principia Mathematica
and related systems I. In The Undecidable , M. Davis, Ed ., Raven Press, 1965,
4-38.
31. GOEMANS, M. X., AND WILLIAMSON , D. P. .878-approximation algo-
rithms for MAX CUT and MAX 2 SAT. In Proceedings of the Twenty-sixth
Annual ACM Symposium on the Theory of Computing (1994), 422-431.
32. GOLDWASSER , S., AND MlCALI , S. Probabilistic encryption. Journal of
Computer and System Sciences (1984), 270-299.
33. GOLDWASSER , S., MlCALI, S., AND RACKOFF, C. The knowledge com -
plexity of interactive proof-systems. SIAM Journal on Computing (1989),
186-208.
34. GREENLAW, R., HOOVER , H. J., AND RUZZO, W. L. Limits to Parallel
Computation: P-completeness Theory . Oxford University Press, 1995.
35. HARARY, F. Graph Theory ^ 2 d ed. Addison-Wesley, 1971.
36. HARTMANIS, J ., AND STEARNS, R. E. On the computational complexity
of algorithms. Transactions of the American Mathematical Society 117 (1965 ),
285-306.
37. HILBERT, D. Mathematical problems. Lecture delivered before the In -
ternational Congress of Mathematicians at Paris in 1900. In Mathematical
Developments Arising from Hilbert Problems , vol. 28. American Mathematical
Society, 1976,1-34.
38. HOFSTADTER , D. R. Goedel,Escher、 Bach: An Eternal Golden Braid. Basic
Books,1979.
39. HOPCROFT, J . E., AND ULLMAN , J . D. Introduction to Automata Theory,
Languages and Computation. Addison-Wesley, 1979.
40. IMMERMAN , N. Nondeterminstic space is closed under complement. SIAM
Journal on Computing 17 (1988), 935-938.
41. JOHNSON, D. S. The NP-completeness column:Interactive proof systems
for fun and profit. Journal of Algorithms 9 , 3 (1988), 426-44 ^1.
282 参 考 文 献

42. KARP, R. M. Reducibility among combinatorial problems. In Complexity


of Computer Computations (1972 ), R. E. Miller and J . W. Thatcher, Eds.,
Plenum Press, 85-103.
43. KARP, R. M., AND LIPTON, R. J . Turing machines that take advice. EN -
SEIGN: LEnseignement Mathematique Revue Internationale 28 (1982 ).
44. KNUTH, D. E. On the translation of languages from left to right. Informa-
tion and Control (1965), 607-639.
45. LAWLER , E. L. Combinatorial Optimization: Networks and Matroids. Holt ,
Rinehart and Winston, 1991.
46. LAWLER , E. L., LENSTRA, J . K., RINOOY KAN , A. H. G., AND SHMOYS ,
D. B. The Traveling Salesman Problem. John Wiley & Sons, 1985.
47. LEIGHTON, F. T. Introduction to Parallel Algorithms and Architectures: Array,
Trees,Hypercubes. Morgan Kaufmann, 1991.
48. LEVIN, L. Universal search problems (in Russian). Problemy Peredachi Infor-
matsii 9, 3 (1973), 115-116.
49. LEWIS, H., AND PAPADIMITRIOU , C. Elements of the Theory of Computation.
Prentice-Hall, 1981.
50. Li , M AND VlTANYI, P. Introduction to Kolmogorov Complexity and its Appli-
cations”. Springer-Verlag, 1993.
51. LICHTENSTEIN , D., AND SIPSER, M. GO is PSPACE hard. Journal of the
CM (1980), 393-401.
^
52. LUBY, M. Psendorandomness and C? yptographic Applications. Princeton Uni -
versity Press, 1996.
53. LUND, C., FORTNOW, L., KARLOFF, H., AND NISAN , N. Algebraic meth-
ods for interactive proof systems. Journal of the ACM 39 ^ 4 (1992 ), 859-868.
54. MILLER , G. L. Riemann’s hypothesis and tests for primality. Journal of
Computer and System Sciences 13 (1976), 300-317.
55. NlVEN, I., AND ZUCKERMAN , H. S. An Introduction to the Theory of Num-
bers, 4th ed. John Wiley & Sons, 1980.
56. PAPADIMITRIOU , C. H. Computational Complexity. Addison-Wesley, 1994.
57. PAPADIMITRIOU, C. H., AND STEIGLITZ, K. Combinatorial Optimization
(Algorithmsand Complexity). Prentice-Hall, 1982.
58. PAPADIMITRIOU , C. H., AND YANNAKAKIS, M. Optimization , approxi -
mation, and complexity classes. Journal of Computer and System Sciences 43^ 3
(1991), 425-440.
59. POMERANCE, C. On the distribution of pseudoprimes. Mathematics of Com-
putation 37 , 156 (1981), 587-593.
60. PRATT, V. R. Every prime has a succinct certificate. SIAM Journal on Com-
puting 4 , 3 (1975), 214-220.
61. RABIN, M. O. Probabilistic algorithms. In Algorithms and Complexity: New
Directions and Recent Results, ] . F. Traub, Ed Academic Press (1976) 21-39.

62. REINGOLD, O. Undirected st-connectivity in log-space. Journal of the ACM
55, 4 (2008), 1-24.
63. RIVEST, R. L., SHAMIR, A., AND ADLEMAN , L. A method for obtaining
digital signatures and public key cryptosystems. Communications of the ACM
21, 2 (1978), 120-126.
64. ROCHE, E., AND SCHABES, Y. Finite-State Language Processing. MIT Press,
1997.
65. SCHAEFER , T. J . On the complexity of some two-person perfect-infor-
mation games. Journal of Computer and System Sciences 16 , 2 (1978), 185-225.
66 SEDGEWICK , R. Algorithms^ 2 d ed. Addison-Wesley, 1989.
.
参 考 文 献 283

67. SHAMIR , A. IP = PSPACE. Journal of the ACM 39


^ (1992), 869-877.
68. SHEN, A. IP = PSPACE: Simplified proof. Journal of the ACM 39 4 (1992 ),
f

878-880.
-
69. SHOR , P. W. Polynomial time algorithms for prime factorization and dis-
crete logarithms on a quantum computer. SIAM Journal on Computing 26 ,
(1997), 1484-1509.
70. SlPSER , M. Lower bounds on the size of sweeping automata. Journal of
Computer and Syste?n Sciences 27 ,2 (1980), 195-202.
71. SlPSER , M . The history and status of the P versus NP question . In Proceed-
ings of the Twenty-fourth Annual ACM Symposium on the Theory of Computing
(1992 ), 603-618.
72. STINSON , D. R. Cryptography: Theory and Practice. CRC Press, 1995.
73. SZELEPCZENYI, R. The method of forced enumeration for nondetermin -
istic automata , Acta lnformatica 26 y (1988), 279-284.
74. TARJAN, R. E. Data structures and network algorithms, vol. 44 of CBMS- NSF
Regional Conference Series in Applied Mathematics,SIAM, 1983.
75. TURING, A. M. On computable numbers, with an application to the
Entscheidungsproblem. In Proceedings, London Mathematical Society, (1936),
230-265.
76. ULLMANj. D., AHO, A. V., AND HOPCROFT, J. E. The Design and Analysis
of Computer Algorithms. Addison-Wesley, 1974.
77. VAN LEEUWEN, J., Ed. Handbook of Theoretical Computer Science A: Algo-
rithms and Complexity. Elsevier, 1990.
索 引

N natural numbers ( 自然数 ),0.2.1 ,6.2.1 Th( M ) theory of model ( 模型的理论),6.2


«

R real numbers ( 实数 ),4.2.1 K(x) descriptive complexity ( 描述复杂性 ),6.4.1


R* nonegative real numbers ( 非负实数),7.1.1 V universal quantifier ( 全称量词),8.3.1
0 empty set ( 空集 ),0.2.1 彐 existential quantifier ( 存在量词),8.3.1
G element ( 元素 ),0.2.1 个 exponentiation ( 指数 ),9.1
$ not element ( 非元素),0.2.1 0(/(
”)) big- O notation ( 大 O 记号),7.1.1
subset ( 子集 ),0.2.1 small- o notation (小 o 记号 ),7.1.1

^
o(/( n))
proper subset ( 真子集),0.2.1 A
U union operation ( 并运算),0.2.1 ,1.1.5 Accept state ( 接受状态),1.1 ,1.1.1
0 intersection operation ( 交运算),0.2.1 Acceptance problem ( 接受问题 )

X Cartesian or cross product (笛卡儿积或叉 for CFG ( 上下文无关文法 ),4.1.2


积),0.2.2 for DFA ( 确定有限自动机),4.1.1
empty string ( 空串),0.2.5 for LBA ( 线性有界自动机),5.1
w^ reverse of u> ( w 的反转 ),0.2.5 for NFA ( 非确定有限自动机 ),4.1.1
~I negation operation ( 非运算 ),0.2.6 for TM ( 图灵机 ),4.2
A conjunction operation ( 合取运算),0.2.6 Accepting computation history ( 接受计算历史),5.1
V disjunction operation ( 析取运算 ),0.2.6 Accepting configuration ( 接受格局),3.1.1
exclusive OR operation ( 异或运算 ),0.2.6 Accepts a language ,meaning of ( 意 味 着 接 受 一 个
implication .2.6
operation ( 蕴涵运算 ),0 语言),1.1.1

equality operation ( 等值运算 ),0.2.6 ACFG ( CFG 接受的语言),4.1.2
reverse implication ( 反蕴涵),0.3 Acyclic graph ( 无环图 ),10.2.3
=> implication 蕴涵), 3
( 0. ADFA ( DFA 接受的语言),4.1.1
㈡ logical equivalence ( 逻辑等价),0.3 Adjacency matrix ( 相邻矩阵 ),7.2.2
concatenation operation ( 连接运算 ),1.1 .5 Adleman , Leonard M. ( 人名),参考文献
star operation ( 星号运算 ),1.1 .5 Agrawal,Manindra ( 人名 ),参考文献
plus operation ( 加运算 ),1.3.1 Aho , Alfred V. ( 人名),参考文献
V ( Q ) power set ( 幂集 ),1.2.1 Akl,Selim G. ( 人名),参考文献
2 alphabet ( 字母表),1.2.1 ALBA ( LBA 接受的语言),5.1
2 U ( e } ( 带空串的字母表),1.2.1 Algorithm ( 算法 )
〈 • > encoding ( 编码),3.3.2 ,7.2.2 complexity analysis ( 复杂性分析),7.1.1,7.1.2
U blank ( 空白),3 1 1.. decidability and undecidability ( 可 判 定 性 和 不 可
mapping reduction ( 映射归约),5.3.2 判定性 ),第 4 章
Turing reduction ( 图灵归约),6.3 defined ( 定义),3.3
log space reduction ( 对数空间归约),8.5 describing ( 描述),3.3.2
polynomial time reduction (多项式时间归 Euclidean ( 欧几里得 ),7.2.2
约),7.4.1 polynomial time ( 多项式时间),7.2.1
d ( x ) minimal description ( 极小描述),6.4.1 running time (运行时间),7.1
# 引 285

ALLCFG 5. 1 Binary operation ( 二元运算 ),1. 1. 5


Allen , Robin W. ( 人名),参考文献 Binary relation ( 二元关系 ),0. 2. 3
Alon , Noga ( 人名),参考文献 Bipartite graph ( 二部图),问题 8. 14
Alphabet * defined ( 字母表),0.2. 5 Blank symbol U ( 空白符号),3.1. 1
Alternating Turing machine ( 交错式图灵机),10. 3 Blum , Manuel ( 人名),参考文献
Alternation ( 交互式),10.3 Boolean circuit ( 布尔电路),9.3
Ambiguity ( 歧义性 ),2.1. 4 depth ( 深度),10 5.1 .
Ambiguous ( 歧义的 ) gate (门),9 3 .
NFA ( 非确定型有穷自动机),问题 4. 19 size ( 规模 ),10. 5. 1
grammar ( 文法 ),2.1.4 ,问题 5. 9 uniform family ( 一致族),10. 5. 1
Amplification lemma ( 加强引理),10. 2. 1 wire ( 导线),9. 3
AND operation ( AND 运算),0.2. 6 Boolean formula ( 布尔公式 ),7.4 , 8.3 .1
ANFA ( NFA 接受的语言),4.1 1 . minimal (极小的),问题 7. 21 , 9. 2, 10.3.1,10.3. 2
Angluin ,Dana ( 人名 ),参考文献 quantified ( 量词化的),8.3. 1
Anti- clique (反团),问题 0. 15 Boolean logic ( 布尔逻辑 ),0.2. 6
Approximation algorithm ( 近似算法 ),10. 1 Boolean matrix multiplication ( 布尔矩阵乘法),10. 5. 1
AREX ( 正则文法接受的语言),4.1. 1 Boolean operation (布尔运算),0.2.6 ,6.2,7.4
Argument ( 自变量 ),0.2. 3 Boolean variable (布尔变量),7. 4
Arithmetization ( 算术化 ),10.4. 3 Bound variable ( 约束变量),8. 3. 1
Arity ( 元数),0.2.3 ,6. 2 Branching program ( 分支程序),10. 2. 3
Arora ,Sanjeev ( 人名),参考文献 read- once ( 只读一次的),10.2. 3
ASPACE ( /( TO ) ( 交错式空间复杂性 ),10.3 .1 Brassard , Gilles ( 人名),参考文献
Asymptotic analysis ( 渐近分析),7. 1. 1 Bratley ,Paul ( 人名),参考文献
Asymptotic notation ( 渐近记法 ) Breadth- first search (宽度优先搜索),7.1. 3
big- O notation ( 大 O 记号),7.1. 1 Brute- force search ( 蛮 力 搜 索 ),7. 2. 1 , 7. 2. 2 ,

small- o notation ( /J o i己号),7. 1. 1 7.3, 7.3. 2
Asymptotic upper bound ( 渐近上界 ),7.1. 1 C
ATIMECK ^ ) ) ( 交互式时间复杂性 ),10.3 .1 Cantor , Georg ( 康托 ),4.2. 1
ATM ( TM 接受的语言),4.2 Carmichael number ( 卡米切尔数),10.2. 2
Atomic formula ( 原子公式 ),6.2 Carmichael , R. D. ( 人名),参考文献
Automata theory ( 自动机理论),0.1. 3 Cartesian product ( 笛卡儿积),0.2.2 ,1.1. 5
Context- free language ( 上下文无关语言),2. CD- ROM , 8.4
Regular language ( 正则语言),2.1 Certificate ( 证书),7 3 .
Average- case analysis ( 平均情况分析),7.1 CFG (上下文无关文法),参见 Context- free grammar
B CFL ( 上下文无关语言),参见 Context- free language
Baase , Sara ( 人名),参考文献 Chaitin , Gregory J. ( 伽廷 ),6.4. 1
Babai ,Laszlo ( 人名 ),参考文献 Chandra , Ashok ( 人名),参考文献
Bach , Eric ( 人名),参考文献 Characteristic sequence ( 特征序列),4.2. 1
Balcazar , Josee Luis ( 人名),参考文献 Checkers , game of ( 跳棋 ,一'种游戏),8.3. 3
Basis of induction ( 归纳基础 ),0.4. 3 Chernoff bound ( 切诺夫界限),10.2 1 .
Beame , Paul W. ( 人名),参考文献 Chess , game of ( 国际象棋),8.3. 3
Big- O notation ( 大 O 记号),7.1. 1 Chinese remainder theorem (中国剩余定理),10. 2. 2
Bijective function ( 双射函数),4.2. 1 Chomsky normal form ( 乔 姆 斯 基 范 式 ),2. 1.5 ,
Binary function ( 二元函数),0.2. 3 问 题 2. 38 ,4. 1. 2 , 7. 2. 2
286 t 引

Church , Alonzo ( 丘奇 ),0.1. 2 ,3.3. 1 ,6.2. 1 Coin- flip step ( 掷硬币步),10.2 1 .


Church- Turing thesis (丘奇
CIRCUIT- SAT 9 9.3
- .
图灵论题),3.3.1,7.1 2 Complement operation ( 补运算 ),0.2. 1
Completed rule ( 完整规则),2. 4. 2
Circuit- satisfiability problem (电路满足性问题),9. 3 Complexity class ( 复杂性类 )
CIRCUIT- VALUE f .
10.5 3 ASPACE ( / ( n ) ) ,10.3. 1
Circular definition ( 循环定义),1.3. 1 ATIME ( Kw ) ) ,10.3 1 .
Clause ( 子句),7.4. 1 BPP , 10. 2. 1
Clique (团),问题 0. 15 ,7. 3. 1 coNL , 8. 6
CLIQUE ,7.3. 1 coNP , 7. 3. 1
Closed under ( 在 下封闭 ),1. 1. 5 EXPSPACE , 9. 1
Closure under complementation ( 在补运算下封闭), EXPTIME , 8.2
context- free language , non- ( ( 非 ) 上 下 文 无 关 IP , 10. 4. 2
文法),练习 2.2 L , 8. 4
deterministic context- free languages ( 确定型上下 NC , 10. 5. 2
文无关语言),2.4. 1 NL , 8.4
P,练习 7.6 NP ,7. 3
regular language ( 正则语言),练习 1.14 NPSPACE,8.2
Closure under concatenation ( 在连接运算下封闭) NSPACE ( / ( W ) ) , 8.2
context- free language ( 上下文无关语言 ),练 NTIME ( /( rz ) ) , 7.3
习 2. 23 P , 7.2 , 7.3. 2
NP , 练习 7. 7 PH , 10.3. 2
P , 练习 7.6 PSPACE , 8.2
regular language ( 正则语言),1.1.5 ,1.2. 3 RP , 10.2. 2
Closure under intersection ( 在交运算下封闭 ) SPACE ( / ( n ) ) , 8.2
context- free language , non- ( ( 非 ) 上 下 文 无 关 TIMEC / U ) ) ,7.1. 2
文法),练习 2.2 ZPP,问题 10.10
regular language ( 正则语言),1. 1. 5 Complexity theory ( 复杂性理论 ),0.1. 1
Closure under star ( 在星号运算下封闭 ) Composite number ( 合数 ),7.3 ,10.2. 2
context- free language ( 上 下 文 无 关 语 言 ),练 Compositeness witness ( 合数性见证),10. 2. 2
习 2. 23 COMPOSITES , 7. 3
NP , 练习 7.43 Compressible string ( 可压缩串),6.4. 3
P , 练习 7. 42 Computability theory ( 可计算性理论),0. 1. 2
regular language ( 正则语言),1. 2. 3 decidability and undecidability ( 可 判 定 性 和 不 可
Closure under union ( 在并运算下封闭) 判定性 ),第 4 章
context- free language ( 上 下 文 无 关 语 言 ),练 recursion theorem ( 递归定理 ),6.1
习 2. 23 reducibility ( 可归约性 ),第 5 章
NP , 练习 7.7 Turing machine ( 图灵机),第 3 章
P , 练习 7. 6 Computable function ( 可计算函数),5. 3. 1
regular language ( 正则语言),1.1.5 ,1.2. 3 Computation history ( 计算历史 )
CNF- formula ( CNF 范式),7. 4.1 context- free language ( 上下文无关语言),5.1
Co- Turing- recognizable language (补图灵可识别语 defined ( 定义),5.1
言),4.2. 3 linear bounded automata ( 线性界限自动机),5. 1
Conham ,Alan ( 人名),参考文献 Post Correspondence Problem (波斯特对应问

Coefficient ( 系数),3.3 .1 题 ),5.2


索 引 287

reducibility ( 可归约性 ),5. 1 ,5. 3 of AREX 4. 1. 1


Computational model ( 计算模型 ),第 1 章 of ECFG ,4. 1 . 2
Computer virus ( 计算机病毒 ),6.1. 3 of EQDFA » 4. 1. 1
Concatenation of strings ( 字符串连接),0 2 5 .. regular language ( 正则语言),4. 1
Concatenation operation ( 连接运算),1. 1.5 ,1.2. 3 Decidable language ( 可判定语言),3.1 .1
Configuration ( 格局 ),3.1. 1, 8.4 Decider ( 判定器 )
Conjunction operation ( 合取运算 ),0. 2. 6 deterministic ( 确定型 ),3.1. 1
Conjunctive normal form ( 合取范式 ),7. 4. 1 nondeterministic ( 非确定型 ),3.2 .2
coNL , 8. 6 Decision problem ( 判定问题 ),10. 1
Connected graph ( 连通图),0.2 .4 ,3.3. 2 Definition ( 定义),0.3
coNP , 7. 3. 1 Degree of a node ( 顶点的度),0.2. 4
Context- free grammar ( 上下文无关文法) DeMorgan ’s laws , example of proof ( 德 .摩根律 ,
ambiguous ( 歧义的 ),2.1.4 ,问题 5. 9 证明示例),0.3
defined ( 定义 ),2.1 .1 Depth complexity ( 深度复杂性 ),10 . 5. 1
Context- free language ( 上下文无关语言) Derivation ( 派生),2.1
decidability ( 可判定性 ),4.1. 2 leftmost ( 最左派生 ),2.1 .4
defined ( 定义 ),2 . 1. 1 Derives ( 派生),2. 1 1 .
deterministic ( 确定型 ),2.4 Descriptive complexity ( 描述复杂性 ),6 . 4. 1
efficient decidability ( 有效可判定性 ),7.2. 2 Deterministic computation ( 确定型计算 ),1.2

inherently ambiguous ( 固有歧义的),2.1. 4 Deterministic context- free grammar ( 确定型上下文


pumping lemma ( 泵引理),2. 3 无关文法 ),2.4. 2
Cook , Stephen A. ( 库克 ),7.4 , 9.3 ,10.5.2 , Deterministic context- free language ( 确定型上下文
参考文献 无关语言)
Cook- Levin theorem (库克 - 列文定理 ),7. 4. 3 ,第 8 defined ( 定义 ),2. 4

章 ,第 9 章 properties ( 性质),2.4. 1
Cormen ,Thomas ( 人名 ),参考文献 Deterministic finite automation ( 确定型有穷自动机)
Corollary ( 推论 ),0.3 acceptance problem ( 接受问题),4 1 1 ..
Correspondence ( 对应 ),4.2. 1 defined ( 定义 ),1.1. 1

Countable set ( 可数集 ),4.2. 1 emptiness testing ( 空性质测试),4. 1. 1


Counterexample ( 反例),0. 3 minimization ( 极小化),问题 7. 25
Counting problem ( 计数问题),10 4. 3 . Deterministic pushdown automaton ( 确 定 型 下 推 自
Cross product . 2. 2
( 叉积),0 动机),2.4
Cryptograph ( 密码学),10. 6 defined ( 定义 ),2.4

Cut edge ( 割边 ),10. 1 DFA ( 确 定 型 有 穷 自 动 机 ),参 见 Deterministic


Cut , in a graph ( 图中的割 ),问题 7.54 , 10.1 finite automaton
Cycle ( 圈 ),0. 2. 4 Diagonalization method ( 对角化方法 ),4.2. 1
D Diaz,Josep ( 人名),参考文献
Davis , Martin ( 马丁 • 戴维斯 ),3.3. 1 Difference hierarchy ( 差层次),问题 7. 18
DCFG ( 确定型上下文无关文法 ),参 见 Determin - Digital signatures ( 数字签名),10.6. 2
istic context - free grammar Directed graph ( 有向图),0.2. 4
Decidability ( 可判定性 ),参 见 Undecidability Directed path ( 有向路径),0.2 .4
context- free language ( 上下文无关语言),4.1. 2 Disjunction operation ( 析取运算 ),0. 2. 6
of ACFG * 4. 1. 2 Distributive law ( 分配律 ),0. 2. 6
of ADFA ,4. 1. 1 DK- test ( DK- 测试),2.4. 2
288 t 引

D K } - test (前瞻为 1 的 DK- 测试),2. 4.4 EXPSPACE,9. 1


Domain of a function ( 函数定义域),0.2. 3 EXPSPACE- completeness ( EXPSPACE 完全性),9. 1
Dotted rule ( 加点规则),2.4 .2 EXPTIME ,8.2
DPDA ( 确 定 型 下 推 自 动 机 ), 参 见 Deterministic F
pushdown automaton Factor of a number ( 数的因子 ),10 . 2. 2
Dynamic programming ( 动态规划 ),7. 2. 2 Feller , William ( 人名),参考文献
E Fermat test ( 费马测试),10.2. 2
ECFG 4. 1. 2 Fermat ' s little theorem ( 费马小定理),10 2. 2 .
EDFA ,4. 1. 2 Feynman , Richard P. ( 人名 ),参考文献
Edge of a graph ( 图的边 ),0.2. 4 Final state ( 终结状态 ),1.1. 1
Edmonds , Jack ( 人名 ),参考文献 Finite automation ( 有 穷 自 动 机 )
£ LBA ,5. 1
*
automatic door example ( 自动门例子),1. 1
Element distinctness problem (元素区分问题),3.1. 2 computation of ( 计算 ),1.1. 3
Element of a set ( 集合的元素 ),0 . 2. 1 decidability ( 可判定性),4.1
Emptiness testing ( 空 性 检 验 ) defined . .
( 定 义 见 1 1 1)
for CFG , 4. 1. 2 designing ( 设计),1.1. 4
for DFA , 4. 1. 1 transition function ( 转移函数 ),1.1. 1
for LBA ,5. 1 two- dimensional ( 二维 ),问题 5 15 .
for TM ,5. 1 two- headed ( 二头),问题 5 14 .
Empty set ( 空集 ),0.2. 1 Finite state machine ( 有 穷 状 态 机 器 ),参 见 Finite
Empty string ( 空串 ),0.2. 5 automation
Encoding ( 编码),3.3. 2 ,7.2. 2 Finite state transducer ( 有穷状态转换器),练习 1. 24
Enderton , Herbert B. ( 人名 ),参考文献 Fixed point theorem ( 不动点定理 ),6.1. 3
Enumerator ( 枚举器 ),3.2. 3 Forced handle ( 强制句柄 ),2.4 .2
EQCFG 4. 1. 2 Formal proof ( 形式证明),6.2 .2
4. 1. 1 . 2 ,7. 4
( 公式 ),6
^
£ QDFA
.
Formula
EQREX 个 ,9 1 FORMULA- GAME , 8. 3. 2
EQTM Fortnow , Lance ( 人名 ),参考文献
Turing - unrecognizability (图灵不可识别性),5.3. 2 Free variable ( 自由变元),6. 2
undecidability ( 不可判定性 ),5.1 FST ( 有穷状态转换器),参见 Finite state transducer
Equality operation ( 等值运算 ),0.2. 6 Function ( 函数 ),0.2. 3
Equivalence relation ( 等价关系 ),0. 2. 3 argument ( 自变量 ),0.2. 3
Equivalence machines ( 等价机器 ),1. 2. 2 binary ( 二元),0. 2. 3
Erdos , Paul ( 人名),参考文献 computable ( 可计算 ),5.3. 1
Error probability ( 错误概率),10. 2. 1 domain ( 定义域 ),0.2. 3
ETM J 练习 4. 5 one- to- one ( 一对一),4.2.1
ETM undecidability .1
( ETM 不可判定性 ),5 one- way ( 单向),10.6. 3
Euclidean algorithm ( 欧几里得算法 ),7. 2. 2 onto ( 映上 ),0.2.3 ,4.2. 1
Even , Shimon ( 人名),参考文献 polynomial time computable ( 多 项 式 时 间 可 计 算
EXCLUSIVE OR operation ( 异或运算 ),0. 2. 6 的 ),7.4. 1
Existential state ( 存在状态),10.3 range ( 值域 ),0.2 3 .
Exponential bound ( 指数界),7. 1. 1 space constructible ( 空间可构造的),9.1
Exponential ,versus polynomial ( 指 数 的 ,相 对 多 time constructible ( 时间可构造的),9.1
项式的),7.2. 1 transition ( 转移 ),1.1. 1
t 引 289

unary ( — 兀),0. 2. 3

Halting problem ( 停机问题),5.1
G unsolvability of ( 不可解性),5.1
Gabarro , Joaquim ,
( 人名 ),参考文献 HALTJM , 5. 1
Gadget in a completeness proof ( 完全性证明中的构 Hamiltonian path problem ( 哈密顿路径问题),7. 3
件),7.5 exponential time algorithm ( 指数时间算法),7. 3
Game ( 游戏 ,博弈 ),8.3. 2 NP- completeness of ( NP 完全性),7.3

Garey , Michael R. ( 人名),参考文献 polynomial time verifier (多项式时间验证器),7 3 .


Gate in a Boolean circuit ( 布尔电路中的门),9. 3 HAMPATH , 7.3 , 7.5. 2
Generalized geography ( 广义地理学),8. 3. 3 Handle ( 句柄 ),2.4. 2
Generalized nondeterministic finite automaton ( 广义 forced ( 强制的),2.4. 2
非确定型有穷自动机),1.3. 2
Harary , Frank ( 人名),参考文献

converting to a regular expression ( 转换为正贝【J Hartmanis ,Juris ( 人名),参考文献


Hey , Anthony J. G. ( 人名),参考文献
表达式),1.3. 2
Hierarchy theorem ( 层次定理),9.1
defined ( 定义),1.3 2 .
space ( 空间 ),9. 1
Geography game ( 地理学游戏),8. 3. 3
time ( 时间 ),9. 1
GG ( generalized geography ) ( 广义地理学),8.3. 3
High - level description of a Turing machine ( 图灵机
Gill , John T. ( 人名),参考文献
的高层次描述 ),3.3. 2
GNFA ( 广义非确定型有穷自动机 ),参见 Gener-
Hilbert , David , 3.3.1 ,参考文献
alized nondeterministic finite automaton
Hofstadter , Douglas R. ( 人名),参考文献
GO , game of ( 一种游戏),8.3 3 . Hoover ,H. James , (人名),参考文献
Go - moku , gameof ( 五子棋 ,一种游戏),问题 8. 26
Hopcroft , John E. , ( 人名),参考文献
Godel , Kurt ( 哥德尔 ),0.1.2 ,6.2.1,6.2.2 ,
Huang , Ming -Deh A. ( 人名),参考文献
参考文献
Goemans,Michel X. ( 人名),参考文献
iff ( 当且仅当),0.3
Goldwasser , Shafi ( 人名),参考文献
Immerman , Neil ( 人名 ),参考文献
Graph (图 )
Implementation description of a Turing machine ( 图
acyclic ( 无环),10. 2. 3
灵机的实现描述 ),3.3. 2
coloring ( 着色 ),问题 7. 38
Implication operation ( 蕴涵运算),0.2. 6
cycle in ( 圈 ),0. 2. 4 Incompleteness theorem ( 不完全性定理),6. 2. 2
degree ( 度数 ),0. 2. 4 Incompressible string ( 不可压缩的串),6.4. 3
directed ( 有向),0.2. 4 Indegree of a node ( 结点的人度),0.2. 4
edge ( 边 ),0. 2. 4 Independent set ( 独立集 ),问题 0. 15
isomorphism problem ( 同 构 问 题 ),练 习 7 . 12 , Induction (归纳法 )
10. 4. 1 basis ( 基础),0. 4.3
k - regular (走正则的),0.4 .1 proof by ( 证明),0.4. 3
labeled ( 标定的 ),0.2. 4 step ( 步骤 ),0. 4. 3
node ( 结点),0. 2. 4 Induction hypothesis ( 归纳假设),0. 4. 3
strongly connected ( 强连通的),0.2. 4 Inductive definition ( 归纳定义),1. 3. 1
sub- ( 子 ),0. 2. 4 Infinite set ( 无穷集合 ),0. 2. 1
undirected ( 无向 ),0.2 4 . Infix notation ( 中缀表示法),0.2. 3
vertex ( 顶点),0 . 2. 4 Inherent ambiguity ( 固有歧义性 ),2.1. 4
Greenlaw , Raymond ( 人名 ),参考文献 Inherently ambiguous context- free language ( 固有
H 歧义的上下文无关语言),2.1. 4
Halting configuration ( 停机格局),3.1. 1 Injective function ( 单射函数),4. 2. 1
290 t 引

Integers ( 整数),0.2. 1 Leighton , E. Thomson ( 人名 ),参考文献


Interactive proof system ( 交互式证明系统 ),10. 4 Leiserson , Charles E. ( 人名 ),参考文献
Interpretation ( 解释),6. 2 Lemma ( 引理),0.3
Intersection operation ( 交运算),0. 2. 1 Lenstra , Jan Karel ( 人名),参考文献
IP , 10. 4. 2 Leveled graph ( 分级图 ),问题 8. 23 解答
ISO , 10. 4. 1 Levin , Leonid A. ( 列文),7.4 , 9.3 , 参 考 文 献
Isomorphic graphs ( 同构图),练习 7. 12 Lewis , Harry ( 人名),参考文献
Lexical analyzer ( 词法分析器),1 3 . .1
Johnson , David S. ( 人名 ),参考文献 Lexicographic order ( 字典序),0. 2. 5
K Li , Ming ( 人名),参考文献
々-ary function (走元函数),0.2. 3 Lichtenstein , David ( 人名),参考文献
是-ary relation Ck 元关系),0. 2. 3 Linear bounded automaton ( 线性界限自动机),5. 1
是-clique (々-团) ,7.3. 1 Linear time ( 线性时间),7.1. 2
々- optimal approximation algorithm (々- 优 化 近 似 算 Lipton , Richard J. ( 人名 ),参考文献

法),10. 1 LISP , 3.2. 4

-
々- tuple (々 元组 ),0.2 2 . Literal ( 文字 ),7. 4.1
Karloff , Howard ( 人名),参考文献 Log space computable function ( 对 数 空 间 可 计 算 函
Karp , Richard M. ( 人名 ),参考文献 数),8. 5
Kayal , Neeraj ( 人名 ),参考文献 Log space reduction ( 对数空间归约),8. 5
Kolmogorov , Andrei N. ( 柯尔莫哥洛夫),6.4. 1 Log space transducer ( 对数空间转换器 ),8. 5
L Lookahead ( 前瞻性 ),2 4 4 . .
L , 8. 4 LR( 是 ) grammar ( LR (々)文法 ),2.4 .4
Labeled graph ( 标定图 ),0.2. 4 Luby , Michael ( 人名),参考文献
Ladder ( 梯子),问题 8. 25 Lund , Carsten ( 人名),参考文献
Language ( 语言) M
co- Turing- recognizable ( 补图灵识别的),4.2. 3 Majority function ( 多数函数),问题 9. 13
context - free ( 上下文无关的),2.1 Many-one reducibility ( 多一 可归约性 ),5. 3. 1
decidable (可判定的),3 1. 1 . Mapping ( 映射),0.2. 3
defined ( 定义),0.2. 5 Mapping reducibility ( 映射可归约性 ),5. 3
deterministic context-free ( 确 定 型 上 下 文 无 关 语 polynomial time ( 多项式时间),7.4. 1
言),2.4 Markov chain ( 马尔科夫链),1.1
endmarked ( 结束标记),2.4. 1 Match ( 匹配),5.2
of a grammar ( 文法的),2.1 Matijasevic Yuri ( 马提亚塞维齐 ),3.3. 1
recursively enumerable ( 递归可枚举的),3.1. 2 MAX -CLIQUE f 问题 7. 19 ,练习 9. 11
regular ( 正则的),1.1. 3 MAX -CUT 问题 7.54
f

Turing- decidable ( 图灵可判定的),3.1. 1 Maximization problem ( 最大化问题),10.1


Turing- recognizable ( 图灵可识别的),3.1. 1 Member of a set ( 集的成员),0.2. 1
Turing - unrecognizable (图灵不可识别的),4.2. 3 Micali , Silvio ( 人名 ),参考文献

Lawer,Eugene L. ( 人名 ),参考文献 Miller , Gary L. ( 人名),参考文献


LBA ( 线 性 界 限 自 动 机 ),参 见 Linear bounded MIN - FORMULA , 10.3.1,问题 8.32,9.2 , 10.3.1,
automaton 10. 3. 2
Leaf in a tree ( 树的叶子),0.2. 4 Minesweeper ( 扫雷 ,游戏名),问题 7. 27
Leeuwen , Jan van ( 人名),参考文献 Minimal description ( 最小描述),6. 4. 1
Leftmost derivation ( 最左派生),2. 1.4 Minimal formula ( 最 小 公 式 ),问 题 7. 21 ,问 题
t 引 291

8. 32 ,9. 2 ,10. 3. 1,10. 3. 2 Nondeterministic Turing machine ( 非 确 定 型 图 灵


Minimization of a DFA ( DFA 的 最 小 化 ),问 题 机),3 2.2 .
7. 25 space complexity of ( 空间复杂性),第 8 章
Minimization problem ( 最小化问题 ),10 .1 time complexity of ( 时间复杂性 ),7. 1. 3
Minimum pumping length ( 最 小 泵 长 度 ),问 题 NONISO , 10. 4. 1
1. 50 NOT operation ( 非运算 ),0 . 2.6
MINTM * 6.1. 3 , 练习 6.2 NP , 7.3
Model ( 模型 ),6.2 NP-complete problem ( NP 完全问题)
MODEXP , 问题 7.40 3SAT , 7. 4. 1 , 9. 3
Modulo operation ( 模运算 ),0. 2. 3 CIRCUIT- SAT , 9. 3
Motwani ,Rajeev ( 人名 ),参考文献 HAMPATH , 7. 5. 2
Multiset ( 多重集合 ),0.2 .1,7.3. 1 SUBSET- SUM , 7. 5. 3
Multitape Turing machine ( 多带图灵机 ),3.2. 1 3COLOR , 问题 7. 38
Myhill- Nerode theorem ( Myhill- Nerode 定理 ),问 UHAMPATH , 7. 5. 2
题 1. 48 VERTEX -COVER , 7. 5. 1
N NP- completeness ( NP 完全性 ),7 4 .
Natural numbers ( 自然数 ),0.2 .1 defined ( 定义),7.4. 2
NC , 10.5. 2 NP- hard ( NP 难的),问题 7. 31
Negation operation ( 非运算 ),0 . 2. 6 NP- problem ( NP 问题),7.3
NFA ( 非 确 定 型 有 穷 自 动 机 ),参 见 Nondetermin- NPA ,9. 2
istic finite automaton NPSPACE , 8. 2
Nim ,game of ( 尼姆游戏 ,一种游戏 ),问题 8. 8 NSPACE ( / ( ( n ) ) ,8
Nisan Noam ( 人名),参考文献 NTIMEC / U ) ) ,7. 3
Niven ,Ivan ( 人名),参考文献 NTM ( 非 确 定 型 图 灵 机 ), 参 见 Nondeterministic
NL,8.4 Turing machine
NL- complete problem ( NL 完全问题) O
PATH , 8. 4 o ( / ( « ) ) ( 小 o 记法),7 . 1. 1
NL-completeness ( NL 完 全 性) One- sided error (单侧错误),10. 2. 2
defined ( 定义),8. 5 One- time pad ( 一次性衬垫 ),10. 6. 1
Node of a graph ( 图的结点),0 . 2. 4 One- to-one function ( 一对一函数 ),4. 2. 1
degree ( 度 ),0. 2. 4 One- way function .3
( 单向函数 ),1 0 . 6

indegree ( 入度 ),0 . 2. 4 One- way permutation ( 单向置换),10. 6. 3


outdegree ( 出度),0 . 2. 4 Onto function ( 满映射函数 ),0 . 2.3 ,4 . 2. 1
Nondeterministic computation ( 非确定型计算),1.2 Optimal solution ( 最优解 ),10.1
Nondeterministic finite automaton (非确定型有穷 Optimization problem ( 优化问题),10. 1
自动机),1.2 OR operation ( 析取运算 ),0. 2. 6
computation by ( 的计算),1.2 Oracle ( 谕示 ),6 . 3 , 9 . 2
defined ( 定义 ),1.2 .1 Oracle tape ( 谕示带 ),9.2
equivalence with deterministic finite automaton Ordered pair ( 有序对),0 . 2 .2
( 等价于确定型有穷自动机),1 . 2. 2 Outdegree of a node ( 结点的出度 ),0 . 2. 4
equivalence with regular expression ( 等 价 于 正 贝(] P
表达式 ),1 . 3. 2 P , 7 . 2 , 7 . 3. 2
Nondeterministic polynomial time ( 非确定的多项式 P-complete problem ( P 完全问题 )

时间),7. 3 CIRCUIT-VALUE , 1 0 . 5. 3
292 t 引

P-completeness ( P 完全性),10. 5. 3 Power set ( 幂集 ),0.2.2 ,1.2. 1


PA , 9.2 PRAM , 10. 5. 1
Pair ( 对) Pratt , Vaughan R. ( 人名),参考文献
ordered ( 有序),0.2. 2 Prefix notation ( 前缀表示法 ),0.2. 3
unordered ( 二元集合),0.2. 1 Prefix of a string ( 串的前缀),0.2.5 ,问题 1. 45
Palindrome ( 回文),问题 1. 51c ,练习 2.4 e Prefix-free language ( 前缀无关语言),0.2 . 5, 问
Papadimitriou , Christors H. ( 人名),参考文献 题 4. 21
Parallel computation ( 并行计算 ),10.5 Prenex normal form ( 前束范式 ),6.2 ,8.3. 1

Parallel random access machine ( 并 行 随 机 存 取 机 ), Prime number ( 素数 ),7.3 ,问题 7. 46 ,10.2. 2


10. 5. 1 Private- key cryptosystem ( 私钥密码系统),10. 6. 2
Parity function ( 奇偶函数),9.3 Probabilistic algorithm ( 概率算法 ),10 2.
Parse tree ( 语法分析树),2.1 Probabilistic function ( 概率函数 ),10.6 .3
Parser ( 语法分析器 ),第 2章 Probabilistic Turing machine ( 概率图灵机),10. 2
Pascal ,3. 2. 4 Processor complexity ( 处理器复杂度 ),10 5. 1 .
Path (路径 ) Production ( 产生式 ),2.1
Hamiltonian (哈密顿),7. 3 Proof ( 证明),0 .3
in a graph ( 图中的),0.2. 4 by construction ( 构造性 ),0. 4. 1
simple ( 简单的),0.2. 4 by contradiction ( 反证法 ),0. 4. 2
PATH , 7.2. 2 , 8.4 by induction ( 归纳 ),0.4. 3
PCP ( 波 斯 特 对 应 问 题 ), 参 见 Post Correspon- finding ( 寻找 ),0.3
dence Problem ) necessity for ( 必要性),1.4
PDA (下推自动机),参见 Pushdown automaton Proper subset ( 真子集 ),0. 2. 1 , 8. 6
Perfect shuffle operation ( 完全间隔交叉操作),问 Prover ( 证明者 ),10.4. 2
题 1. 31 ,问题 2. 50 Pseudoprime ( 伪素数),10.2. 2
PH , 10. 3. 2 PSPACE , 8.2
Pigeonhole principle ( 鸿巢原理),1.4 , 2. 3 PSAPCE-complete problem ( PSPACE 完全问题 )

Pippenger , Nick , 10. 5. 2 FORMULA-GAME , 8.3. 2


Polynomial ( 多项式),3.3. 1 GG , 8.3. 3
Polynomial bound ( 多项式界限),7.1. 1 TQBF , 8. 3. 1
Polynomial time ( 多项式时间 ) PSPACE-completeness ( PSPACE 完全性),8 3 .
algorithm ( 算法),7.2 defined (定义),8. 3
computable function ( 可计算函数),7 . 4. 1 PSPACE- hard ( PSPACE 难的),8. 3
hierarchy ( 层次),10.3. 2 Public- key cryptosystem ( 公钥密码系统),10.6 2 .
verifier ( 验证器),7.3 Pumping lemma ( 栗引理)
Polynomial verifiability ( 多项式可验证性),7. 3 for context- free language (上下文无关语言的),2. 3
Polynomial , versus exponential ( 多 项 式 的 ,相 对 for regular language (正则语言的),1. 4
于指数的),7.2. 1 Pumping length ( 泵长度),1.4 ,问题 1.50 ,2.3
Polynomially equivalent models ( 多 项 式 等 价 模 型 ), Pushdown automaton ( 下推自动机),2.2
7. 2. 1 context-free grammars ( 上下文无关文法),2. 2 3 .
Pomerance , Carl ( 人名),参考文献 defined ( 定义),2. 2.1
Popping a symbol ( 弹出一个符号),2.2 deterministic ( 确定型),2. 4
Post Correspondence Problem ( PCP , 波 斯 特 对 应 examples ( 例子 ),2.2 2 .
问题),5. 2 schematic of ( 示意),2.2
modified ( 修正的),5.2 Pushing a symbol ( 推入符号),2. 2
t 引 293

Putnam , Hilary ( 普特纳姆 ),3.3. 1 examples of ( 例子 ),1. 3. 1


PUZZLE , 问题 7. 39 ,问题 8. 31 Regular language ( 正则语言),第 1 章
Q closure under concatenation ( 在 连 接 运 算 下 封
Quantified Boolean formula ( 量词化布尔公式),8. 3. 1 闭),1. 1.5 ,1.2. 3
Quantifier ( 量词),8.3. 1 closure under intersection ( 在 交 运 算 下 封 闭 ),
in a logical sentence ( 在逻辑句子中的),6. 2 1. 1.5
Query node in a branching program ( 分支程序中的 closure under star ( 在星号运算下封闭),1. 2. 2
查询顶点),10.2. 3 closure under union ( 在 并 运 算 下 封 闭 ),1.1.5 ,
R 1.2. 3
Rabin , Michael O. ( 人名),参考文献 decidability ( 可判定性 ),4.1
Rackoff , Charles ( 人名),参考文献 defined ( 定义),1.1. 3
Ramsey s theorem ( Ramsey 定理 ),问题 0 15 . Regular operation ( 正则运算 ),1.1. 5
Range of a function ( 函数的值域),0.2. 3 RKGULARJM v 5. 1
Read-once branching program ( 只 读 一 次 的 分 支 程 Reingold ,Omer ( 人名 ,见参考文献 )
序),10.2. 3 Rejecting computation history ( 拒绝计算历史 ),5.1
Real number ( 实数),4. 2. 1 Rejecting configuration ( 拒绝格局),3.1. 1
Recognizes a language , meaning of ( 识另lj 语言,意思 Relation ( 关系),0.2.3 ,6. 2
是),1.1. 1,1.1. 3 binary ( 二元的),0.2. 3
Recursion theorem ( 递归定理),6.1 Relatively prime ( 互素的),7. 2. 2
fixed- point version ( 不动点形式),6 1 3 .. Relativization ( 相对化),9. 2
terminology for ( 术语),6. 1. 2 RELPRIME , 7.2. 2
Recursive language ( 递归语言),参见 Decidable lan- Reverse of a string ( 反串),0. 2. 5
guage Rice ’s theorem ( 赖斯定理),5.1 ,问题 5.16 及解
Recursively enumerable ( 递归可枚举),参见 Turing - 答 ,问题 5. 18 ,问题 5. 18a 解答 ,问题 6. 25
recognizable .
Rinooy Kan , A. H G. ( 人名),参考文献
Recursively enumerable language ( 递归可枚举语言), Rivest ,Ronald L. ( 人名),参考文献
3.1. 1 Robinson , Julia , 3. 3. 1
Reduce step ( 归约步骤 ),2.4. 2 Roche , Emmanuel ( 人名),参考文献
Reducibility ( 可归约性 ),第 5 章 Root ( 根 )
mapping ( 映射) ,5.3 in a tree ( 树中的),0.2 4 .
polynomial time ( 多项式时间),7. 4. 1 of a polynomial ( 多项式的),3.3. 1
via computation histories ( 利用计算历史),5.1,5.2 Rule in a context-free grammar ( 上下文无关文法的
Reducing string ( 归约串),2.4. 2 规则),2.1
Reduction ( 归约),第 5 章,5. 3 Rumely , Robert S. ( 人名),参考文献
between problems (问题间),第 5 章 Ruzzo , Walter L. ( 人名),参考文献
function ( 函数 ),5.3 2. S
mapping ( 映射 ),5.3 2 . SAT , 7.4. 3 , 8.2
reversed derivation ( 反向派生 ),2 . 4. 2 # SAT, 10.4. 3
Turing ( 图灵),6. 3 Satisfiability problem ( 可满足性问题),7.4
Reflexive relation ( 自反关系 ),0.2. 3 Satisfiable formula ( 可满足的公式 ),7.4
Regular expression ( 正则表达式),1.3 Savitch ’s theorem ( 萨维奇定理),8.1
defined ( 定义),1.3. 1 Saxena , Nitin ( 人名),参考文献
equivalence to finite automaton ( 等价有穷自动机), Schabes Yves ( 人名 ),参考文献
1.3. 2 Schaefer , Thomas J. ( 人名),参考文献
294 # 引

Scope ( 辖域 ),8. 3. 1 Stearns , Richard E. ( 人名 ),参考文献

Scope , of a quantifier ( 量词的辖域 ),6.2 Steiglitz ,Kenneth ( 人名 ),参考文献


Secret key ( 密钥),10. 6. 1 Stinson , Douglas R. ( 人名 ),参考文献
Sedge wick , Robert ( 人名 ),参考文献 String ( 字符串),0.2. 5
Self -loop ( 自环),0. 2. 4 String order ( 字符串顺序 ),0.2. 5
Self - reference ( 自引用),6.1. 1 Strongly connected graph ( 强连通图 ),0. 2. 4 ,问
Sentence ( 句子),8.3. 1 题 8. 16
Sequence ( 序列),0. 2 2 . Structure ( 结构 ),6.2
Sequential computer ( 顺序计算机 ),10. 5 Subgraph ( 子图 ),0.2. 4
Set ( 集合 ),0.2 .1 Subset of a set ( 集合的子集 ),0.2 .1
countable ( 可数的),4.2. 1 SUBSET- SUM ,7.3.1,7.5. 3
uncountable ( 不可数的),4.2. 1 Substitution rule ( 替换规则),2.1
Sethi , Ravi ( 人名),参考文献 Substring ( 子串),0.2. 5
Shallit ,Jeffrey ( 人名),参考文献 Sudan , Madhu ( 人名 ),参考文献

Shamir , Adi ( 人名),参考文献 .


Surjective function ( 满映射),4 2. 1
Shen ,Alexander ( 人名),参考文献 Symmetric difference ( 对称差),4.1. 1
Shmoys ,David B. ( 人名 ),参考文献 Symmetric relation ( 对称关系),0.2. 3
Shor , Peter W. ( 人名 ),参考文献 Synchronizing sequence ( 同步序列 ),问题 1. 66
Shortlex order ( 字符串顺序),0 2.5 . Szegedy ,Mario ( 人名 ),参考文献
Shuffle operation ( 间隔交叉操作),问题 1.31 ,问 Szelepczenyi , Robert ( 人名 ),参考文献
.
题 1 32 ,问题 2 50 . T
Simple path ( 简单路径),0.2. 4 Tableau ( 画面 ),9. 3
Singleton set ( 单元素集合),0. 2. 1 Tarjan , Robert E. ( 人名 ,见参考文献)
Sipser , Michael ( 人名 ),参考文献 Tautology ( 永真式 ),10.3. 1
Size complexity ( 规模复杂度),10. 5. 1 Term , in a polynomial ( 多项式中的项 ),3.3. 1
Small-o notation ( 小 o i己号),7. 1. 1 Terminal ( 终结符 ),2.1
SPACE ( /( n ) ) ,定义 8.2 Terminal in a context- free grammar ( 上下文无关文

Space complexity ( 空间复杂度 ),定义 8. 1 法中的终结符 ),2.1. 1


Space complexity class ( 空间复杂性类 ),定义 8. 2 Th ⑽ ,6.2
Space complexity of nondeterministic Turing machine Theorem ( 定理 ),0.3

( 非确定型图灵机的空间复杂性),第 8章 Theory , of a model ( 模型的理论),6.2


Space constructive function ( 空间可构造函数),9. 1 3COLOR , 问题 7.38
Space hierarchy theorem ( 空间层次理论 ),9.1 3SAT , 7. 4. 1 , 9. 3
Spencer , Joel H. ( 人名),参考文献 Tic- tac-toe , game of (一种儿童游戏),练习 8. 2
Stack ( 栈),2 .2 TIME ( / ( w ) ) ,7. 1. 2
Star operation ( 星号运算),1.1.5,1.2.3,问题 7. 42 Time complexity ( 时间复杂性 ),7
Start configuration ( 起始格局),3 1.1 . analysis of ( 的分析 ),7. 1. 1 7. 1. 2
Start state ( 起始状态 ),1.1 of nondeterministic Turing machine ( 非确定型图
Start variable , in a context-free grammar ( 在上下 灵机的 ),7.1. 3
文无关文法中的开始变元),2.1 ,2.1. 1 Time complexity class ( 时间复杂性类 ),7. 1. 2
State diagram ( 状态图 ) Time constructible function (时间可构造函数),9. 1
finite automaton ( 有穷自动机的),1.1 Time hierarchy theorem ( 时间层次定理),9.1
pushdown automaton (下推自动机的),2.2. 2 TM , 参见 Turing machine
Turing machine ( 图灵机的),3.1. 2 TQBF , 8.3 1 .
t 引 295

Transducer ( 转换器 ) U
finite state ( 有穷状态的),练习 1. 24 Ullman , Jeffrey D. ( 人名),参考文献
log space ( 对数空间的),8.5 Unary ( 一元的)
Transition ( 转移),1.1 alphabet ( 字母表),1.2.1,1.4 , 问题 5. 33
Transition function ( 转移函数),1.1. 1 function ( 函数 ),0.2. 3
Transitive closure ( 传递闭包),10. 5. 1 notation ( 标记),7. 2. 2 , 问题 7 44 .
Transitive relation ( 传递关系),0.2. 3 operation ( 运算 ),1.1. 5
Trapdoor function ( 天窗函数 ),10.6. 4 Uncountable set ( 不可数集 ),4.2. 1

Tree ( 树),0. 2. 4 Undecidability ( 不可判定性 )


leaf ( 叶子),0 . 2. 4 diagonalization method ( 对角化方法),4. 2. 1
parse ( 语法分析),2.1 of ATM ,4. 2. 1
root ( 根),0 2 4 . . of ELBA * 5. 1
Triangle in a graph (图中的三角形 ),练习 7. 9 of EQJM , 5. 1
Tuple ( 元组),0. 2. 2 of £TM ,5. 1
Turing machine ( 图灵机 ),3.1 , 3. 2 of HALTJM , 5. 1
alternating ( 交错的),10.3 of RKCJULARJM » 5. 1
comparison with finite automaton ( 与有穷自动机对 of EQCFG » 4. 1. 2
比),3.1 of Post correspondence problem (波斯特对应问

defined ( 定义),3.1. 1 题的 ),5. 2


describing ( 描述 ),3.3. 2 via computation histories ( 利 用 计 算 历 史 的 ),
examples of ( 举例),3. 1. 2 5. 1
marking tape symbols ( 标记带符号),3. 1. 2 Undirected graph ( 无向图 ),0.2. 4
multitape ( 多带的 ),3.2 .1 Union operation ( 并运算 ),0.2.1,1.1.5 ,1.2. 3
nondeterministic ( 非确定型的),3.2. 2 Unit rule ( 单一规则),2.1. 5
oracle ( 谕示),6.3 , 9.2 Universal quantifier ( 全称量词),8 3 1 ..
schematic of ( 示意性的),3.1 Universal state ( 全称状态),10. 3
universal ( 通用的),4.2 Universal Turing machine ( 通用图灵机 ),4. 2
Turing reducibility (图灵可归约性),6.3 Universe ( 论域),6.2 ,8.3. 1
Turing , Alan M. ( 阿伦 - 图灵 ),0.1.2 ,3.1, Unordered pair ( 二元集合 ),0. 2. 1
3.3.1,参考文献 Useless state ( 无用状态)
Turing -decidable language ( 图 灵 可 判 定 性 语 言 ), in PDA , 问题 4. 18
3. 1. 1 in TM , 问题 5. 29
Turing-recognizable language ( 图灵可识别语言 ), V
3. 1. 1 .
Valiant , Leslie G ( 人名),参考文献
Turing- unrecognizable language ( 图 灵 不 可 识 别 语 Valid string ( 有效串),2.4. 2
言),4. 2. 3 Variable ( 变量 ,变元)
EQTM 5. 3. 2 Boolean .4
( 布尔),7
Two-dimensional finite automaton (二维有穷自动 bound ( 约束),8.3. 1
机),问题 5 15 . in a context-free grammar ( 在 上 下 文 无 关 文 法 中
Two- headed finite automaton ( 二 头 有 穷 自 动 机 ), 的),第 2 章 ,2.1. 1
问 题 5. 14 .
start ( 起始),2 1 ,2. 1. 1
2 DFA ,参见 Two- headed finite automaton ) Venn diagram ( 文氏图),0.2. 1
2 DIM- DFA,参见 Two - dimensional finite automaton ) Verifier ( 验证机),7.3 , 10.4. 2
2 SAT , 问 题 7. 24 Vertex of graph ( 图的顶点),0.2. 4
296 t 引

VERTEX -COVER , 7. 5. 1 X
Virus (病毒),6. 1 . 3 XOR operation (异或运算),0. 2. 6,9. 3
Vitanyif Paul (人名),参考文献 Y
W Yannakakis , Mihalis ( 人名),参考文献
Wegman , Mark ( 人名 ),参考文献 Yields ( 产生)
Well-formed formula (良构公式),6. 2 for configurations ( 格局),3. 1. 1
Williamson , David P. ( 人名),参考文献 for context-free grammars ( 上 下 文 无 关 文 法 ),
Window , in a tableau ( 画面中的窗口 ),7.4. 3 2. 1 . 1
Winning strategy ( 必胜策略),8.3. 2 Z
Wire in a Boolean circuit ( 布尔电路的导线),9. 3 ZPP,问题 10. 10
Worst-case analysis ( 最坏情况分析),7.1 Zuckerman , Herbert S. ( 人名 ),参考文献
推荐阅读

数似 ㈧ 系统槪念 数侃挖偏
槪念与技木

中 中文版
第 第3版

作者:Jiawei Han 等著 作者: Ian H.Witten 等著


作者 : Abraham Silberschatz 著
. 79.00 -.
..
中文翻译版 :978-7- 111-37529-6 99.00 元 中文版: 978- 7- 111-39140-1 元 中文版: 978 -7-111-45381 9 79.00 元
-
本科教学版: 978 7-111-40085-1 59.00 元

作者 :Randal E. Bryant 等著 作者:David A . Patterson John L Hennessy 作者


.
书号 :978- 7-111-32133-0 99.00 元 .
中文版 : 978-7-111-50482-5 99.00 元 书号 :

软件 H
' ivm
- 獅
实践者的研究方法

作者 : Thomas H. Cormen 等著 作者:Brian W. Kemighan 等著 作者:Roger S. Pressman 著


.
书号 : 978-7-111-40701-0 128.00 元 .
书号:978-7-111 - 12806-0 3000元 .
书号 : 978-7-111-33581-8 79.00元
推荐阅读

大数倨分析
雛 二1

基于R 应用

^
达 七 厂?泛 咛
|

ARUnt^ iaai

m- m
'

I M FRPKIM \ M1 H( 、、

大数据分析: 数鯉義M駢散、胧髀濉营决策
作者 : Thomas H. Davenport ISBN: 978-7-111-49184-2 定价:59.00元
统计学习导论
— 基于R应用
作者 :加雷斯 詹姆斯等 ISBN : 978-7- 111-49771-4 定价 :79.00元


Hi
)
nu/G
机器卞屮;


^
r
|

\{ \
| [ \! I \
(|
'
M\ NIN( i WITII K

...
I

机器学习与R 语言 商务智能 :数据分析的管理视角 ( 原书第3版 )


作者: Brett Lantz ISBN : 978-7-111-49157-6 定价 : 69.00元 作 者:拉姆什 沙尔达等 ISBN : 978 7-111-49439-3 定价: 69.00元
-
计算理论导引 原书第3版
Introduction to the Theory of Computation Third Edition

本书由计算理论领域的知名权威Michael Sipser所撰写。他以独特的视角,系统地介绍了计算理论的三
个主要内容 : 自动机与语言 、可计算性理论和计算复杂性理论。绝大部分内容是基本的 ,同时对可计算性
和计算复杂性理论中的某些高级内容进行了重点介绍。作者以清新的笔触 、 生动的语言给出了宽泛的数学
原理 , 而没有拘泥于某些低层次的细节。在证明之前 ,均有 “证明思路” ,帮助读者理解数学形式下蕴涵
的概念。同样 ,对于算法描述 ,均以直观的文字而非伪代码给出 ,从而将注意力集中于算法本身 ,而不是
某些模型。新版根据多年来使用本书的教师和学生的建议进行了改进 ,并用一节的篇幅对确定型上下文无
关语言进行了直观而不失严谨的介绍。此外 ,对练习和问题进行了全面更新 ,每章末均有习题选答。

作者简介

迈克尔 • 西 普 塞 ( Michael Sipser ) 美国麻省理工学院应用数学系教授 ,计算机科学和


。他从事理论计算机科学与其他数学课程的教学工作三十多
人工智能实验室 ( CSAIL ) 成员
年 ,目前为数学系主任。他痴迷于复杂性理论 ,喜欢复杂性理论的教学工作。

上架指导 : 计算机\计算理论
- - - -
ISBN 978 7 111 49971 8

CENGAGE
i% Learning
www.ccngagcasia.com

投稿热线:( 010) 88379604 华0网站:www.hzbook.com


; 客服热线 :(010) 88378991 88361066 网上购书 :www.china-pub.com 9 787111 49971 >

定价 :69.00元
购书热线:(010) 68326294 88379649 68995259 数字阅读 www.hzmedia.com.cn
[General Information]
书名=计算理论导引 原书第3版
作者=(美)迈克尔・西普塞(Michael Sipser)著
页数=298
SS号=13797916
DX号=
出版日期=2015.08
出版社=北京机械工业出版社
封面
书名
版权
前言
目录
第0章 绪论
0.1自动机、可计算性与复杂性
0.1.1计算复杂性理论
0.1.2可计算性理论
0.1.3自动机理论
0.2数学概念和术语
0.2.1集合
0.2.2序列和多元组
0.2.3函数和关系
0.2.4图
0.2.5字符串和语言
0.2.6布尔逻辑
0.2.7数学名词汇总
0.3定义、定理和证明
0.4证明的类型
0.4.1构造性证明
0.4.2反证法
0.4.3归纳法
练习
问题
习题选解
第一部分 自动机与语言
第1章 正则语言
1.1有穷自动机
1.1.1有穷自动机的形式化定义
1.1.2有穷自动机举例
1.1.3计算的形式化定义
1.1.4设计有穷自动机
1.1.5正则运算
1.2非确定性
1.2.1非确定型有穷自动机的形式化定义
1.2.2 NFA与DFA的等价性
1.2.3在正则运算下的封闭性
1.3正则表达式
1.3.1正则表达式的形式化定义
1.3.2与有穷自动机的等价性
1.4非正则语言
练习
问题
习题选解
第2章 上下文无关文法
2.1上下文无关文法概述
2.1.1上下文无关文法的形式化定义
2.1.2上下文无关文法举例
2.1.3设计上下文无关文法
2.1.4歧义性
2.1.5乔姆斯基范式
2.2下推自动机
2.2.1下推自动机的形式化定义
2.2.2下推自动机举例
2.2.3与上下文无关文法的等价性
2.3非上下文无关语言
2.4确定型上下文无关语言
2.4.1 DCFL的性质
2.4.2确定型上下文无关文法
2.4.3 DPDA和DCFG的关系
2.4.4语法分析和LR(k)文法
练习
问题
习题选解
第二部分 可计算性理论
第3章 丘奇-图灵论题
3.1图灵机
3.1.1图灵机的形式化定义
3.1.2图灵机的例子
3.2图灵机的变形
3.2.1多带图灵机
3.2.2非确定型图灵机
3.2.3枚举器
3.2.4与其他模型的等价性
3.3算法的定义
3.3.1希尔伯特问题
3.3.2描述图灵机的术语
练习
问题
习题选解
第4章 可判定性
4.1可判定语言
4.1.1与正则语言相关的可判定性问题
4.1.2与上下文无关语言相关的可判定性问题
4.2不可判定性
4.2.1对角化方法
4.2.2不可判定语言
4.2.3一个图灵不可识别语言
练习
问题
习题选解
第5章 可归约性
5.1语言理论中的不可判定问题
5.2一个简单的不可判定问题
5.3映射可归约性
5.3.1可计算函数
5.3.2映射可归约性的形式化定义
练习
问题
习题选解
第6章 可计算性理论的高级专题
6.1递归定理
6.1.1自引用
6.1.2递归定理的术语
6.1.3应用
6.2逻辑理论的可判定性
6.2.1一个可判定的理论
6.2.2一个不可判定的理论
6.3图灵可归约性
6.4信息的定义
6.4.1极小长度的描述
6.4.2定义的优化
6.4.3不可压缩的串和随机性
练习
问题
习题选解
第三部分 复杂性理论
第7章 时间复杂性
7.1度量复杂性
7.1.1大O和小o记法
7.1.2分析算法
7.1.3模型间的复杂性关系
7.2 P类
7.2.1多项式时间
7.2.2 P中的问题举例
7.3 NP类
7.3.1 NP中的问题举例
7.3.2 P与NP问题
7.4 NP完全性
7.4.1多项式时间可归约性
7.4.2 NP完全性的定义
7.4.3库克-列文定理
7.5几个NP完全问题
7.5.1顶点覆盖问题
7.5.2哈密顿路径问题
7.5.3子集和问题
练习
问题
习题选解
第8章 空间复杂性
8.1萨维奇定理
8.2 PSPACE类
8.3 PSPACE完全性
8.3.1 TQBF问题
8.3.2博弈的必胜策略
8.3.3广义地理学
8.4 L类和NL类
8.5 N L完全性
8.6 NL等于coNL
练习
问题
习题选解
第9章 难解性
9.1层次定理
9.2相对化
9.3电路复杂性
练习
问题
习题选解
第10章 复杂性理论高级专题
10.1近似算法
10.2概率算法
10.2.1 BPP类
10.2.2素数性
10.2.3只读一次的分支程序
10.3交错式
10.3.1交错式时间与交错式空间
10.3.2多项式时间层次
10.4交互式证明系统
10.4.1图的非同构
10.4.2模型的定义
10.4.3 IP= PSPACE
10.5并行计算
10.5.1一致布尔电路
10.5.2 NC类
10.5.3 P完全性
10.6密码学
10.6.1密钥
10.6.2公钥密码系统
10.6.3单向函数
10.6.4天窗函数
练习
问题
习题选解
参考文献
索引
封底

You might also like