Re: [问卦] 真的可以使用0和1写程式的八卦吗?

楼主: Hatred (╮(⊙_⊙∥)╭)   2015-08-18 17:16:05
※ 引述《roger29 (=======中间选民=======)》之铭言:
: 完全只用0和1理论上应该是可以,不过应该还要经过不少转换会很麻烦的吧,
: 但是用一些数字来写程式倒是可以的,这其实就是一个Turing Machine(图灵机)啊,
: 但是要用图灵机来写程式非常困难,一个简单的指令实作可能要几十甚至几百行,
: 既然这样为什么不去写写C或是Python之类的玩玩就好勒?
: 一个标准的图灵机是由硬件和软件两大部分所组成的,
: 硬件的部分就是一段理想上是无限长一格一格的记录带,一个记录格可以放一个symbol。
: 还有一个读写头,每一次读写头可以读取某格上的symbol,
: 还可以把这个symbol替换成别的并且选择移动方向(左右或不动)。
: 软件就是程式的部分啦,一个图灵机的指令大致上这样:
: {current state}{current symbol}{new symbol}{movement}{new state}
: 一开始图灵机都是从state 0开始,而还没执行程式前你记录带上的东西就是你的input。
: 所以你下一个指令假如是这样:
: 0 _ 1 R 0
: 这个指令做的事就是若你的state为0且读写头指向的记录格为空(_),
: 则将此记录格填入new symbol也就是1,接着往右移动一格(R),
: 跳到新的state(还是0)。
: 所以应该很多人知道这一行指令码会让图灵机做什么了,
: 他会一直往右写1写下去,所以执行之后你的记录带看起来大概是这样:
: ..._ _ _ _ _ _ _ _ _ 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
: ↓
: 读写头起点
: 只要写一个1的话,也很简单,只要把上面那一行改成
: 0 _ 1 R 1
: 就可以了,这一行和上面那行的差别只在new state原本是0现在是1,
: 当第一个记录格被写入1之后,它会跳到state 1,
: 但由于state 1我们没有相对应的代码,所以这个程式就停止了(halt)。
: 像上面这样,一些更复杂的动作可以也可以用多行指令码来实作,
: 不过好像还没看到怎么用数字写程式,
: 其实只要做一个很直观的mapping,就可以把上面一行的五个符号对应成数字了。
: state:原本就是数字(0 1 2...)
: symbol:假设是two-symbol的话,就是0(代表空白)和1。
: movement:往左=0,往右=1,不动=2。
: 类似这样,就可以把0 _ 1 R 1改成00111,
: 虽然这样不是只用0和1来写,但是再经过几个去转换,
: 也是可以转成真的只用二进为来表示这段指令码。
: 比如先把00111用某种方式转成十进制的一个自然数,在把这个自然数用二进制表示这样。
: 不过大概想一下就知道,用这种方法写程式非常非常没有效率,
: 介绍一个网站: http://morphett.info/turing/turing.html
: 这是一个图灵机simulator,即你可以在这里写你的图灵机代码并用这个模拟器跑,
: google搜寻Turing machine simulator也有其他类似的可以玩。
: 下面这段指令码拿去是把一串k个1的input变成2k个1的指令,就相当于是乘以2的动作,
: 0 1 2 r 1
: 1 1 1 r 1
: 1 _ 3 l 2
: 2 1 1 l 2
: 2 3 3 l 2
: 2 2 1 r 3
: 3 3 1 * 5
: 3 1 2 r 4
: 4 1 1 r 4
: 4 3 3 r 4
: 4 _ 1 l 2
: 有兴趣可以复制这指令码去跑跑看,假如你初始是111,跑完就会变成111111这样。
: 实作一个乘以2的指令码就这么复杂而且不直观,没事干麻用这玩意写程式?
: 然后这段可以改写成一大堆数字:
: 0121111111103122111223312221133312531214411144331440112
: 不过既然图灵机要实作这么麻烦,图灵机还有啥用勒?
: 举例来说,图灵机有一个优点就是它的架构非常简单(相比于我们用的电脑),
: 但是我们可以拿图灵机来验证很多东西,借此知道某些我们电脑的限制,
: 比如一个natural number to natural number的function能不能用电脑计算出来?
: 若图灵机可以,我们的电脑就可以,反之则不行,
: 而从图灵机去验证容易的多,因为它的架构非常简单,类似这种情形。
各位真强者、pavone、E cup、30cm、胜利组、高富帅、金城武、温拿、小妹,
大家好!打给后!胎嘎后!AV8D!口泥几哇!
本鲁的朋友说,正如r大所讲的,图灵机的计算能力跟我们用的电脑一样,但是架构
比较简单,这里本鲁的朋友举一个具体的说明:
因为每一单位时间内,图灵机的读写头只能在记录带上面读写一格,并至多向左或向
右移动一格,所以每一格会发生什么事(被读、被改写、读写头移来或移走),可以
完全由它和它左右两格在上一单位时间发生什么事决定!这其实不难理解:两格以外
发生的事情,没办法在一单位时间内传递过来。
所以,在第二单位时间,记录带的第i格发生什么事,取决于在第一单位时间,记录
带的第i-1、i和i+1格发生什么事,这允许我们建立一种小的电路C,C的输入是“这
一单位时间内,记录带上的第i-1、i和i+1格发生什么事”,其输出是“下一单位时
间内,记录带的第i格发生什么事”,这个电路C是固定的,只与原来的图灵机有关,
与i的值究竟是多少无关(这个事实其实不难验证,但我们省略之)。
现在如果我们量产上一段的电路C,就可以利用它们,从这一单位时间内记录带发生
的所有事情,算出下一单位时间内,记录带上发生的所有事情(姑且假设记录带为
有限长,所以你不需要制造无穷多个电路C,虽然实际上记录带是无限长的),例如
,有一个电路C负责从记录带的第1、2和3格发生什么事,计算出下一单位时间内,
记录带的第2格发生什么事,另一个电路C则负责从记录带的第2、3和4格发生什么事
,计算出下一单位时间内,记录带的第3格发生什么事,又一个电路C负责从记录带
的第3、4和5格发生什么事,计算出下一单位时间内,记录带的第4格发生什么事,
以此类推。
这告诉我们:我们可以大量生产一个简单的小电路C,它们可以“模拟图灵机一步”
,也就是从这一单位时间会怎样,算出下一单位时间会怎样,同样的事情再做一次
,就可以模拟图灵机一步、下下一步、下下下一步...
简言之,图灵机的动作可以被一大堆一模一样的简单小电路C所模拟,如果我们仔细
地检验上面的动作,就可以得到:
定理. 一个图灵机跑t步的过程,可以被一个大小约t平方的电路模拟。
有名的NP-completeness的理论就会用到上述的观察,在此不赘述。
还有更强大的版本:
定理(Pippenger与Fischer). 一个图灵机跑t步的过程,可以被一个大小约
t乘以log t的电路模拟。
: ※ 引述《WeiMyWoW (...)》之铭言:
: : 很久以前,那还是我用win98的时候有次我系统崩溃了,
: : 因为我是电脑白吃,我朋友给我介绍了一个高手来帮我修电
: : 脑。
: :   
: :   他看了一下电脑,问我有没有98的光盘,我说没有。
: :   
: :   他想了一下,叫我把固定电话拿给他,我想修电脑要电
: : 话干什么,但人家是高手,我也不好说什么,就把电话拔下
: : 来给他了。
: :   
: :   他把电话线空着的一头接在电脑的一个插孔内,然后进
: : 入了dos,然后就开始在电话上不停的按著键,他按键的速度
: : 非常快,但是只按0,1两个键,我搞不懂这有什么用,但也
: : 不敢问,看了半个多小时,他还是不停的按这两个键,我渐
: : 渐的有些困,我问他这东西要搞多久,他说要几个小时,我
: : 给他倒了杯茶,就一个人去隔壁睡觉了。
: :   
: :   醒来的时候,一看已经过了4个多小时,我起身到隔壁,
: : 看见他正在98里面调试,过了一会儿,他说,你试试,我坐
: : 上椅子用了一下,真的好了,我当时也不懂电脑,谢过人
: : 家就走了。
: :   
: :   后来我慢慢对电脑有了了解,终于了解,原来当时那位
: : 高手是用机器语言编了一个98系统,我后来问我朋友那位高
: : 手的下落,我朋友说前几年去了美国之后,杳无音讯....
: :  
: : 是说电子讯号本来就是高电位和低电位组成,也就是0和1,但真的可以拿来写程式吗?
作者: sakaizawa (被嘘会高潮)   2014-08-18 17:16:00
不合理阿
作者: b2481 (RayGetRUA-RUA)   2015-08-18 17:17:00
嗯嗯原来如此,浅显易懂嘛!
作者: gaiod (无心插柳..)   2015-08-18 17:24:00
《有效文章》26049 篇 有点屌
作者: aq981334 (2025年未来人)   2015-08-18 17:25:00
原来乳此,懂了懂了 没想到这么简单
作者: einejack (骑小强撞坦克)   2015-08-18 17:27:00
平均每天5.107篇文 到底都在干嘛啊XDDD

Links booklink

Contact Us: admin [ a t ] ucptt.com