鱼的英文怎么说-初二地理复习提纲
2023年4月4日发(作者:人力资源管理师三级考试内容)
什么是图灵完备性(Turingcomplete)?
这是⼀篇旨在帮助理解图灵机及相关概念是什么,⽽⾮证明其正确性的回答,它包含以下内容:
1.什么是图灵机
2.图灵机可以解决什么问题
3.什么是图灵完备
4.直观理解图灵完备——Brainfuck语⾔
1.什么是图灵机
图灵机(TuringMachine)是图灵在1936年发表的\"OnComputableNumbers,withanApplicationtothe
Entscheidungsproblem\"(《论可计算数及其在判定性问题上的应⽤》)中提出的数学模型。既然是数学模型,它就并⾮⼀个实体概念,
⽽是架空的⼀个想法。在⽂章中图灵描述了它是什么,并且证明了,只要图灵机可以被实现,就可以⽤来解决任何可计算问题。
图灵机的结构包括以下⼏个部分:
1.⼀条⽆限长的纸带(tape),纸带被分成⼀个个相邻的格⼦(square),每个格⼦都可以写上⾄多⼀个字符(symbol)。
2.⼀个字符表(alphabet),即字符的集合,它包含纸带上可能出现的所有字符。其中包含⼀个特殊的空⽩字符(blank),意思是此
格⼦没有任何字符。
3.⼀个读写头(head),可理解为指向其中⼀个格⼦的指针。它可以读取/擦除/写⼊当前格⼦的内容,此外也可以每次向左/右移动⼀
个格⼦。
4.⼀个状司马懿后代下场有多惨 态寄存器(stateregister),它追踪着每⼀步运算过程中,整个机器所处的状态(运淡妆浓抹的意思 ⾏/终⽌)。当这个状态从运⾏变为终
⽌,则运算结束,机器停机并交回控制权。如果你了解有限状态机,它便对应着有限状态机⾥的状态。
5.⼀个有限的指令集(instructionstable),它记录着读写头在特定情况下应该执⾏的⾏为。可以想象读写头随⾝有⼀本操作指南,⾥
⾯记录着很多条类似于“当你⾝处编号53的格⼦并看到其内容为0时,擦除,改写为1,并向右移⼀格。此外,令下⼀状态为运⾏。
”这样的命令。其实某种意义上,这个指令集就对应着程序员所写下的程序了。
图灵机结构
在计算开始前,纸带可以是完全空⽩,也可以在某些格⼦⾥预先就有写上部分字符作为输⼊。运算开始时,读写头从某⼀位置开始,严格按
照此刻的配置(configuration),即:
当前所处位置
当前格⼦内容
来⼀步步的对照着指令集去进⾏操作,直到状态变为停⽌,运算结束。⽽后纸带上留下的信息,即字符的序列(⽐如类
似“...”)便作为输出,由⼈来解码为⾃然语⾔。
要重申⼀下,以上只是图灵机模型的内容,⽽⾮具体的实现。所谓的纸带和读写头都只是图灵提出的抽象概念。为便于理解打⼀个⽐⽅。算
盘虽然不是图灵机(因为它没有⽆限长的纸带,即⽆限的存储空间),但它的⾏为与图灵机⼀致。每⼀串算珠都是纸带上的⼀格,⼀串算珠
上展⽰的数字便记录着当前格中的字符(可以是空⽩,可以是12345)。⼈类的⼿即是读写头,可以更改每串算珠的状态。算盘的运⾏遵
循⼈脑中的算法,当算法结束,算盘停机。
2.图灵机可以解决什么问题
在⽂章中,图灵所做的事是证明了,假设上述模型⾥所说的功能都能被以某种形式物理实现,那么任意可计算问题都可以被解决。这⾥所说
的可计算问题,涉及到计算理论(ComputationTheory)的概念。这个领域的概念很繁杂,先简单梳理⼀下。
在计算机领域,或者说⾃动机领域,我们研究的⼀切问题都是计算问题(ComputationalProblem)。它泛指⼀切与计算相关的问题。
Acomputationalproblemisamathematicalobjectrepresentingacollectionofquestionsthatcomputersmightbeable
tosolve.
计算问题的⼀些举例:
1.给定⼀个正整数n,判断它是否是质数
2.给定⼀个01序列,把它们按位取反
3.给定⼀个字符串,判断某个字符是否存在,及查找存在位置
4.给定⼀个逻辑蕴含的命题,求它的逆否命题
⾮计算问题的例⼦:
今晚吃什么
为什么太阳从东边升起
计算问题有的可以解决,有的不可解决。这就引出了计算问题的可计算性(Computability)。它可以被理解为“是否存在⼀个算法,能解
决在任何输⼊下的此计算问题”。如上⾯的问题1,我们当然可以找到⼀个算法来解决判断任意正整数n是否为质数的问题(⽐如从2遍历
到n-1,看n是否可以整除它)。所以,问题1就是可计算的。
也有⼀些不可计算的计算问题,⽐如著名的停机问题(HaltingProblem)。它的表述是这样庐山必去的三个景点 的:给定⼀段程序的描述和该程序的⼀个有效
输⼊,运⾏此程序,那么程序最终是会终⽌,还是会死循环下去?
HaltingProblem:giventhedescriptionofanarbitraryprogramandafiniteinput,decidewhethertheprogramfinishes
runningorwillrunforever.
这个问题很绕⼈,有点像那个著名的理发师悖论,但它确实是⼀个计算问题。更具体的,它是⼀个不可判定问题(Undecidable
Problem)。即不存在⼀个通⽤算法,可以在任意输⼊下解决此问题。图灵在⽂章⾥很优雅的⽤反证法推翻了假设“假设有这么⼀个算法可
以解决任何停机问题”,从⽽证明了这样的算法并不存在。具体证明过程⽹上的资料⾮常丰富,我就不再花篇幅了。
回到这⼀节的主题。简⽽⾔之,对于⼀个问题,对于任意输⼊,只要⼈类可以保证算出结果(不管花多少时间),那么图灵机就可以保证算
出结果(不管花多少时间)。
3.什么是图灵完备
图灵完备性(TuringCompleteness)是针对⼀套数据操作规则⽽⾔的概念。数据操作规则可以是⼀门编程语⾔,也可以是计算机⾥具体
实现了的指令集。当这套规则可以实现图灵机模型⾥的全部功能时,就称它具有图灵完备性。直⽩⼀点说,图灵完备性就是我给你⼀⼯具箱
的东西,包括⽆限内存、if/else控制流、while循环……那么你现在图灵完备了吗?
概念本⾝倒是⾮常直观,但整件事似乎还是让⼈云⾥雾⾥。我曾经⼀直不懂的就是为什么图灵给出的那个命题是正确的。换句话说,凭什么
有了纸带以及其他的那⼀套东西,就可以⾃信解决任意可计算问题呢?尽管我不能通读他的那篇论⽂⾥的证明,但是通过⼀门叫做
Brainfuck的编程语⾔,还是可以获得⼀些直觉。
4.直观理解图灵完备——Brainfuck语⾔
如今主流的编程语⾔(C++,Java,Python,以及等等等等)都是图灵完备的语⾔。关于语⾔优劣之争也只是在其封装、优化等⽅⾯,以
及因为这些区别⽽产⽣的“不同语⾔适⽤于不同情况”的争执。如果我们回到最底层,就会发现它们可以实现的功能其实完全⼀样,并且本
质上就是⼀个图灵机。
在1993年,UrbanMller发明了Brainfuck语⾔。这门语⾔可以说是编程语⾔界的helloworld了——它⼀共只含有8个有效字符,无处话凄凉的整首诗句 每
个有效字符就是⼀条指令。语⾔虽然极致轻量,它却是⼀门图灵完备的编程语⾔。如果能理解它的⼯作原理,那么对于理解图灵机是有很⼤
帮助的。
BrainfuckisfullyTuring-complete.
先贴上⼀段BF的代码,体验⼀下它的画风:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++
.------.--------.>>+.>++.
这个程序编译运⾏后,控制台打印\"HelloWorld!\"。
BF的⼯作机制与图灵机⾼度⼀致。⾸先它存储数据的⽅式是⼀个不限长的⼀维整数数组,⾥⾯的数值全部初始化为0。此外,有⼀数据指
针,每⼀时刻都指向数组的某⼀任意元素。指针可以向左/右争奇斗艳的近义词 移动,也可以读取/修改当前值。
语⾔⾥的8个有效字符分别是:
>
指针向右移动⼀格
<
指针向左移动曹操的诗以什么见长 ⼀格
+
使指针当前格数值加⼀
-
使指针当前格数值减⼀
.
把当前格数值按ASCII表输出到终端
,
从终端接受⼀byte的数据,存储其ASCII数值到当前格
[
当指针当前值为0时,程序跳转⾄与之对应的]之后;否则程序正常执⾏
]
程序跳转回与之对应的[处
有了这些⼯具,我们可以很快做出⼀个计算乘法的程序稳字组词 。因为ASCII表中\'A\'对应的值为65,可以使⽤5*13算出65并输出得到字符
\'A\'。
+++++
[
>+++++++++++++
<-
]
>.
把指针初始处的格⼦命名为cell0,cell0右边的那个格⼦命名为cell1。那么第⼀句将其递增5次变为5。然后,循环执⾏“右移指针,
递增13次,左移指针,递减1次”。推进的近义词是什么 当cell0的值最终被递减为0的时候,循环结束。此时cell1的值执⾏了5次“递增13次”的
操作,即65。指针右移⾄cell1,输出此格⼦,则在终端会看到\'A\'。
编译运⾏上述代码块
更多推荐
turing是什么意思ing在线翻译读音例句
发布评论