您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

计算机基本原理—语言与算法

时间:2019-12-23 10:53:39  来源:  作者:

使用计算机就要给计算机输入指令,早期给计算机的指令是写在穿孔纸带上的,如图1所示。

计算机基本原理—语言与算法
 
 
 

图1 早期的计算机语言

纸带匀速通过一个光源,光线透过纸带的穿孔后被接收器接收,产生一个电压,遇到纸带无孔时,光线就被纸带遮蔽,纸带后面的接收器就不产生电压,这样就将“100100”形式的二进制信号输给了计算机。这个发明源于图灵1936年的设想——图灵机(Turing machine)。在计算机发明者名单中,图灵是名气最大的。由美国计算机协会(ACM)于1966年设立的图灵奖(Turing Award),至今仍然是计算机科学领域的最高荣誉。

计算机基本原理—语言与算法
 
 
 

尽管计算机的输入设备从穿孔纸带一路发展到硬盘、键盘和鼠标,但其基本原理还是给计算机输入“100100”形式的机器码。人们为了方便与计算机交流,发明了计算机操作系统。其实它就是预装在计算机存储器里面的一套机器码,计算机一旦通电启动,这套机器码首先被读入计算机内存并被执行,它使得计算机CPU、输入输出设备、存储器等等初始化,提供各类硬件功能接口供应用程序调用。人们借助计算机操作系统和预装的一些“工具软件”,用计算机完成诸如写文件、绘图表、做计算等简单工作。如果要使计算机完成千差万别的复杂工作,就必须给计算机输入专门的指令——计算机程序。由于计算机只能认识机器码,而机器码又实在太难学了,因此科学家就发明了“计算机语言”,人们可以借助这种语言编写计算机读得懂的程序。

最接近机器码的计算机语言是汇编语言(Assembly language)。在汇编语言中,用简单英文单词构成的助记符(Mnemonics)代替机器码,再加上地址符号(Symbol),组成如图2所示的计算机程序。

计算机基本原理—语言与算法
 
 
 

图2 一个汇编语言计算机程序片段

图中左边绿色字是程序的注释,它们不参加运行。

我们再举一个计算机程序的例子:完成任意三个数从小到大重新排列。比如,任意给计算机输入三个数:65.73、21.01、1.022,要求计算机将它们从小到大排列成:1.022、21.01、65.73。首先,我们必须设计一个算法如下:

第一步

比较第一个数与第二个数的大小。假如第一个数大于第二个数,则将它们调换顺序,否则就不调换顺序。现在第一个数是65.73,它大于第二个数21.01,因此将它们调换顺序。现在三个数排列为:21.01、65.73、1.022;

第二步

再比较第第二个数与第三个数的大小。假如第二个数大于第三个数,则将它们调换顺序,否则就不调换顺序。现在第二个数是65.73,它大于第三个数1.022,因此将它们调换顺序。现在三个数排列为:21.01、1.022、65.73;

第三步

再比较第一个数与第二个数的大小。假如第一个数大于第二个数,则将它们调换顺序,否则就不调换顺序。现在第一个数是21.01,它大于第二个数1.022,因此将它们调换顺序。现在三个数排列为:1.022、21.01、65.73,完成任务。

图3是一个用Fortran语言编写的计算机程序,它将输入计算机的任意三个数从小到大排序。

计算机基本原理—语言与算法
 
 
 

图3 一个完整的Fortran语言计算机程序

同样,图中左边绿色字是程序的注释,它们不参加运行。将这个计算机程序输入计算机后运行,只要在计算机屏幕上用键盘任意敲入3个数,计算机立即就会将此三个数从小到大重新排列,并且显示在计算机屏幕上。当然,三个数字的重新排序非常容易,人们一目了然就可以完成。如果经常要将成千上万的数字重新排序,就是一件困难的工作。这时编一个计算机程序,就可以比人工既快又省事。这个例子也说明,计算机必须依赖人类提供的算法完成任务,或者说人类完成创造性工作,计算机帮助人类完成耗时费力的工作,这基本上是长久以来的传统观点。但是,未来计算机会发展出与人类并驾齐驱甚至超越人类的智能吗?那时的计算机能够独立完成创造性工作吗?

咱们再回到计算机语言问题。比较图2与图3,读者马上会觉得:前者犹如天书一般根本无法读懂,而后者的每一行都与英语近似。人们通常将前者称为计算机底层语言,将与人类语言近似的计算机语言称为计算机高级语言。高级语言不仅仅是与人类语言近似,而且在不同CPU之间可以通用。反之,底层语言所编写的计算机程序随着CPU硬件的改变必须改变。无论是计算机底层语言还是高级语言,它们都要靠被称为“编译器”的计算机程序,将其“翻译”成计算机读得懂得机器码。

计算机高级语言除了上面举例的Fortran语言以外,更加常见的是C、C++、JAVAJavaScriptPython等等。Fortran语言源自于“公式翻译”(英语:Formula Translation)的缩写, 最早是1954年约翰.贝克斯在纽约发布的。Fortran语言经过不断的改进,它至今仍然应用于科学和工程计算领域。C、C++、Java、Javascript是软件程序员(外号“码农”)的看家本领。 Python语言是一种比C、C++、Java、Javascript更加高级的、更加接近人类语言的计算机语言,代码极其简洁,编程效率极高,用C语言编写的上千行的程序,用Python语言编写往往只有短短几十行。Python有大量免费、开源程序,在科学计算领域被大量使用,从统计、排序到机器学习、人工智能等等,几乎是应有尽有,还可以直接调用C、C++、Java程序。

现在懂得计算机底层语言的人实在是太少了,除了计算机科学专业的学生,一般都不学习它们了。其实,不懂得计算机底层语言者,其应用计算机高级语言的水平就不会太高。另外,用底层语言编写的计算机程序运行效率远比高级语言高得多,并且需要计算机内存资源也要小很多,因此,在实时性要求高的应用中,都是用底层语言编写程序的。可以说,在实时控制领域,采用Python语言编写程序的工程师,一般都是水平较低者,真正的高手是用底层语言的,这就好比做高水平科学实验,要自己制作实验设备一样的道理。

尽管目前有的计算机高级语言(比如python)已经很接近人类语言了。但是,要让计算机进一步读懂掺杂了许多随机因素的人类自然语言,容忍自然语言的模糊性,目前还做不到。随着计算机语言的发展,未来会出现一种与人类的自然语言完全相同的计算机高级语言吗?

本文上面提出的两个问题,正是人工智能面临的大问题,现在给出这些问题答案为时尚早。



Tags:算法   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Tags: 算法  点击:(1)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  Tags: 算法  点击:(7)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15  Tags: 算法  点击:(16)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  Tags: 算法  点击:(24)  评论:(0)  加入收藏
基于算法的业务或者说AI的应用在这几年发展得很快。但是,在实际应用的场景中,我们经常会遇到一些非常奇怪的偏差现象。例如,Facebook将黑人标记为灵长类动物、城市图像识别系统...【详细内容】
2021-11-08  Tags: 算法  点击:(32)  评论:(0)  加入收藏
随着注册制的加速推进,新股越来越多,截止到今天A股上市公司的总数高达4500余家,A股一直就是重融资,轻投资的市场,而上市公司发行可转债这种再融资的(圈钱方式)是最能让普通投资者接...【详细内容】
2021-11-05  Tags: 算法  点击:(98)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  Tags: 算法  点击:(40)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  Tags: 算法  点击:(36)  评论:(0)  加入收藏
每个人都有过这样的经历:打开手机准备回消息或打电话,一看到微信图标右上方的小红点,于是忍不住先打开微信;看完微信,不知不觉又被另一个App牵引,直到关闭手机屏幕才发现自己早已...【详细内容】
2021-11-03  Tags: 算法  点击:(30)  评论:(0)  加入收藏
文丨互联网怪盗团在互联网行业,尤其是在投资人心目中,往往存在一种“算法迷信”或曰“技术迷信”:某公司的广告变现做得好,一定是因为有算法;某公司的云计算业务开展的好,也是因为...【详细内容】
2021-11-03  Tags: 算法  点击:(25)  评论:(0)  加入收藏
▌简易百科推荐
前言Kafka 中有很多延时操作,比如对于耗时的网络请求(比如 Produce 是等待 ISR 副本复制成功)会被封装成 DelayOperation 进行延迟处理操作,防止阻塞 Kafka请求处理线程。Kafka...【详细内容】
2021-12-27  Java技术那些事    Tags:时间轮   点击:(1)  评论:(0)  加入收藏
博雯 发自 凹非寺量子位 报道 | 公众号 QbitAI在炼丹过程中,为了减少训练所需资源,MLer有时会将大型复杂的大模型“蒸馏”为较小的模型,同时还要保证与压缩前相当的结果。这就...【详细内容】
2021-12-24  量子位    Tags:蒸馏法   点击:(11)  评论:(0)  加入收藏
分稀疏重建和稠密重建两类:稀疏重建:使用RGB相机SLAMOrb-slam,Orb-slam2,orb-slam3:工程地址在: http://webdiis.unizar.es/~raulmur/orbslam/ DSO(Direct Sparse Odometry)因为...【详细内容】
2021-12-23  老师明明可以靠颜值    Tags:算法   点击:(7)  评论:(0)  加入收藏
1. 基本概念希尔排序又叫递减增量排序算法,它是在直接插入排序算法的基础上进行改进而来的,综合来说它的效率肯定是要高于直接插入排序算法的;希尔排序是一种不稳定的排序算法...【详细内容】
2021-12-22  青石野草    Tags:希尔排序   点击:(6)  评论:(0)  加入收藏
ROP是一种技巧,我们对execve函数进行拼凑来进行system /bin/sh。栈迁移的特征是溢出0x10个字符,在本次getshell中,还碰到了如何利用printf函数来进行canary的泄露。ROP+栈迁移...【详细内容】
2021-12-15  星云博创    Tags:栈迁移   点击:(22)  评论:(0)  加入收藏
一、什么是冒泡排序1.1、文字描述冒泡排序是一种简单的排序算法。它重复地走访要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地...【详细内容】
2021-12-15    晓掌柜丶韶华  Tags:排序算法   点击:(16)  评论:(0)  加入收藏
在了解golang的map之前,我们需要了解哈希这个概念。哈希表,又称散列表(Hash table),是根据键(key)而直接访问在内存储存位置的数据结构。也就是说,它通过计算出一个键值的函数,将...【详细内容】
2021-12-07  一棵梧桐木    Tags:哈希表   点击:(14)  评论:(0)  加入收藏
前面文章在谈论分布式唯一ID生成的时候,有提到雪花算法,这一次,我们详细点讲解,只讲它。SnowFlake算法据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子...【详细内容】
2021-11-17  小心程序猿QAQ    Tags:雪花算法   点击:(24)  评论:(0)  加入收藏
导读:在大数据时代,对复杂数据结构中的各数据项进行有效的排序和查找的能力非常重要,因为很多现代算法都需要用到它。在为数据恰当选择排序和查找策略时,需要根据数据的规模和类型进行判断。尽管不同策略最终得到的结果完...【详细内容】
2021-11-04  华章科技    Tags:排序算法   点击:(40)  评论:(0)  加入收藏
这是我在网上找的资源的一个总结,会先给出一个我看了觉得还行的关于算法的讲解,再配上实现的代码: Original author: Bill_Hoo Original Address: http://blog.sina.com.cn/s/bl...【详细内容】
2021-11-04  有AI野心的电工和码农    Tags: KMP算法   点击:(36)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条