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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/503440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3编程入门先学什么_自学编程入门,先学什么语言好?

先说结论吧: 其实任何一个你能持之以恒学习的编程语言都行,但我会建议从 HTML,CSS 和 Python 开始入门。原因如下:学习编程就像学骑自行车,对新手来说最重要的是持之以恒的练习。那如何持之以恒呢?我建议从三方面考虑这个问题:选择…

计算机公式大小写,excel大写金额公式

excel大写金额公式是【IF(MOD(A2,1)0,TEXT(INT(A2),"[DBNUM2]")&"元"&"整",TEXT(INT(A2),"[DBNUM2]")&"元"&TEXT(MID(A2,LEN(INT(A2))2,1),"[DBNUM2]D角")&TEXT(MID(A2,LEN(INT(A2))3,1),&qu…

python装饰器的通俗理解_python装饰器的通俗理解

在学习Python的过程中,我相信有很多人和我一样,对Python的装饰器一直觉得很困惑,我也是困惑了好久,并通过思考和查阅才能略有领悟,我希望以下的内容会对你有帮助,我也努力通过通俗的方式使得对Python装饰器…

centos8安装文件服务器,centos8 服务器环境部署

1、jdk1.8 检查 yum 中有没有 java1.8 包yum list java-1.8*开始安装yum install java-1.8.0-openjdk* -yyum install redisyum install epel-releasesystemctl start redissystemctl status redis自启动systemctl enable redis安装数据库1、安装RPMyum install https://downlo…

vrchat模型保存_轻松简单自己上传VRChat的Avatar

有Unity就够了,不用BlenderPosted by SunnyRx on December 28, 2019

hdfs文件如何导出到服务器,[Hadoop] 如何将 HDFS 文件导出到 Windows文件系统

介绍如何在 Windows 环境中, 将保存在 HDFS 上的文件导出到本机上数据导入到 HDFS 后当然也要有方法将数据从 HDFS 导出到本机系统上在 HADOOP JAVA API 所提供的 FileSystem 类就提供 copyToLocalFile 函数将文件复制回本机文件系统理论上这是可以轻易的做到这件事情但实际使…

用纸筒做机器人_365天,每天都可以玩出新花样,卷纸筒就是这么牛的神器!

一旦有了娃,家里就会出现一大堆的玩具!随着孩子的长大,玩具也会越积越多,尤其是一些塑料玩具,恐龙,小动物,洋娃娃......你可以在房间的任一个角落,发现它们的踪影。而且,…

labelme 语义分割数据集_RangeNet++: 快速精确的雷达数据语义分割(IROS 2019)

本文主要介绍一篇关于雷达数据语义分割的文章。这篇文章将点云通spherical projection投到2D平面后,先通过高效的CNN网络得出segmentation结果,然后还原出点云的segmentation结果,最后用一个精巧的knn-search算法,对结果进行优化。…

安卓易剪多轨版_易剪多轨版安卓

易剪多轨版介绍易剪(多轨版) 是一款iOS平台的多轨音频编辑器,是国内*延续了PC平台的DAW精髓的移动平台的音频编辑器。如果您用过PC平台的Auditon,Cool Edit等类似软件,您轻松上手。易剪多轨版本延续了单轨编辑产品的高精度剪辑的特性&#xf…

dell主板40针开机针脚_技术活!戴尔主板的前置面板接口针脚的问题。

联想的老电脑主板烧了,朋友帮我找了块二手主板,是从DELL品牌机上拆下来的,其电源开关、Reset和前置USB前置音频的插座集成在一起,是DELL特有的34针插座。我找到了这个34针插座的针...联想的老电脑主板烧了,朋友帮我找了…

plc控制可调节阀流程图_PLC五大主流编程语言你会几种?

PLC的软件编程语言与一般计算机语言相比,具有明显的特点,它既不同于高级语言,也不同于一般的汇编语言,且要满足易于编写和调试的要求。早期的PLC仅支持梯形图编程语言和指令表编程语言,现根据国际电工委员会制定了五种…

成功案例_APP成功推广案例

app软件的推广成本通常是多少目前国内App开发者正面临推广困境,推广的费用正在进一步提高,(一些推广形式的费用没有变化但是效果正在下降),效果好的推广形式价格一般较高,无疑将开发者推向高门槛的推广之路。一、预装渠道:(推广用户质量:中)虽然植入到rom中软件的存活时间会更长…

用C++写一个星空

大家好,这是我学完C后,完整的编写的一个程序之一,有兴趣的可尝试编写,画面(动态的)还可以。 本程序总结有两个版本,分别是对C中的继承、多态等一些方面的练习。 编写用的是VS2019,e…

解决方案_环网柜监测解决方案

户外环网柜环境条件各异,复杂。温度过高容易发生火灾,温度过低则会形成凝露从而发生短路等事故,温湿度超过一定阀值都会影响配电功能的正常运行,对环网柜的环境状态进行监测与调节十分重要。行业需求居民小区环网柜公共建筑环网柜…

数据结构与算法(基于C++语法实现)

顺序列表 Hello,各位小伙伴,大家好!这是发布星空以后的第二次写博客。本次我将跟大家分享关于学习数据结构与算法的一些知识,数据结构与算法的后续,也会陆陆续续的更新,帮助大家更好的理解。 好了&#xf…

python建筑案例_Python数据分析实战-链家北京二手房价分析

前言最近在自学Python,通过学习大家的分享案例,看到使用Python进行较多的主要4个方面:爬虫,数据处理,数据可视化以及机器学习建模。对我来说目标就是:熟练使用numpy pandas 进行数据清洗和预处理&#xff1…

C语言纯小白教学

大家好,很高兴来跟大家讲解C语言相关的知识,今天是大家一起学习C 语言的第一天,在接下来的几天我将向大家讲解完C语言的知识,坚持一下 很快就能迅速掌握C语言这一语言,废话不多说,开干。既然是第一天先给大…

execve系统调用_Linux系统编程——进程替换:exec 函数族

在 Windows 平台下,我们可以通过双击运行可执行程序,让这个可执行程序成为一个进程;而在 Linux 平台,我们可以通过 ./ 运行,让一个可执行程序成为一个进程。但是,如果我们本来就运行着一个程序(…

数据结构之链表--单链表

Hello,大家好!好久不见了,之前一直在忙于一些琐事,最近半个月内会将数据结构的各种数据结构实现出来,一个挺有意思的东西。 这次我将要介绍的是链表。链表有单链表,单向循环链表,双向链表&…

idea shell 使用linux_Linux使用shell定时任务实现ffmpeg视频转码和截图

Linux安装操作系统:CentOS7 ffmpeg版本:3.4.1安装先访问ffmpeg官网下载linux安装包 http://ffmpeg.org/download.html ,这里我下载的是官方已经编译过的版本,别问我为啥不自己编译,因为我自己编译耗费了好久&#xff0…