计算机导论

一、计划

http://study.163.com/curricula/cs.htm

计算机导论视频

二、符号化、计算化、自动化

可用或门与门非门,并再构建加法器等复杂电路,在继承复杂组合的逻辑电路形成芯片。

进位制:用 数码和 带有权值的数位 来表示有大小关系的 数值性信息的表

示方法。

编码:编码是以若干位数码或符号的不同组合来表示非数值性信息的方法,它是人为地将若干位数码或符号的每一种组合指定一种唯一的含义。

汉字内码 (双字节): 汉字在计算机内部采用汉字内码存储,汉字内码是一两字节且

最高位均为1的0,1型编码(国标码最高位是0,但因为最高位是0则无法判断是否是汉字编码,所以把其改为1,区分和ASCII码)

汉字字形码是用0和1编码无亮点和有亮点像素,形成汉字字形的一种编

码。依据字形码通过显示器或打印机输出汉字。

所以可用把数值和非数值信息都转化成0和1进行表达。

所有的算术运算都可以转化为逻辑运算

在计算机中,所有的计算过程,最终都归结为处理器运算单元中的计算.

从软件方面看:

所有的计算,都是数的计算.而数的计算都可以理解为数位上数字的变化.

计算机中的数,都是以二进制形式存在的.对于二进制数,数位上只有0和1两个取值.

而0和1的任何变化,都可以用逻辑代数中的运算——逻辑运算——来实现.

从硬件方面看:

计算机中,所有数据的计算过程都是通过门电路实现的.

而所有的门电路,都可以通过最基本的与门、或门、非门组合而成.

显然,与、或、非门所实现的就是最基本的逻辑运算.

当然,计算机是软件和硬件的统一体,它们在逻辑功能上,是,也必须是等价的.

加减乘除都可转换成加法来实现(使用补码实现), 加法又可由与、或、非、异或等逻辑运算来实现—只要实现了基本逻辑运算,便可实现任何的计算

实现0 和1 的基本元器件: 电信号和继电器开关

用继电器开关实现基本逻辑运算

二极管、三极管可实现基本的集成电路: 与门、或门和非门

这些电路被封装成集成电路(芯片),即所谓的门电路。

 异或门电路(XOR) :是实现逻辑异或运算的集成电路,即:当两个输入端

同为高电平(1)或同为低电平(0)时,则输出端为低电平(0);否则,输出端为高电平(1)。

三、冯诺依曼计算机

程序是如何被执行的?

算法程序化 --程序指令化–指令存储化–执行信号化

程序可以看成是存储在存储器的一条条指令,是程序化的算法,具体的指令都对应一个地址,由控制器发送指令地址在存储器中读取分析指令,并根据指令内容调用数据,最后由控制器发送到运算器运算,获得结果。紧接着执行之后的指令。

在这里插入图片描述

CPU 中央处理单元(Central Process Unit)****,将运算器和控制器集成在一块芯片上,形成微处理器。

CPU :程序执行与数据计算

主存储器(内存):程序与数据保存、I/O 设备、总线成为现代计算机的四大核心部件。

机器指令**:**

CPU可以直接分析并执行的指令,一般由0和1的编码表示。

指令 =操作码 + 地址码(相当于java的变量名和变量值)(对/对象)

操作码:000001取数 000010 存数 000011加法 000100乘法。。。

高级语言程序和机器有什么关系呢?

int a,a=2其中a是变量。变量的地址是由编译程序在编译过程中自动分配的。

运算器

(数据)寄存器

算数逻辑部分

控制器

​ pc程序计数器(自动+1):存储下一要执行指令的地址

ir指令寄存器:临时存储当年指令内容

信号与时钟发生器:生成信号,即是机器主频

信号控制器:发送信号,发送给谁

内存

存储单元地址(地址寄存器)

 存储单元内容(内容寄存器)

内存主体

机器周期一条指令完整执行的时间为,一个机器周期又分为多个节拍

时钟周期–最小的时间区隔单位

图灵机计算思想

计算就是用0或1对一串0或1进行变换的过程

(水平纸带看成数据,垂直方向可以指令(00停止,11前进。。。)组合起来的程序

在这里插入图片描述
在这里插入图片描述

四、现代计算机

基本思路

存储体系**-磁盘存取-**操作系统 **-作业与进程-**程序执行的管理与控制;

资源组合利用体系化:外存内存不同系能资源的折中同一

管理分工合作协同化:不同环境不同部分,分工管理,再通过协同合力解决问题

外存程序内存进程化:外存中的程序文件装入到内存中成为进程(可有多个)

硬件不足功能软件化:操作系统弥补硬件的性能不足,替用户管理资源。

内存外存

冯. 诺依曼计算机解决了: 程序装载在内存,便可被CPU

但是还有存储问题,包括永久存储,容量、速度、价格

内存(RAM、ROM一般有半导体制作,电易失性):按地址访问,有一个个存储单元(1-8个字节),给出一个个地址编码后找到对应的存储单元。

外存(硬盘,一般由磁性材料做成,可永久保存):由很多盘片组成,然后是刺刀,最后分为若干扇区,一个扇区(512字节)

存储体系:

不同性能资源的组合优化———需要一个资源管理者——操作系统

内存:速度快、价格高、容量小、非永久存储; 按存储单元

外存:速度慢、价格低、容量大、永久保存; 按块交换

所有内容需装入内存,才能被处理

所有内容需存入外存,才能永久保存

用空间换时间

看起来有内存的速度和外存的容量

操作系统**(Operating System:OS)**

是控制和管理计算机系统各种资源是控制和管理计算机系统各种资源( 硬件资源、软件资源和信息资源)、合理组织计算机系统工作流程、提供用户与计算机之间接口以解释用户对机器的各种操作需求并完成这些操作的一组程序集合,是最基本、最重要的系统软件。

操作系统的作用:

操作系统是用户与计算机硬件之间的接口。

操作系统为用户提供了虚拟机(Virtual Machine) 。

操作系统是计算机系统的资源管理者

在硬件外包一层操作系统,硬件形态的计算机,加上操作系统有了软件形态的计算机即是虚拟机。

操作系统是一组“管理各种资源以便执行应用程序”的程序:

1、分工

2、合作

以任务为驱动,中心任务就是“让计算机或者说****CPU 执行存储在外存上的程序”,各部件合作完成该任务。

3、协同

当基本解决后,关键就是协同,“合作”和“同步” , “自动化”及 “最优化”。

**A磁盘管理—**管理磁盘信息的读写

化整为零(磁盘块),还零为整

磁盘:一个磁盘块=若干扇区(随系统不同有差异2次方及更高);

文件:分解为若干磁盘块,单存入磁盘后并不是连续的(那样占有空间,实际类似剑锋插针,每个磁盘块含有下一块的位置(表xiang),有点像链表。第一个磁盘块位置在哪儿?文件夹是文件的清单,在文件背后记录了第一个磁盘块的位置。);
再配以文件分配表,进行读写

磁盘的四个主要分区:

保留扇区

文件分配表区域

根目录区域

数据区域

**B内存管理—**管理内存空间的分配与回收;

内存被分成不同的块/页,一般内存的一页和磁盘的一块相等或为其倍数。

内存空间管理

内存空间分配

内外存信息的自动交换

内存空间的回收

C CPU 管理 调度CPU执行哪一个程序;

1)内存中待执行的程序段落地址发送到控制器的计数器;

2)确定执行哪个程序

3)程序切换中的状态/环境 保护问题

操作系统如何提高资源利用率?

分时:

一台主机一个cpu,操作系统把cpu分为不同时间分区,使其在不同分区执行不同程序(片段充分小),让每个终端看起来都在独占cpu;

并行:OS将作业分为若干小作业,并由不同cpu执行(多核),如此多个cpu并行完成一个作业;

分布:网络中多台主机多个cpu执行一个任务(通过网络传输)

合作协同:

1、几个区分的概念

程序(文件):存储在外存的程序文件

进程:装入内存的程序

任务:大粒度的工作,一个应用程序的完整执行,有多进程完成

作业:小粒度工作,不同作业由不同进程完成

操作系统进程:其进程也在内存中,需要cpu调度,cpu在操作系统和多个应用进程减来回切换。

应用程序的进程:应用本身的进程,在操作系统控制下

合作协同进程

相当于调度,调配其他OS进程执行相应的作业

通用计算环境的演化:

冯诺伊曼计算机——个人计算机——并行分布计算环境——云计算环境

物理机:数百数千个64G内存;

数百数千个1T外存

虚拟化的OS

根据不同需要配置虚拟机:(cpu、内外存、网络带宽)

云操作系统:跨物理机管理

把计算机看做一种服务设施提供用户,用户按租用时间进行付费

SAAS(software as service):将应用软件以可配置科技非的服务方式提供给用户使用;

卖软件和卖服务 用户通过互联网使用云上的软件(可添加监控和结算)

五、机器语言到高级语言

高级语言除了语法外的共性

常量:

变量:通过赋值语句把表达式的值保存

保留字(关键字,运算符)

表达式:

算术表达式:由常量、变量、数学运算符组成,结果是数值

比较表达式:比较运算符,结果是真假

逻辑表达式:逻辑运算符,结果是真假

语句:

赋值语句:将表达式的结果赋给一个变量;

结构:顺序、分支、循环(有界循环(for),条件循环(while));

函数**:**函数是一种抽象,用一个名字代表一个程序段落

函数的定义:数学的函数是一个符号表达而计算机是指一段可执行的程序。

函数的调用:

函数体,实现函数功能的程序语句序列以形式参数作为需要处理的对象。当被调用时,用实际参数替换相应的形式参数进行程序执行。

运用函数构造复杂程序

程序构造:自上而下、自下而上

计算机语言:步骤书写的规范、语法规则、标准的集合是人和计算机都能理解的语言

算法:解决问题的步骤

程序:计算机能够理解与执行的解决问题的步骤

指令系统: CPU用二进制和编码提供的可以解释并执行的命令的集合。

机器语言:用二进制和编码方式提供的指令系统所编写程序的语言被称为机器语言

img所有程序都需转换成机器语言程序,计算机才能执行

缺点:难以看懂,且书写容易出错

汇编语言:

人们提供用助记符编写程序的规范/标准。(汇编语言)

同时开发了一个 翻译程序,(汇编程序)

实现了将符号程序自动转换成机器语言程序的功能。

汇编语言源程序:是用汇编语言编出的程序。

缺点:需考虑机器内部结构和指令系统,较难

高级语言:

人们提供了 类似于自然语言方式、 以语句为单位书写程序的规范/标准语句为单位书写程序的规范/标准。并开发了一个翻译程序翻译程序(类似于汇编语言的汇编程序),实现了将语句程序 自动翻译成机器语言程序的功能。

比较**😗*

高级语言 :

机器无关性;一条高级语言语句往往可由若干条机器语言语句实现且不具有对应性

(一般很难直接编译成机器语言,需借助中间语言如汇编语言,再翻译成机器语言)。

汇编语言 :

​ 机器相关性;汇编语言语句和机器语言语句有对应性

汇编器已有,制作编译即可。体现着集成封装的思想。

递归和迭代

递归:由后向前带入,有高阶(n)带入低阶(n-1),只到递归基础里获得了值,再带入值向后计算。

迭代:用新计算的值替换原来的值,并重复执行

构造程序的构造方式:

传统程序构造及其表达方法-程序不是编的,是构造出来的

—由粗到细(top-down)

为控制复杂性,先以函数来代替琐碎的细节,着重考虑函数之间的关系,以及如何解决问题

—由细到粗(bottom-up)

首先编写一些基础性的函数,并确定其正确后,再处理上一层次的问题。

程序开发环境:

编辑(编辑器例如javaeclipse)、编译、连接、调试、运行一体化平台

编译器:

1)由具体的运算式到模式运算

2)将简单模式转换成汇编语言语句序列,用常量值和变量地址进行替换,组合次序调整,得到最后的汇编语言程序。

计算机语言发展

新的语言**/**程序

类自然语言

图形化语言

积木块编程

智能化

(面向各专业专业化)

解释语言和编译语言

编译器翻译的方式有两种:一个是编译,一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器

编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 执行速度快、效率高;依靠编译器、跨平台性差些。

解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

编译型由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/ObjectPascal(Delphi)等

解释性一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如JavaScript、VBScript、Perl、Python、Ruby、MATLAB等等。

但随着硬件的升级和设计思想的变革,编译型和解释型语言越来越笼统。例如JAVA

一、你可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。

二、你可以说它是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的,那也就算是解释的了。

六、程序与递归:组合**-** 抽象**-** 构造

1**、抽象:一个命名的过程**

将低层次系统实现的一些复杂动作进行命名命名,用该名字(封装)作为高层次系统的指令被使用。

2**、命名对象**

A****命名计算对象 和构造中使用名字 计算中以计算对象替换名字

(define height 2) (+ 100205)

前缀表示法:用运算符 ( 即前述的指令 )。将两个数值组合起来,运算符在前面

B****命名新运算符(即定义函数)

上述AB多重组合(一个构造带入到另一个构造中)实现复杂函数(方法)

注意:不同类型的对象可以有不同的定义方法。这里统一用 define来表示,在具体的程序设计语言中是用不同的方法来定义的。

3**、含名字的运算组合式的计算方法**

A**:求值、代入、计算**

B**:代入、求值、计算(正则表达式)**

**构造:**递归迭代

递归就是在过程或函数里面调用自身;在使用递归时,必须有一个明确的递归结束条件,称为递归出口。

递归分为两个阶段:

1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;

2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.

迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

(迭:重复多次,代:取代之前)

定义优点缺点
递归程序调用自身的编程技巧称为递归1)大问题化为小问题,可以极大的减少代码量;2)用有限的语句来定义对象的无限集合.;3)代码更简洁清晰,可读性更好1)递归调用函数,浪费空间;2)递归太深容易造成堆栈的溢出; (在到达递归基础后才逐一释放)
迭代利用变量的原值推算出变量的一个新值,迭代就是A不停的调用B.1)迭代效率高,运行时间只因循环次数增加而增加;2)没什么额外开销,空间上也没有什么增加,1) 不容易理解;2) 代码不如递归简洁;3) 编写复杂问题时困难。
二者关系1) 递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。2) 能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出./相对/

数学中的递推式
 一个数列的第n 项a n 与该数列的其他一项或多项之间存在某种对应关系,被表达为一种公式,称为递推式。

•递推基础 ; 第1 项( 或前K 项) 的值是已知的—

•递推规则/ 递推步骤 ;由第n 项或前n 项计算第n+1 项—

•由前向后,可依次计算每一项

递归 是一种表达相似性对象及动作的无限性构造和执行的方法。

 递归基础 :定义、构造和计算的起点,直接给出;

 递归步骤 :由前n项或第n项定义第n+1项;由低阶f(k)且k<n,来构造高阶f(n+1)。

递归是一种算法或程序的构造技术—自身调用自身,高阶调用低阶,构造无限的计算步骤。

递归是一种典型的计算/执行过程— 由后向前代入,直至代入到递归基础,再由递归基础向后计算直至计算出最终结果,即由前向后计算。

递归:

int fib(intn)

{

if (n == 1 || n == 2)return 1;

else return fib(n - 1) + fib(n - 2);

}

迭代(递推)****:

int fib2(int n)

{

int f, g;

g = 0;

f = 1;

while (–n)

{

f = f + g;

g = f - g;

}

return f;

}

梵天塔又名汉诺塔2n-1

七、算法

算法 计算机与软件的灵魂

数学建模是用数学语言描述实际现象的过程,即建立数学模型的过程

遍历算法:列出每一条可供选择的路线,计算出每条路线的总里程,从中选出一条最短的路线。

贪心算法一定要做当前情况下的最好选择,否则将来可能会后悔,故名“贪心”。

最优解 vs. 可行解

算法设计

数据结构设计:将数学模型中的数据转为计算机可以存储和处理的数据

控制结构设计:构造和表达处理的规则,以便能够按规则逐步计算出结果

数据结构是数据的逻辑结构、存储结构及其操作的总称,

它提供了问题求解/ 算法的数据操纵机制。

“树”的存储结构 :

A一个存储单元存储“数据元素” ;一个存储单元存储“指针”,指示数据元素之间的逻辑关系.

B用两个指针表达数据之间的逻辑关系,一个指向其左数据元素,一个指向其右数据元素。

存储结构中,通过指针的变化, 不改变数据元素的存储, 但改变了数据元素之间的逻辑关系

指针和引用

从实现上来讲,引用可以理解为一种受限的指针,引用底层可以采用指针来实现,也可以采用句柄的方式实现。早期jvm一般采用句柄的方式,现在的jvm,比如sun的,IBM的,一般就是用指针来实现。

不过从语言的角度来将,没有必要把java的引用和C的指针来比较。

指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。

引用不行,只能进行赋值运算。

多元素变量及其存储

 向量或 列表 是有序数据的集合型变量,向量中的每一个元素都属于同一个数据类型,用一个统一的向量名和下标来唯一的确定向量中的元素。在程序设计语言中,又称为 数组

向量名通常表示该向量的起始存储地址,而向量下标表示所指向元素相对于起始存储地址的偏移位置。

算法与程序构造的表达方法:

1、程序流程图

 矩形框:一组顺序执行的规则或者程序语句。

 菱形框:条件判断

 圆形框:算法或程序的开始或结束。

 箭头线:算法或程序的走向。

2、步骤描述法

用人们日常使用的语言和数学语言描述算法的步骤。

自然语言表示的算法容易出现二义性、不确定性等问题

算法的实现

程序 是算法的一种机器相容(Compatible)的表示,是利用计算机程序设计语言对算法

描述的结果,是可以在计算机上执行的算法。

计算机解决一个具体问题时,大致需要经过下列几个步骤:首先要从具体问题中抽象出一个适当的数学模型,然后设计一个解此数学模型的算法(Algorithm),最后编出程序、进行测试、调整直至得到最终解答。寻求数学模型的实质是分析问题,从中提取操作的对象,并找出这些操作对象之间含有的关系,然后用数学的语言加以描述。

数据结构直接关系到算法的选择和效率。**运算是由计算机来完成,这就要设计相应的插入、删除和修改的算法。也就是说,数据结构还需要给出每种结构类型所定义的各种运算的算法。

算法的效果评价:

算法的输出是最优解还是可行解?如果是可行解,与最优解的偏差多大

证明方法:利用数学方法证明;

A仿真分析方法:产生或选取大量的、具有代表性的问题实例,利用该算法对这些问题

B实例进行求解,并对算法产生的结果进行统计分析。

算法的效率:时间效率和空间效率

时间复杂性 : 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它

是n的某一函数,T(n)称为这一算法的“时间复杂性”。

大****O 记法”

基本参数 n——问题实例的规模,把复杂性或运行时间表达为n的函数。

“O”表示量级 (order),允许使用“=”代替“≈”,如n 2 +n+1=Ο(n 2 ) 。

img说明事件复杂性更关注循环的层数(n2**)**

难解性问题

当算法的时间复杂度的表示函数是一个多项式时,如 O(n 2 ) 时,则计算机对于大规模问题是可以处理的,即可解的。例如,TSP问题的贪心算法 O(n 3 ) 。

当问题的计算时间复杂度是用指数函数表示时,如 O(2 n ) 或阶乘函数时,如 O( n! ), 当n很大(如10000)时计算机是无法处理的,在计算复杂性中将这一类问题称为难解性问题 。例如TSP问题。

算法的空间复杂度:算法在执行过程中所占存储空间的大小

P 类问题:多项式问题(Polynomial Problem),可求解问题

所有可以在多项式时间内求解的问题

NP 类问题,非确定性多项式问题(Non-deterministic Polynomial) P⊆NP。

计算机在有限时间内不能求解的( 难求解问题),在多项式时间内可以由

一个算法验证一个解是否正确的非确定性问题。(能验证)

NPC NPC⊆NP

NP问题的所有可能答案都可以在多项式时间内进行正确与否的验算

完全不可计算问题:计算机完全不能求解的

近似解、精确解、满意解。用精度换时间

八、遗传算法

ppt-8-26

imgimg

导向性群**(** **)** 随机搜索法**(根据上面解法优化)**

• 基于概率论:随机选择

•多条路径下的最优,总比一条路径的最优要更优一些。多条路径下的最优,总比一条路径

的最优要更优一些。

•遗传算法就是这样一种导向性群随机搜索算法。遗传算法就是这样一种导向性群随机搜索算法。

•同一时刻多条路径上的解集合即为一个种群。多次选择,即多代进

遗传算法提供了一种求解复杂系统问题的通用框架。

九、计算机科学技术

十、指针和引用

在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。指针的机制比较简单,其功能可以被集中重新实现成更抽象化的引用(reference)数据形别。

指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。

指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。

C++标准规定,指针分为两类:

function pointer type:指代一个函数

object pointer type:指向void或对象类型,表示对象在内存中的字节地址或空指针。

★ 相同点:

\1. 都是地址的概念;

指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。

★ 区别:

\1. 指针是一个实体,而引用仅是个别名;

\2. 引用使用时无需解引用(*),指针需要解引用;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值