计算理论主题横幅
Computer Science · An Overview · Chapter 12

计算理论

THEORY OF COMPUTATION

计算理论研究计算机能做什么、不能做什么——它为计算机科学奠定了真正的科学地位。有些问题注定无解,有些问题难解到近乎无解,而"难"本身也能成为守护秘密的基石。

函数 function图灵机 Turing machine丘奇—图灵论题 Bare Bones停机问题 halting problem复杂性 complexity P 与 NP公钥密码学 RSA
《计算机科学概论》(第 13 版)Glenn Brookshear | 大学一年级 · 教学网页 | 每节含小结与课堂选择题(共 12 题,参考答案见文末)
Section 12.1 · Functions and Their Computation

12.1 函数及其计算:计算的起点

本章讨论计算机能做什么、不能做什么——即研究计算机的能力。一切从"函数"开始:我们解决问题的手段,就是计算函数。

Function · 函数

输入 → 唯一输出

函数 function:一组可能输入值与一组可能输出值之间的对应关系,它使每个可能的输入被赋予单个输出函数的计算 computation:对于一个给定的输入,确定其具体输出值的过程。

Why functions · 为什么谈函数

解决问题 = 计算函数

对函数进行计算的能力非常重要:我们能解决问题的手段就是计算函数。因此计算机科学的一个基本任务,就是找出要解决的问题背后的函数。例:排序问题背后就是"乱序表 → 有序表"这个函数。

Lookup table · 搜索表

预先记录,随用随查

把函数的输入和输出预先记录在一个表中,需要输出时只需按输入查表。这种系统很方便,但功能有限——许多函数(如 f(x)=x+1,输入有无穷多个)无法完全表示成表格

Algebraic formula · 代数式

按公式现场算

遵循代数式提供的方向,把输入/输出组合现场计算出来,如 f(x)=2x²+3x+1。这种方法更有效,但有些函数的输入/输出关系太过复杂,根本不能用代数运算来描述

Computable function · 可计算函数

算法够得着的函数

可计算函数 computable function:可以依据输入值通过算法来确定其输出值的函数。机器只能执行由算法描述的任务,所以对可计算函数的研究即是对机器能力的研究。

Noncomputable · 不可计算函数

答案是否定的

不管函数的复杂性如何,我们是否总能找到一个系统来计算它们?答案是否定的。不可计算函数:计算超出了任何算法系统的能力范围而无法计算的函数。

补充概念:可决定问题 decidable problem 是可以构造算法来对所有输入回答"是"或"否"的问题,例如"这个数字是偶数吗?";构造不出这种算法的问题就是不可决定问题
本节小结 · SUMMARY(12.1)
  • 函数 = 输入到唯一输出的对应;解决问题 = 计算函数。
  • 两条计算路径:搜索表(方便但有限)与代数式(有效但描述不了一切)。
  • 关键事实:并非总能找到系统来计算一个函数——存在不可计算函数。
Q1

关于函数(function),正确的是?

A每个输入可以对应多个输出
B函数是输入值与输出值之间的对应关系,每个输入赋予单个输出
C所有函数都能列成完整的搜索表
D所有函数都能用代数式描述
答案 B。函数的定义就是"每个输入 → 单个输出"的对应关系;搜索表和代数式都描述不了所有函数。
Q2

下列哪一个是可计算函数(computable function)?

A输入任何程序,输出它是否停机
B输入任何命题,输出它是真是假
C输入整数 x,输出 2x²+3x+1 的值
D输入任何函数,输出它的"美观程度"
答案 C。代数式函数可以逐步计算;A 是停机函数,12.4 将证明它不可计算。
Section 12.2 · Turing Machines

12.2 图灵机:研究算法能力的工具

图灵机由艾伦·图灵于 1936 年提出——比第一台电子计算机还早,是先有理论、后有机器。它是被用作研究算法能力的一种工具。

Turing machine · 图灵机

控制单元 + 读/写磁头 + 磁带

图灵机 Turing machine:由一个控制单元组成,它能够通过一个读/写磁头对磁带上的符号进行读和写。磁带两端可以无限延伸,并分成一个个单元,每个单元可以包含符号的任意一个有限集合,这个集合称为机器的字母表 alphabet

One step · 每一步做什么

读 → 写 → 移 → 换状态

每一步都:① 观察当前磁带单元的符号;② 将符号写进这个单元;③ 可能将读/写磁头左移或右移一个单元;④ 改变状态。要执行的确切操作由程序决定——程序通过"机器的状态 + 磁带当前单元的内容"告诉控制单元做什么。

Start & halt · 开始与停止

初始状态 → 停止状态

计算开始于一个特定的状态,称为初始状态 initial state;停止于另一个特定状态,称为停止状态 halt state。磁带上的符号串是输入,停机时磁带上的内容就是输出。

Church–Turing thesis · 丘奇—图灵论题

可计算函数 = 图灵可计算函数

图灵可计算函数:以图灵机的方式计算的函数。图灵机的计算能力囊括了任何算法系统的能力:可计算函数等同于图灵可计算函数。图灵机被确立为标准——能计算所有图灵可计算函数的系统,就和任何计算系统一样强大。

图灵机示意
图灵机模型:无限延伸的磁带被分成一个个单元,读/写磁头每次对准一个单元,按程序的规则读符号、写符号、左右移动、更换状态——如此简单的装置,却能表达一切可计算的函数。

动画演示:一台真正的图灵机

这台微型图灵机的任务:把磁带上的连续 1 向右"搬运"一格(程序:读到 1 → 写 0、右移、保持状态;读到 0 → 写 1、停机)。点击"开始运行",观察读/写磁头逐步移动、磁带内容被改写,直到进入停止状态。
当前状态:START · 等待运行
规则:读 1 → 写 0,右移;读 0 → 写 1,停机(HALT)
本节小结 · SUMMARY(12.2)
  • 图灵机 = 控制单元 + 读写磁头 + 无限磁带;每步:读符号 → 写符号 → 移动 → 换状态。
  • 丘奇—图灵论题:可计算函数等同于图灵可计算函数;图灵机是衡量一切计算系统的标准。
  • 判断一个计算模型够不够强,就看它能不能模拟图灵机。
Q3

图灵机的每一步不包括下列哪个动作?

A观察当前磁带单元的符号
B向当前单元写入符号
C读/写磁头左移或右移一个单元
D与另一台图灵机交换磁带
答案 D。图灵机每步只有四个动作:读符号 → 写符号 → 移动磁头 → 换状态;没有"交换磁带"这种操作。
Q4

丘奇—图灵论题(Church–Turing thesis)说的是?

A图灵机是最快的计算机
B可计算函数等同于图灵可计算函数
C所有问题都能用图灵机解决
D图灵机只能计算加减法
答案 B。它是论题而非定理:无法证明,但至今没有反例。C 恰好说反——12.4 会给出图灵机也算不出的函数。
Section 12.3 · Universal Programming Languages

12.3 通用程序设计语言:Bare Bones

通用程序设计语言(universal programming language):指用来表达计算所有图灵可计算函数的指令性程序设计语言。它包含在高级语言之中,是高级语言的基础和内核。

Bare Bones · "裸露的骨头"

不能再分割的最小集合

Bare Bones 语言是从通用程序设计语言中分离出来的需求的最小集合——它是通用程序设计语言的核心,已经不能再"分割"下去了。用它写实用程序并不合适,但它确实能写出任何可计算的程序。

Universality · 通用性

麻雀虽小,五脏俱全

每种高级语言实质上都包含 Bare Bones 语言的特性并将其作为核心——正是这个核心保证了每种语言的通用性,其余特性都是为了方便使用才引入的。

# Bare Bones 的全部语句(变量只能取非负整数) clear name # 把变量置 0 incr name # 变量加 1 decr name # 变量减 1(已为 0 则保持不变) while name not 0: # 只要变量非 0,就重复执行缩进的语句块 ...
# 例:把 X 的值搬到 Z(注意副作用:X 被清零) clear Z while X not 0: incr Z decr X
循环控制是程序员的责任:如果循环体里不改变 while 检查的变量,就会陷入死循环——例如 incr X 之后 while X not 0: incr Z 永远不会停。教材还用嵌套的 while 写出了计算 X×Y 的完整 Bare Bones 程序。
Why learn it · 为什么学它

看清高级语言的本质

学习 Bare Bones 的目的,是加深对高级程序设计语言的理解——知道它们能够解决计算问题的基本原理:剥掉语法糖,剩下的内核不过如此。

Copy as shorthand · 以 copy 为速写

没有 copy,也能"造"出 copy

Bare Bones 没有 copy 指令,但可以用两个 while 循环加一个辅助变量实现等效效果——于是教材把 copy name1 to name2 当作速写记号。这正是高级语言"个性"由内核搭出来的缩影。

本节小结 · SUMMARY(12.3)
  • 通用程序设计语言 = 能表达计算所有图灵可计算函数的语言;是高级语言的内核。
  • Bare Bones 只有 clear / incr / decr / while 四条语句,却与任何高级语言一样强大(通用性)。
  • 少即是多:四条语句 = 一切高级语言的内核;循环控制要靠自己维护,否则死循环。
Q5

Bare Bones 语言不包含下列哪条语句?

Aclear name
Bincr name
Cdecr name
Dprint name
答案 D。Bare Bones 只有 clear / incr / decr / while 四条语句,连 copy 都是靠 while 循环"造"出来的速写。
Q6

关于 Bare Bones 的通用性,正确的是?

A它功能太弱,不能写真正的程序
B每种高级语言都以它的特性为核心,它与其他语言一样强大
C它只能做加法,不能做乘法
D它比 Python 更易学易用
答案 B。通用性 = 能表达一切图灵可计算函数;嵌套 while 可实现乘法。它不适合实用编程,但能力不打折。
Section 12.4 · A Noncomputable Function

12.4 一个不可计算的函数:停机问题

一个函数,不是图灵可计算的;根据丘奇—图灵论题,它在一般意义上也不可计算——这个函数的计算超出了计算机的计算能力。

Halting problem · 停机问题

提前预测程序会不会停

停机问题 halting problem:要提前预测到当一个程序在某个条件下开始后,是否能够终止(或者说停止)的问题。停机问题只是不可计算函数的一个实例——背后的"停机函数":输入是程序的编码,自终止的程序输出 1,否则输出 0。

Self-terminating · 自终止

以自己为输入时会停吗

关键技巧:让程序以"自己的编码"作为输入运行。能停 = 自终止(self-terminating);不停 = 非自终止。对某个具体程序,我们常能单独判断——但停机问题要的是一个对所有程序都管用的通用算法

停机问题与自指
停机问题的证明依赖"自指":让程序分析它自己。能判断某个具体程序停不停,不等于存在对一切程序都有效的通用判定算法——后者被证明不存在。
Proof by contradiction · 反证法

假设它能算,就出了鬼:四步推出矛盾

1
假设停机函数可计算 → 存在一个程序:输入任何程序的编码,若它自终止则以 X=1 停机,否则以 X=0 停机。
2
改造:在这个程序末尾加一段 while X not 0:(空循环)——X=1 时永远循环,X=0 时跳过循环直接停机。
3
自指:让这个新程序以它自己的编码为输入。若它自终止 → X=1 → 陷入死循环 → 它并不自终止;若它不自终止 → X=0 → 立即停机 → 它是自终止的。
4
矛盾:两头都说不通 ⇒ 假设不成立。停机函数不可计算,停机问题是不可解决问题 unsolvable problem——一些问题无法用算法解决。
本节小结 · SUMMARY(12.4)
  • 停机问题 = 判断任意程序对给定输入是否终止;它是不可计算的停机函数的化身。
  • 反证法四步:假设可算 → 加一个 while 死循环 → 以自己为输入 → "停则不停、不停则停",矛盾。
  • 结论:一些问题无法用算法解决——这超出了任何计算机算法系统的能力范围。
Q7

停机问题(halting problem)研究的是?

A如何手动关掉死机的电脑
B提前预测程序在某输入下启动后是否会终止
C如何缩短程序的运行时间
D程序会占用多少内存
答案 B。停机问题要的是"提前预测是否终止"的通用算法;它被证明不存在。
Q8

停机问题不可解的证明使用的关键技巧是?

A穷举所有程序逐一测试
B让改造后的程序以自己的编码为输入,得出自相矛盾
C统计历史上所有死循环的比例
D测量计算机的最长连续开机时间
答案 B。反证法 + 自指:假设可算 → 加死循环 → 以自己为输入 → "停则不停、不停则停",矛盾。

SECTION 12.5

12.5 问题的复杂性 Complexity of Problems

同一台图灵机既能几秒算出结果、也能算到天荒地老——差别在于问题本身的“难度”。这一节用时间复杂性给问题分级:P(多项式时间可解)、NP(非确定性多项式)、NP 完全(NP 中最难),并引出计算机科学最著名的悬案——P 是否等于 NP

01

时间复杂性 Time complexity

The number of instruction executions required to solve a problem — how the running time grows with input size.

中:解决一个问题所需执行的指令条数(随输入规模增长的趋势)。与之并列的还有空间复杂性 space complexity(所需存储空间),它永远不会比时间增长得更快。

例:顺序搜索 n 个名字约需 n 次比较 → Θ(n);二分搜索只需 Θ(log₂ n)。

02

Θ 大西塔记法 Theta notation

f(n) is bounded by Θ(g(n)) if f eventually grows no faster than some constant multiple of g.

中:若从某项起 f(n) 始终不超过 g(n) 的常数倍,就说 f(n) 以 g(n) 为界,记 f(n) ∈ Θ(g(n))。它忽略常数与低阶项,只抓“增长级别”。

例:3n²+5n 与 100n² 同属 Θ(n²);归并排序 ∈ Θ(n·log₂ n)。

03

问题的复杂性 Complexity of a problem

The complexity of the problem's best (simplest) known solution algorithm.

中:用该问题最优(最简单)解法的复杂性来定义问题本身的复杂性——笨算法慢不代表问题难。

例:在已排序名单中查找,复杂性是 Θ(log₂ n)(二分),而不是顺序搜索的 Θ(n)。

04

多项式问题 · P Polynomial problems

Problems solvable in time bounded by a polynomial of the input size — the class P.

中:其解的复杂性以多项式为界的问题,称为多项式问题,全体记作 P。多项式时间被视为“合理时间 reasonable time”,P 问题被认为是易解的 tractable

例:排序 Θ(n·log₂ n)、查找 Θ(log₂ n)、两点间最短路——都属于 P。

05

难解问题 Intractable problems

Problems in P's complement whose best solutions require more than polynomial time (e.g. 2ⁿ).

中:不在 P 中的问题——最优解也需要指数级(如 2ⁿ)甚至更多时间,实际中无法求解大规模实例。

例:从 n 人中列出所有可能的小组有 2ⁿ−1 个,n=50 时穷举需上万年;“x+y=z 吗”若 x,y 是任意实数也永不可答。

06

非确定性算法 Nondeterministic algorithm

An algorithm containing nondeterministic instructions whose execution may depend on the executor's creative guess.

中:含有非确定性指令的算法:同一输入在不同执行中可采取不同动作(仿佛能“幸运地猜对”)。它不是日常程序,而是分析问题难度的理论工具。

例:“猜一个满足条件的小组,再验证”——验证是多项式的,猜对靠运气。

07

NP 问题 Nondeterministic polynomial

Problems solvable in polynomial time by a nondeterministic algorithm.

中:由非确定性算法在多项式时间内可解的问题构成 NP。显然 P ⊆ NP(确定性算法只是不“猜”的特例),但是否 P = NP 无人知晓。

例:旅行商问题——猜一条路线并验证它是否足够短,验证只要多项式时间。

08

旅行商问题 Traveling salesperson problem

Find a route visiting every city exactly once with total length under a given bound.

中:求一条访问每座城市恰好一次、且总长度不超过给定上界的巡回路线。它属于 NP,且已被证明是 NP 完全的。

例:快递配送、电路板钻孔路径规划,都是它的化身。

09

NP 完全 NP-complete

NP problems so hard that a polynomial-time deterministic solution to any one of them would solve all of NP (P = NP).

中:NP 中“最难”的一批问题:只要其中任何一个存在多项式时间的确定性解,所有 NP 问题都有,即 P = NP。

例:旅行商问题、图着色、背包问题——几十年来无人找到多项式解,也无人能证明不存在。

10

P = NP?The famous open question

Whether every efficiently verifiable problem is also efficiently solvable — the most famous unsolved question in computer science.

中:“容易验证答案的问题,是否也容易求解?”——这是计算机科学最著名的未解难题(悬赏百万美元的千禧年难题之一)。主流猜测是 P ≠ NP。

例:若 P = NP,则 RSA 等基于“难分解”的密码体系将瞬间崩塌。

11

启发式方法 Heuristics

Practical approximate methods used when exact solutions are too slow.

中:面对难解问题,人们转而寻找足够好的近似解,而非精确解——这是人工智能与工程实践中的常用策略。

例:自然语言理解的句法识别、网络路由选择、下棋程序的走子决策都用启发式。

12

一张图看清分类 The big picture

All problems → decidable vs undecidable; decidable → tractable (P) vs intractable; NP sits in between.

中:所有问题 → 可解 / 不可解(停机问题);可解问题 → 易解(P)/ 难解;NP 介于其间,NP 完全问题是 NP 难度的顶峰。

例:排序 ∈ P ⊂ NP ⊂ 可解问题;停机问题在“可解”之外。

本节小结 · Summary
  • 时间复杂性衡量执行步数随输入规模的增长;问题复杂性取决于其最优算法的 Θ 级别。
  • 多项式时间 = 合理时间,此类问题构成 P;指数级问题难解
  • NP = 非确定性多项式可解;NP 完全(如旅行商问题)若有一个多项式解,则 P = NP。
  • P = NP? 是最著名的开放问题;实践中对难解问题退而求其次,用启发式求近似解。
Q09 · 12.5

一个问题的复杂性,是指什么?

A解决该问题所有算法的平均复杂性
B解决该问题的最优(最简单)算法的复杂性
C解决该问题所需占用的存储空间大小
D编写解决该问题的程序所需的代码行数
教材定义:问题的复杂性 = 该问题最优解法的复杂性。用一个笨办法解得慢,并不能说明问题本身难——例如排序用冒泡是 Θ(n²),但问题本身属于 Θ(n·log₂ n)。
Q10 · 12.5

关于 P、NP 与 NP 完全问题,下列说法正确的是?

A已经证明 P = NP
B任一 NP 完全问题若找到多项式时间确定性解,则所有 NP 问题都有,即 P = NP
CNP 问题都不属于 P
D旅行商问题属于 P,所以快递路径规划很容易
P = NP? 至今悬而未决(A 错);P ⊆ NP,所以 NP 中的易解问题也属于 P(C 错);旅行商问题是 NP 完全问题(D 错)。B 正是 NP 完全性的定义。

SECTION *12.6

*12.6 公钥密码学 Public-key Cryptography

本章是选学内容,却是计算理论最漂亮的应用:利用“正向容易、逆向极难”的计算不对称性,让加密密钥可以公开而解密仍然安全——这就是 RSA 公钥密码体制,也是今天网上银行、HTTPS 的数学基石。

公钥密码学:公开的锁与私有的钥匙
公钥像一把人人可得的挂锁(只能锁上),私钥是唯一能把锁打开的钥匙
01

RSA 算法 RSA algorithm

A popular public-key encryption system named after Rivest, Shamir and Adleman.

中:最著名的公钥加密体制(以三位发明者姓氏命名),1977 年提出,至今仍广泛用于安全通信。

例:浏览器地址栏的小锁(HTTPS)、数字签名背后常有 RSA 或其近亲算法。

02

公钥与私钥 Public / private key

An encrypting key that can be made public, paired with a decrypting key kept secret.

中:公钥密码体制中,加密密钥(公钥,记 (e, n))可以广泛分发,解密密钥(私钥,记 (d, n))必须保密。知道公钥并不能推出私钥。

例:你把公钥挂在主页上,任何人都能给你发加密邮件,但只有你能读。

03

造一对钥匙 Key generation

Pick distinct primes p, q; set n = pq; choose e, d with e×d = k(p−1)(q−1) + 1.

中:① 选两个不同的大素数 p、q;② 令 n = p×q;③ 选取 e、d,使 e×d = k(p−1)(q−1) + 1(k 为某整数)。公钥 = (e, n),私钥 = (d, n)。

记号:x % m 表示 x 除以 m 的余数(取模)。

04

加密与解密 Encrypt & decrypt

Encrypt: c = mᵉ % n. Decrypt: cᵈ % n = mᵉˣᵈ % n = m.

中:把消息编码为数值 m,加密得密文 c = mᵉ % n;解密算 cᵈ % n = mᵉˣᵈ % n = m。数学依据是 1 = mk(p−1)(q−1) % pq(欧拉定理的推论)。

例:e×d = k(p−1)(q−1)+1,故 mᵉˣᵈ % n = m¹ = m,原文完璧归赵。

05

为什么安全 Why it is safe

Breaking RSA requires factoring n back into p and q — a task taking years for keys of hundreds of bits.

中:攻击者只知 (e, n),要推出 d 必须先把 n 分解回 p、q。当 n 有数百位二进制位时,大数分解即使用超级计算机也要数年——这就是 12.5 节“难解问题”的实战价值。

例:至今没有人找到不掌握密钥却能有效解密 RSA 的方法。

06

计算理论的胜利 Theory in action

Cryptography turns computational hardness from a nuisance into a shield.

中:难解问题并非总是坏事——密码学正是利用“正向计算易、逆向求解难”的不对称性构筑安全。若有一天 P = NP 且分解变容易,整个体系就需重建。

例:量子计算的 Shor 算法能高效分解大数,因此“后量子密码”已成为研究热点。

本节小结 · Summary
  • 公钥密码体制:加密密钥(公钥 (e,n))公开,解密密钥(私钥 (d,n))保密。
  • RSA 造钥:n = pq(p、q 为大素数),e×d = k(p−1)(q−1) + 1;加密 c = mᵉ % n,解密 cᵈ % n = m。
  • 安全性基于大数分解的难解性——计算复杂性理论成为信息安全的盾牌。
Q11 · *12.6

在 RSA 公钥密码体制中,可以安全地广泛分发的是?

A解密密钥 (d, n)
B加密密钥 (e, n),即公钥
C两个大素数 p 和 q
D乘积 (p−1)(q−1)
公钥体制的核心思想就是加密密钥可以公开——任何人都能用它加密,但没有私钥 d 就无法解密。p、q 与 (p−1)(q−1) 一旦泄露,d 就能被算出,必须保密。
Q12 · *12.6

RSA 的安全性主要依赖于哪一事实?

A加密算法本身对外保密,攻击者不知道规则
B把大整数 n 分解回素数 p、q 极其耗时(大数分解难题)
C每台计算机的运算速度都不够快
D素数 p、q 是随机产生的,无法预测
RSA 的算法完全公开,安全不靠“保密算法”(A 错),而靠数学难题:已知 n 求 p、q 需要的时间随位数指数增长,数百位的 n 即使用超级计算机也要算很多年。

ANSWER KEY

参考答案 Answer Key

12 道课堂练习题的参考答案速查。建议先独立完成,再对照解析查漏补缺。

01B函数:每个输入只赋予单个输出的对应关系(一对一、多对一均可,一对多不行)
02C可计算函数:存在算法能确定输出值,如输出 2x²+3x+1
03D图灵机每一步 = 读符号 → 写符号 → 移动磁头 → 改变状态;不与别的图灵机交换磁带
04B丘奇—图灵论题:可计算函数恰好就是图灵机可计算的函数
05DBare Bones 只有 clear / incr / decr / while 四种语句,没有 print name
06B通用性:Bare Bones 足以表达所有图灵可计算函数,是高级语言的核心
07B停机问题:给定任意程序及其输入,预测该程序是否会终止
08B反证法关键一步:把改造后的程序作用于它自身的编码,得出自相矛盾
09B问题的复杂性 = 最优(最简单)算法的复杂性
10BNP 完全:一个有多项式解 ⇒ 所有 NP 都有 ⇒ P = NP
11B可公开的是加密密钥(公钥 (e, n));私钥、p、q 都必须保密
12B安全性基于大数分解难题:把 n 分解回 p、q 需要数年
答案速记:1B · 2C · 3D · 4B · 5D · 6B · 7B · 8B · 9B · 10B · 11B · 12B

GLOSSARY

术语速查 Glossary

函数function
计算computation
查找表lookup table
代数公式algebraic formula
可计算函数computable function
不可计算函数noncomputable function
可判定问题decidable problem
图灵机Turing machine
控制单元control unit
读/写磁头read/write head
磁带 / 单元格tape / cell
字母表alphabet
状态state
初始 / 停机状态initial / halt state
丘奇—图灵论题Church–Turing thesis
通用程序设计语言universal programming language
原语primitive
停机问题halting problem
自终止self-terminating
不可解问题unsolvable problem
时间复杂性time complexity
空间复杂性space complexity
大西塔记法theta notation Θ
多项式问题polynomial problem
P 类class P
难解问题intractable problem
非确定性算法nondeterministic algorithm
NP 类class NP
NP 完全NP-complete
旅行商问题traveling salesperson problem
启发式方法heuristics
公钥密码学public-key cryptography
RSA 算法RSA algorithm
加密 / 解密密钥encrypting / decrypting key
大数分解integer factorization