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

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

我其实研究得不深,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码表的,呵呵。

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

  1. 计算机理论之父是哪位,计算机之父指的是谁 计算机之父是谁

    计算机之父是冯·诺依曼.他是美籍匈牙利数学家.计算机科学家.物理学家,是20世纪最重要的数学家之一.冯·诺依曼是现代计算机.博弈论等领域内的科学全才之一,被后人称为"计算机之父". ...

  2. 计算机显示屏原理6,计算机之父 冯诺依曼_非冯诺依曼计算机_冯诺依曼提出的原理(6)...

    1921年,冯诺依曼通过"成熟"考试时,已被大家当作数学家了他的第一篇论文是和菲克特合写的,那时他还不到18岁麦克斯由于考虑到经济上原因,请人劝阻年方17的冯诺依曼不要专攻数学,后 ...

  3. 计算机的真正发明者,楚泽真正的“计算机之父”

    谁发明了计算机? 大多数人会说是美国人Mocheri和Ecatki. 他们两个人于1946年发明了名为" ENIAC"的计算机. 实际上,这是一种误解. 该计算机的真正发明者应该是 ...

  4. js jquery 获取元素(父节点,子节点,兄弟节点)

    js jquery 获取元素(父节点,子节点,兄弟节点) js 获取元素(父节点,子节点,兄弟节点) var test = document.getElementById("test&quo ...

  5. 计算机之父童年的故事ppt,《“计算机之父”童年的故事》PPT课件2

    <"计算机之父"童年的故事>PPT课件2 学习生字 yǐn     jiē    lǜ      fàn      jì    tuò 饮料  台阶  考虑  犯错   ...

  6. 华人微型计算机之父,计算机之父是谁?

    答案 查看答案 解析: [解析题]计算机的字长取决于CPU内数据总线的宽度,若一台计算机的字长是4B,则它在CPU中作为一个整体加以传送处理的二进制代码为( )位. [解析题]按规模大小和延伸范围可将 ...

  7. 【历史上的今天】6 月 26 日:EDSAC 计算机之父诞生;B 站成立;Skype 创始人出生

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2022 年 6 月 26 日,在 1911 年的今天,计算机先驱弗雷德里克·威廉姆斯(Frederic Will ...

  8. 计算机之父,你知道是谁吗?

    看到文章标题,读者大大们想到了谁呢.相信很多人会想到冯.诺伊曼,或者图灵. 那究竟是哪位.其实计算机之父,冯.诺伊曼和图灵都可以,他们都为计算机的发展做出了巨大贡献,思想沿用至今.在我们计算机的历史长 ...

  9. 计算机之父 匈牙利“唯一的天才” 冯·诺依曼

    读书时,身边总有一些学霸让人又敬又恨.然而和冯诺依曼接触过的人都会发现: 天才只有诺依曼一个 . 天才童年 约翰·冯·诺依曼出生在匈牙利首都布达佩斯的一个犹太人家庭,他的父亲是一位小有成就的银行家. ...

最新文章

  1. 做行业研究时如何获取相关数据?
  2. ocr移动端车牌识别技术特点
  3. 在C#程序中实现插件架构
  4. scala python_Scala与Python | 哪种编程语言更好
  5. linux无盘工作站互不干扰,Linux环境下无盘工作站的架设和实现二
  6. python defaultdict(list)_Python collections.defaultdict() 与 dict的使用和区别
  7. tomcat源码分析--初始化与启动
  8. [转载] 深度测评Python的3种“字符串格式化”方法,看看你喜欢哪一种?
  9. Oracle 11g RAC 修改IP
  10. 血压预测常用数据集整理
  11. 3dmax:3dmax三维建模中常用的渲染设置【明暗器基本参数】、Standard的材质、光线跟踪、合成、混合、建筑、无光/投影、混合实例 、多维子对象之详细攻略
  12. 一份优秀的前端开发工程师简历是怎样的?
  13. 对比不同主流存储格式(csv, feather, jay, h5, parquet, pickle)的读取效率
  14. 新手做独立站需要掌握哪些技能
  15. 同步fifo与异步fifo
  16. 【隐式图搜索遍历学习】倒牛奶
  17. 计算机考试水平划分,计算机水平等级划分
  18. 我们能用计算机做什么英语作文,关于计算机工作的英文作文
  19. Android-四大天王
  20. 学籍信息管理系统--------总体设计

热门文章

  1. linux的基础知识——全局变量异步I/O
  2. 3D模型格式解析(OBJ)
  3. java简单小项目_Java简易抽奖系统小项目
  4. 青岛农商银行计算机防病毒应用培训,青岛农商银行胶州支行多元化培训提升安防管理水平...
  5. hive xmlserde_hive多分隔符
  6. plt.errorbar画误差曲线
  7. 利用卷积神经网络实现人脸识别(python+TensorFlow)
  8. KNN实现CIFAR-10数据集识别
  9. Java并发编程实战~Guarded Suspension模式
  10. try-catch-finally-return执行路径总结