计算机能做什么,算法是什么,如何学习编程

计算机能做什么,算法是什么,如何学习编程要让机器做运算,唯一的办法就是让机器只做简单的几种动作,这几种简单动作的组合可以模拟最基本的逻辑运算和加法运算,复杂运算都转化为多次加法运算,然后机器的系列动作就可以做复杂的运算。

大家好,欢迎来到IT知识分享网。

计算机是用来处理信息的机器,早期的只是用来做数学运算。要让机器做运算,唯一的办法就是让机器只做简单的几种动作,这几种简单动作的组合可以模拟最基本的逻辑运算和加法运算,复杂运算都转化为多次加法运算,然后机器的系列动作就可以做复杂的运算。事实上计算机的设计就是按这个思路,晶体管只设计成2个状态,用晶体管搭建2个状态的与门或门和非门,再用逻辑门搭建加法器,所有运算都转化为二进制的加法运算和逻辑运算。在具体应用时,首先要设计算法,把问题的解决变换成多次的逻辑运算和加法运算。为了方便使用,人们发明了高级计算机语言,算法设计可以在更贴近实际问题的层面思考。

电子计算机的工作原理:

最本质的原理是图灵机,每次只读取一个信息,然后结合机器内部的状态做一次运算或传送,然后再执行下下一步指令。直到终止,这既是模仿人在纸上手算的过程,也是最容易让机器模拟运算的方案。

信息用二进制编码,用多位的二进制数列与数值,字符和指令一一对应,通过电路模拟2个状态的逻辑运算,搭建出或门,与门,非门,再用逻辑电路搭建出加法器,用晶体管搭建内部存储器,用磁性介质或光盘做外部存储器。

现代计算机是按冯.诺依曼结构,由存储器,控制器, 运算器,输入输出设备构成,每条指令前半部分是操作码,后半部分是操作数,都是地址指令,指向同一个存储器中的不同位置。存储器是用晶体管搭建的,存取速度很快,和控制器运算器同步工作。每次工作时程序要先从外部介质传送到存储器中,然后按顺序执行存储器中的指令序列,每天指令长度是固定的32位或64位二进制数字。执行完一条指令后再执行下一条。

计算机本质上只能做哪些事情?

  • 算术运算:加减乘除
  • 逻辑运算:或与非
  • 关系运算:大于,小于,等于,不等于
  • 数据传输:输入,输出,赋值,移位

如果不能把任务转化为这些指令,计算机就无法胜任。

进一步扩展,从更高的层级上看,计算机可以做这些事情:

  • 信息表达:计算机是用多位二进制数和信息一一对应的,凡是可用编码对应的信息都可以用计算机表达。如:数值,字母,文字,符号,声音,图像,视频。
  • 信息处理:如信息拷贝,信息传送,数值的运算,信息的查找,信息的排序,信息的替换和修改,典型的应用有:发电邮,打游戏,数学运算,仿真,管理软件,office 套件,百度搜索,淘宝购物,人工智能等。

计算机算法

算法在广义上可以是指解决问题的步骤,如菜谱,说明书等,但这狭义上只指利用计算机解决问题的方法,我们可以叫计算机算法,也可以直接叫算法。

首先我们要清楚计算机在本质上只能做算术运算,逻辑运算,关系运算和数据传输,要解决的问题只能转化为这些操作来实现。另外为让计算机做这些操作,在高级计算机语言中,我们还设计了必要的控制指令,如:输入,输出,赋值,移位,循环,停止,判断选择。计算机算法就是把问题转化为计算机能做的运算和指令系列。

例如求解方程:计算机无法直接描述方程式,我们只能用系数值的序列来等效描述,一次方程的求解方法是让x的系数变成1,高次方程的求解方法是利用曲线的连续性和区间内的单调性,按指定方向多次取x值,让y值逼近0,足够接近时的x取值就是解。

计算机无法像人一样用因式分解的方式求解高次方程。在高级的数学软件中,如mathematica,方程可以直接像平常一样描述(如:x^2 + y^3 = 10),但软件的后台还是要把它们转化为系数数组来表示。

除非专用的数学软件,在一般的计算机语言中,我们可以直接进行加减乘除运算,但不能直接做三角函数,开方,对数,求导等其他数学运算,这些运算只能通过特定算法转化为加减乘除,得出近似结果。

数的给出可以是有理数,但不能是无理数,不能把一个无理数赋值给变量。

计算机也不能直接做推理或做数学证明,也不会简化关系式,我们只能另外设计算法,把这些问题转化为加减乘除和逻辑运算,而且只有部分问题可以这样转化。

上面方程例子中也讲到,计算机不能直接描述变量间的关系,包括方程和不等式,只能通过算法设计等效描述,求解更是如此。

计算机也不能直接描述几何图形和图形关系,只能通过数组对应关系等效描述,而且取值不能无限多。

计算机更不能直接翻译和判断对错,只能通过事先的对应关系设定,或者通过大数据统计,计算出对应关系的概率值。

计算机不能直接描述声音,只能通过有限的取样,把每个样的声音的大小用二进制编码,播放的时候,二进制编码转化成电压大小信号,输送给音响,两个相邻样间的声音过渡用电容平滑下来。

计算机也不能直接描述图像,只能通过有限取样做像素,每个像素用二进制编码描述亮度和颜色,显示的时候,二进制编码转化为电压大小信号,控制发光元件,两个相邻样间图像不作过渡。

要彻底掌握计算机能做哪些事情,不能做哪些事情,以及如何转化,需要学习离散数学,但针对常见的问题,只要不是特别复杂,凭直觉也能想出算法。

总体来说,现实问题只有部分可以转化为数学问题,数学问题只有部分可以转化为离散数学问题,离散数学问题只有部分可以转化为计算机算法。

即使这样,计算机依然可以帮助我们解决大部分信息处理方面的问题,彻底改变人类社会,我们每个人都应该掌握必要的算法知识,这样才能立足于信息社会。

常用的计算机算法:

最基本的算法是循环,通过循环充分利用计算机高速的特点,同时减少人工输入和代码编写。循环又分为:

  • 循环体执行同样的运算
  • 循环体执行渐变的运算,又分为递推循环和递归循环。其中递归循环是计算机独有的算法,很多问题只能用递归算法才能解决,如8皇后问题,上楼梯问题。

以循环算法为基础,又扩展成4种常用算法,解决更复杂的问题。

  • 贪心算法 greedy algorithm
  • 分治算法 divide and conquer
  • 动态规划 dynamic programming
  • 穷举搜索 exhustive searching

大部分复杂问题都能用这4种算法解决。

什么是好的算法

  • 人做的事情少,输入少,代码短
  • 电脑做的事情少:运算少,指令少
  • 占的资源少,少占内存,少占寄存器
  • 通用性强,最好可以封装成函数,随时调用
  • 指令模块化,整体按顺序结构,不上下转移,不交缠在一起,便于阅读和理解

计算机编程:

指利用计算机语言描述算法,为方便使用计算机,我们发明了各种高级计算机语言,用容易理解的术语来描述操作和指令。如:各种数据类型,赋值语句,循环语句,选择判断语句,运算符,输入输出命令符。编程就是用计算机语言,通常是指高级语言描述整个算法。

编程的过程是这样的:

第一步先明确要解决的问题

第二步是选择合适的数据结构描述问题,是数组呢,线性表呢,还是树或图来描述

第三步是在数据结构基础上,思考解决问题的步骤,即算法

第四步是用流程图或伪码描述整个算法

最后一步是选择合适语言,按流程图或伪码写代码。

仍然用解方程做例子。如线性方程组:

第一步选择数据结构描述方程组,可以选择数组或矩阵描述系数值,把每个方程写成统一的格式:a*x + b*y + c*z = d,每个方程就可以用数组 [a,b,c,d]来描述,缺项的系数值是0。

第二步是在数组的基础上思考解方程的算法,方程的解用数组怎样表示呢,很容易想到把a变成1,b和 c变成0就是x的解,解线性方程组的过程就等效于把数组间加减乘除运算,数组间的加减乘除必须联系方程本身,这样才能判断所做的运算是不是等效的,如把一个数组同乘一个数,相当于方程的两边同乘一个数,是等效的,两个数组相减,相当于两个方程两边相减,是等效的,选择合适运算最终目的是变成[1,0,0,d1] [0,1,0,d2] [0,0,1,d3],这样就求解出x y z值了。

有了算法后边的步骤就很容易了,画流程,写代码。

如何学习编程

  1. 大致清楚计算机工作原理,电路如何实现非门,与门,或门,如何搭建加法器
  2. 大致了解图灵机思想,机器必须一步一步运算,运算都是几种简单动作的重复,大致了解cpu的指令集有哪些指令,清楚计算机能做哪些事情,不能做哪些事情,清楚所有的操作最终都要转化为算术运算,逻辑运算,关系运算和数据转移,若不能转化为这些操作,就不能使用计算机解决。
  3. 熟悉所选语言的基本语法,关键字,运算符,表达式,控制指令,数据类型等。
  4. 敲代码实现基本的应用,如打印字符串,做简单的数学运算,简单排序,插入元素等
  5. 熟练程序的基本结构:顺序结构,循环结构,选择结构。尤其是循环结构中的递推和递归结构,一定要熟练掌握。
  6. 熟悉各种数据结构如何实现,基本的数据结构有数组,栈,队列,链表,树和图,必须掌握它们的实现方法和操作方法。
  7. 掌握最基本的算法:贪心算法,动态规划,分治算法,穷举搜索。
  8. 针对常用的场景应用,掌握如何用各种算法实现
  9. 掌握什么是好的算法:时间上,资源上和人力上效率高,才是好算法。
  10. 多敲代码,随时把学到的和想到的用代码验证,不但让自己真正掌握,还会不断激发自己的学习兴趣。
  11. 常用的数据结构和算法,一定要亲自写代码实现,并规范化,通用化,保存在电脑中随时调用,当你电脑中积累到上万行这样的通用代码后,并熟悉语言中常用的库函数,你就会对编程有足够的自信,在实际应用上也会得心应手,成为编程高手。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/88256.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信