为什么非可计算函数比可计算函数更多?


29

我目前正在阅读有关算法和复杂性的书。目前,我正在阅读有关可计算和不可计算的函数的书,并且我的书中指出,不可计算的函数比可计算的函数多,实际上,大多数函数都是不可计算的。从某种意义上说,我可以直观地接受这一点,但是这本书没有给出正式的证明,也没有对此主题进行详尽的阐述。

我只是想看一个证明/让这里的人详细介绍一下/更严格地理解为什么不可计算的功能比可计算的功能多得多的原因。


比较两个无限集时,必须修改“更多”的语义。
拉斐尔

Answers:


31

的是可数很多可计算函数:

每个可计算函数具有至少一个算法。每个算法都有用符号从一有限组有限的描述中,例如有限使用符号二进制字符串。有限二进制串的数量表示由{ 0 1 } *是可数的(即相同的自然数的数Ñ)。{0,1}{0,1}ñ

因此,最多可以有许多可计算的函数。有至少因为对于每个可数的许多可计算函数C{01个},恒定函数是可计算。FX=C

换句话说,它们之间存在对应关系:

  • 可计算函数集
  • 算法集,
  • ,设定从有限串的{01个},和{01个}
  • ,自然数集。ñ

在另一方面,有不可数超过字符串(或自然数)的许多功能。函数(或˚F { 0 1 } *{ 0 1 } *)分配给每个输入的值。这些值中的每一个都可以彼此独立地选择。因此,有N N = 2 N个可能函数。自然数上的函数数等于实数。FññF{01个}{01个}ññ=2ñ

由于只有许多功能是可计算的,因此大多数功能不是。实际上,不可计算的函数的数量也是2ñ

如果要直观地描述一下,请考虑自然数和实数,或者有限二进制字符串和无限二进制字符串。存在比实数和有限字符串更多的实数和无限二进制字符串。换句话说,(有关这一事实的证明,请参见Cantor的对角线论点Cardinal算术)。ñ<2ñ


好答案!我不明白的是(我在这里可能会遗漏一些琐碎的事情)是如何得到ññ=2ñ
hsalin

这是基数运算。将自然数以二进制形式的自然数的无穷序列书写,这应该能带来直觉。
凯夫

为什么这个假设是正确的-“每个算法都使用有限集中的符号进行有限描述”?为什么算法没有无限的描述?
罗兰·皮拉卡斯

@RolandPihlakas是算法定义的一部分(如果您愿意,可以是计算机程序)。
卡夫

9

这是无数个不可计算的布尔函数的“显式”构造。令为某个固定的不可计算的布尔函数,说停顿问题的特征函数。考虑的函数集 ˚F = { ˚F Ñ{ 0 1 } X Ñ˚F 2 X = ķ X } 每个˚F ˚F是非可计算的,而˚Fķ

F={Fñ{01个}XñF2X=ķX}
FFF是不可数。

存在具有可计算功能的类似构造。给定一个可计算函数,让 ģ = { Ñ{ 0 1 } Ñ ÑÑ = - [R } 换句话说,ģ如果它不同于ř上有限多个值。G中的所有功能[R

G={Gñ{01个}ñññG=[R}
GG[RG是可计算的(对有限的差异进行硬编码)。与之前的情况相比,G是可数的。

因此,存在许多不可计算的函数,因为我们具有“无限多个”自由度-实际无穷大,而不是像可计算情况那样的“潜在”无穷大。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.