一个男的和计算机对话,父与子的对话:计算机算法

上一封信我提到了电脑必须有三样要素:输入、输出和算法。算法是最核心的部分。没有算法,电脑不会知道你的输入究竟该返回什么样的输出。你 最近数学期中考考得相当不错,你应该注意到,“应用题”这种题目,本质上考的就是算法。题目本身可以视为是一种输入,你需要给出一个答案,这算是一个输 出。但如果你的应用题只写一个答案,而没有计算过程的话,那你这道题会被扣去很大一块分数,即便你的答案是正确的。解题步骤,或者说计算过程,就是你的算 法,老师是要看算法滴!

算法这个词,是一个极其复杂的概念, 老爸

我其实研究得不深,2011年的时候,还有一帮非常顶尖的数学家在法国开的一个会上,继续争论究竟什么叫算法。在我看来,简单的理解,算法就是一种“计算的方法”,一种在已知的一些输入素材前,该返回什么样的输出。

算法这个词的来历很有些年头了,大概就在9世纪的时候,有一个波斯的数学家提出了这个概念,当时主要指的阿拉伯数字的运算法则。你还记得学 习加减乘除时候的法则吗?比如加法交换律、乘法结合律,等等。1842年,有一个叫艾达拜伦的人写了一个求解某种方程的程序,这个人被视为这个世界上的第 一个程序员。呵呵,记住了,这个人是个女的。是的,史上第一个程序员是位女性,而且她是一位诗人的女儿,真是完美的文理科结合啊!这位女性很有名,将近两 百年后的今天,我们依然用各种方式来纪念她。

另外一个特别有名的人叫图灵,他在1954年就过世了,只活了42岁。但这个人才华横溢,至今世界上最顶尖的数学奖就是以他名字命名的:图 灵奖。图灵提出过一个被称为“图灵机”的模型,很多人视为这是一个对算法这个概念的重大贡献。但也有人认为,这个模型解决的问题是“可计算性”,而不是算 法。可计算性指的是那一堆输入的材料是不是可以计算。比如你做一道应用题,题目是“学校有男生500人,问女生有多少?”,显然这道题目是无法计算的,所 以没有可计算性。如果再加上“学校总共有950名学生”,那就可以计算了。在可计算的基础上,才有所谓算法。图灵机试图回答的问题是:究竟什么是电脑可以 计算的。

看到这里,小宝你可能会发现,都是数字的计算啊,我打的游戏和算法有什么关系?植物大战僵尸里有什么算法?老爸我这里用一个豌豆射手消灭一个僵尸的过程,来向你说明算法在这里面的作用。

整个电脑屏幕,是由极多的像素点组成的,每个像素点,都有两个由纵横两个数字组成的位置数值。豌豆射手所发射出的一粒豌豆,是在运动的。在 运动的过程中,豌豆的位置一直在变。不过它不能上下飞行,只能水平飞行,也就是说,它的位置纵向数字不会变,它的横向数字在变化,而且只能从左到右。同样 的,那个搞笑的僵尸也有它的位置,纵向数字不变,横向数字在变化,而且只能从右到左。当豌豆的横向位置的数值,和僵尸身体的数值一样时,说明豌豆击中了僵 尸,根据事先定义的规则:僵尸被击中一次,失去1/3血,击中两次,一只手掉下来,击中三次,僵尸死亡。所以,豌豆消灭僵尸,无非就是豌豆的位置数字和僵 尸的位置数字相同三次罢了。

在电脑的世界里,任何一个东西都要被转化成数字,因为只有数字是可以计算的。文字、图像都可以转化成数字。字母A,其实就是一个数字,数值 为65。但如果是字母a,数值就变成97。这种转化方法叫“ASCII码”。当然,你也可以编一套自己的转化规则,比如把A定义为数字89。不过,你的规 则如果别人不懂,那就没法用于实践。ASCII码是今天世界上大家都遵守的编码规则。

A=65,这个65是十进位制中的数字。十进位制就是逢十就要进位。我们有从0到9的十个数字,如果一个数字比9大1怎么办?进位:10。这个方法对你来说已经根深蒂固,你可能以为数字世界本来就是这样的。但其实除了十进位制以外,我们还有其它进位制度。

比如说二进位制,也就是我们只有0和1两个数字,如果比1大1怎么办?十进位制的表示方法就是“2”,但二进位制的表示方法就是“10”, 就像在十进位制里9后面是10一样,二进位制里1后面就是10了。二进位制的3,就是11,不用进位,但如果是4,没辙,又得进位,变成100。所以 A=65,在二进位制里,65是啥啊?

好复杂啊,小宝你可能都算不过来了(我打赌你要计算65的二进位制表达,可能需要费时好几个小时,还极有可能算错,哈哈),不过电脑最不怕的就是这种有规律的运算。可能你要问,好好的十进位制为啥不用,非得搞这么复杂的二进位制?

这和电脑可识别的信号有关。对于我们人来说,我们可以辨识各种各样的符号加以理解。但电脑不会。电脑是用电的,它能感知到电压的高低,所谓 高电平低电平。高电平就是1,低电平就是0,电脑去感知二进位制是最容易的。知道为啥我们人容易学习十进位制吗?因为我们有十个指头,别笑,真的。其实理 解十进位制所要求的智商比理解二进位制来得高,嗯,是的,电脑其实智商很低,最好的电脑的理解力甚至不如三岁小孩,电脑的强项是有算法的计算速度。

所以电脑是把所有的东西变成二进位制的数字进行运算,但有些东西计算不了。你可以在电脑里画出(其实是算出)一个汉堡包并通过屏幕输出,但你不可能让电脑的屏幕真给你变出一个汉堡包——这没法计算啊。

那么,电脑是通过什么装置来进行运算的?这就是我下封信要和你讨论的话题:芯片。

哦,对了,A在二进位制里是1000001——顺便说一句,我也不是算出来的,而是查ASCII码表的,呵呵。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值