为什么我们可以假设算法可以表示为位字符串?


17

我开始读一本关于计算复杂性和图灵机的书。这是报价:

一旦确定某种规范编码,就可以将算法(即机器)表示为位字符串。

提供此断言只是一个简单的事实,但我无法理解。

例如,如果我有一个算法,将作为输入并计算或:x + 1 2XX+1个2

int function (int x){
   x = x + 1; 
   return x**2; 
}

如何使用字母将其表示为字符串?{01个}


38
您不了解了解文本编码方式所需的绝对最低限度知识。今天是学习的好日子!joelonsoftware.com/2003/10/08/…–
埃里克·利珀特

1
我认为基于引用文本中的歧义,OP可能会从不同的角度出发。我猜OP的意思是“如何将整个机器和算法构建为一个字符串”,而不是图灵机本身的输入。引用的文字暗示着整个算法可以自我执行,但是utf编码的c语言中的任何内容都没有说明机器如何实际作用于该字符串。
Sentinel

3
...我认为这里的每个人都误解了消息来源,并且开了个玩笑,以牺牲罗姆人的经验为代价。这些评论和答案中的大多数都在谈论对文本进行编码以进行任意传输,而引言则是在谈论对图灵机使用的算法进行编码。第二句中的(当前)接受的答案至少与之相关。
伊兹卡塔'18 -4-6

2
@Izkata我不确定您是否知道由于通用性,这两个语句是等效的。
康拉德·鲁道夫

15
有趣的是,为了让我能够阅读您的编码算法,您必须在键入它后立即将其转换为一系列位。从键盘到显示器,它的表示方式从未不同。它仅在我们心中具有非二进制表示形式。在生理层面上,当您观察突触时,甚至是值得商bat的。
彼得-恢复莫妮卡

Answers:


45

对于您的问题,最幼稚和最简单的答案是,所提供的代码(和编译的机器代码)实际上以{0,1} *的语法字符串表示。此外,由于您是在谈论图灵机,因此它们运行的​​程序是线性的操作/指令列表,因此没有理由不能将它们表示为位/字节。


您如何准确地将图灵机表示为说明列表?通常的定义是这样的
svick

@svick如以下我的回答中所述,您使用通用TM,它将TM的描述作为输入(以适当的方式编码)
dseuss

@svick一种具有简单指令的编程语言,可以在磁带上移动指针?我相信这种例子可能是深奥的编程语言Brainfuck示例代码
LukStorms

@LukStorms我认为您再也不能称其为“车床”了。
svick

52

您已经将该功能表示为文本。使用ASCII编码将每个字符转换为一个字节的值。那么结果是一个字节序列,即,比特的序列,即,一个字符串在字母表。那是编码的一个例子。{01个}


究竟。正如我上面所说的,这是在罗马写这本书时发生的。甚至我在监视器上看到的字形都是黑白像素,即二进制信息,是通过二进制数据连接从二进制存储器通过二进制控制器连接到二进制网络的二进制数据连接上发送的。是否可以将每个算法表示为位字符串?不仅如此:除非您将自己局限于模拟媒体和面对面的交流,否则这是不可避免的
彼得-恢复莫妮卡

@ PeterA.Schneider使用模拟媒体或面对面不一定表示没有嵌入式离散编码。使用自然语言与使用离散编码并不遥远,不是吗?
Jean-BaptisteYunès18年

32

我无法抗拒...

⡂⡀⣀⢀⣄⡀⣰⡉⡀⠀⡀⡀⣀⠀⢀⣀⢀⣄⡀⡂⢀⣀⡀⢀⢀⡀⠀⡰⣀⠀⣀⠀⡂⡀⣀⢀⣄⡰⡀⢠⠂
⡇⡏⠀⡇⡇⠀⢸⠀⡇⢀⡇⡏⠀⡇⣏⠀⠀⡇⠀⡇⣏⠀⣹⢸⠁⢸⠀⡇⢈⠷⡁⠀⡇⡏⠀⡇⡇⠀⡇⢼⠀
⠁⠁⠀⠁⠈⠁⠈⠀⠈⠁⠁⠁⠀⠁⠈⠉⠀⠈⠁⠁⠈⠉⠁⠈⠀⠈⠀⠱⠉⠀⠉⠀⠁⠁⠀⠁⠈⠱⠁⠘⠄
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⢤⡀⡤⠀⣀⣀⣀⠀⢤⡀⡤⠀⠀⢰⠀⠀⢹⠠⠀
⠀⠀⠀⣠⠛⣄⠀⠒⠒⠒⠀⣠⠛⣄⠀⠉⢹⠉⠁⢸⢀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠀
⠀⠀⠀⣄⢄⠤⢄⢴⠤⢠⠀⢠⢠⡠⢠⡠⢄⠀⢤⡀⡤⢺⡖⠐⣷⠂⠊⢉⡆
⠀⠀⠀⡇⠸⣍⣉⠸⣀⠸⣀⢼⢸⠀⢸⠀⢸⠀⣠⠛⣄⠀⠀⠀⠀⠀⣴⣋⡀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀

⢱⠀
⢸⠁
⠊

(上面的点代表一个,空白代表零)。


5
有趣的(+1),但是它强调了编码的本质上任意性。
约翰·科尔曼

4
乐于为此编写编译器:)
Barmar,


1
@Barmar听起来像是codegolf.stackexchange.com的挑战
IMSoP

1
@RomaKarageorgievich 这是对盲文字符进行渲染的函数这是一个简单的包装程序,允许从命令行调用它。
leftaboutabout

13

你的电脑卖场一切,序列01,包括您键入要问它是怎么做的问题。例如,每个字母和符号都用8位表示(我说的是过去的样子,如今是16位,并且更复杂)。您可以在这里看到它们。好吧,它们不是在显示位,而是在显示十六进制和八进制代码。您知道如何将数字转换为数字表示吗?


6
仅在Windows以及某些使用UTF-16的库(例如Qt或ICU)中,它只有16个字节。而且,即使在UTF-32中,甚至不是所有字母都通常采用单个代码单位,因此它们可能更长。因此,我认为在本次讨论中坚持使用ASCII更好,将Unicode引入此处将导致相当复杂。
Ruslan

8

该概念背后的基本假设是“ 教堂-图灵”理论。很难看到任何算法都可以表示为一串比特,因为术语“算法”可能是用非常非正式的术语来考虑的。在Church-Turing论文中,他们使用非常严格的概念定义了什么是算法(甚至那时还存在一些有关单词的问题)。然而,他们的术语变得如此多的晃动,它有时会认为,这些定义对于喜欢“算法”的话是如此有效,我们简单地接受他们成为定义。

Church-Turing指出,每种算法都可以在Turing Machine上实现为计算。鉴于图灵机的描述是一组有限的值,因此很容易看到如何将该描述映射到一个数字序列,然后再映射到一个0和1的序列。

正如其他答案提到的那样,使用ASCII编码或其他编码来表示示例算法很简单。

我认为您的书之所以说这句话是事实,是因为许多人只是简单地使用Church-Turing论文作为其算法定义的基础。如果使用这样的定义,则事实与“ 5是数字”一样明显,因为您基本上是这样定义的。


9
Church-Turing命题不是一个定理,它不涉及算法概念的任何定义,这是一个非正式的概念。我也认为没有必要为此援引Church-Turing论文。有些对象可以表示为有限字符串而有些对象不能表示的“深层”原因是,有些集合是可数的,而有些则不是。
quicksort '18 -4-5

我看到“如果在机器规范的组件和语言的字符串集之间指定注入,则算法可以编码为字符串。” OP在他的示例中做到了这一点,以“ $(x + 1)^ 2 $ ”表示的机器并以格式良好的C(或BCPL,C ++等)功能的语言将其重新表示为字符串。 。
Eric

1
@EricTowers确实需要教堂图灵论文。否则,不能确定是否存在所有算法的机器规范。
Cort Ammon-恢复莫妮卡

1
我断言“无法表达无限数量的符号的算法”。这样的表达式必须使用不计其数的符号,否则,可以用较小的子语言表示。此外,在无限字母上的任何(非愚蠢的)表达在其几乎所有符号中都具有无限量的熵,因此无法表达(即,实际上无法与接收者通信)。所有最终逻辑都拒绝对这样的无限字符串进行操作,而且我不知道会允许在无数字符串上工作的无限逻辑。
埃里克·塔

1
评论不作进一步讨论;此对话已转移至聊天
DW

4

该声明基于通用TM的存在。这些基本上是可编程的TM,可以模拟最多具有多边形开销的任何其他TM。因此,您的程序只是输入中编码为零和一的一部分。


1
@Discretelizard,我没有关注您。任何算法都可以表示为通用TM的输入。语言可以是可计算的或不可计算的;我对算法的可计算性的任何标准概念都不熟悉,所以我不确定您要做什么。拥有无法计算的算法意味着什么?也许您在考虑不一定要终止的算法?但是通用TM仍可以运行此类算法。
DW

@Discretelizard我也没有关注您。在图灵机上可运行实际上是算法的定义。我想您可以为一个图灵机谈论一个“算法”,比如说一个带有暂停问题预言的图灵机,但是,通常,“算法”是指“您可以在图灵机上完成的事情”。
David Richerby

@DavidRicherby确实,我想算法的实际定义更加严格。但是,这个问题是关于为什么我们施加更宽松的限制,并且我认为有一个更强的限制不是很有启发性。
离散蜥蜴

4

好吧,让我们谈谈对于任何类型的编码都不能表示为有限位字符串的算法。

让我为您键入一个这样的算法...啊,但是如果这样做,我可以使用我输入的文本的编码来表示该算法。

如何用一些“模拟方式”来表示我的算法,比如说我桌子上几个硬币的位置。尽管这些硬币的位置可以用一些实数建模(在某些编码中不可能有限地表示),但整个描述仍可以视为我的算法的代表,并且可以再次编码为位串!

我希望这些示例可以清楚地表明,如果某些算法不能用有限的位字符串表示,那么我们根本就无法描述该算法!

那么,为什么我们要考虑存在一个我们不能说的东西呢?也许对哲学很有趣,但对科学却不有趣。因此,我们定义算法的概念,以便可以用位字符串表示它,因为我们至少知道我们能够谈论所有算法。


尽管上面的问题回答了问题,但我认为对给出的示例的困惑主要是由于这样的事实,即表示只需要唯一地表示某种算法。表示方式不需要涉及算法调用的实际计算!这非常有用,因为这意味着我们也可以表示无争议的算法!


[R一种[R

1
一种[R[R


[R

@Raphael是的,是吗?不可能写下无数的算法也就不足为奇了。再一次,您声称自己“表达”了一些无法写下来的算法。我不明白您所说的“表达”是什么意思,但它似乎至少暗示着表达。由于我的主张始于表示算法的假设,因此我看不到这与我的主张相矛盾。
离散蜥蜴

2

另一种看待这种情况的方法是通过信息论。有意义/有用信息/问题的所有编码都可以制成二进制“序列”。

许多领域都提出了这样一个问题:“用最少的平均数量的问题来传达有意义的信息的方式是什么?” 在实践中,这与“问最少数量的是/否问题以了解所传达或说的是什么的最佳方法是什么?”

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.