全英文计算机科学速成班概况
1.早期计算
为我们展示了 早期计算机计算发展史
1)机械计算时期:算盘(起源于中国 or 美索不达米亚)
航海仪,星象表, 时钟....使得计算更加简便。
往往是需求产生计算动力要求。这么来看其实算盘的计算能力挺强的,中国古代貌似一直在使用算盘。
2)近代-电子和机械计算:
computer概念第一次提出,使用计算表等方法善于计算的一种职业。(在那个时代,计算能力是一种保密知识可能。)
莱布尼茨乘法器,一种基于齿轮的计算机器,可以通过累加累减计算加减乘除。
计算表,通过查表可以快速找到结果(早期查表法)。
I.计算炮弹落点问题,现实问题带来计算变革:
炮弹表(特制,只针对一种大炮和炮弹)
引出函数计算问题,如何通过机器来拟合函数计算(描述多个变量之间的函数关系)。
差分机诞生,通过多项式计算来拟合函数(直到今天还在使用哩)。
想象的机器——分析机,
通用计算机:
1、能够实现通用计算。
2、安装顺序输出数据并计算
3、拥有内存,能够像打印机一样记录算法
意义:早期计算机的想象,激励了后期真正计算机的产生。(这就是思想的魅力)
II.人口普查问题
打孔卡片制表机,一种电动机械,计数结构类似于莱布尼茨乘法器,但使用电动结构连接其他组件。
通过卡片是否有孔,来快速累加计算相应对象。
意义:解决了人口普查问题,减小了大量成本。使得政府和企业意识到计算机的巨大商业潜力(降低劳动力和数据密集型任务的成本),为后续计算机的发展提供了经济和政治驱动力。
2.布尔逻辑和逻辑门
上面这张图片是利用电路分析来想的
其实简单概括一下就是:(计算机里分 True 和 False)恰恰对应着 1 和 0
- 或(Or) 两者对象任意一个为True即可
- 与(and) 两者对象都要满足条件才行 若一个为True,但另一个为 False 照样结果也是 False
- 非(Not) 刚好是事件的对立面,即非黑即白
- 异或(Xor) 跟或(Or)大部分相似
3.二进制
1 bit = 1 byte
32位、64位表示一次性可以处理64byte的字符。由于需要表示正负(通常来说以第一位bit为参考正负的标准,若第一位是1则为负,若第一位是0则为正)、小数等,需要很多位数
二进制转换为十进制可以这样计算:
4.ALU(算术逻辑单元)
基本单元:1个算数单元、1个逻辑单元
两个常用器:半加器 和 全加器
算数单元原理(指负责所有数字操作):
其他算术单元:Subtract; subtract with borrow; negate(负正转化); increment(加一); decrement(减一); pass through(不做运算)
乘除法在简单ALU里面是通过多次相加相减完成的,但是高级ALU有专门的乘除法ALU算术单元
逻辑单元:做判断,比如两数相减之后是不是负数或者是不是零或者有没有溢出
eg:下面是判断是否为零的逻辑单元:
5.内存原理
第一层:从AND-OR 锁存器(AND-OR Latch)到门锁(Gated Latch)到8位寄存器:
第二层:从8位宽寄存器到256位寄存器(用锁存器做的叫SRAM(静态随机存储器)):
其他RAM还有用:不同的逻辑门、电容器、电荷陷阱、忆阻器等
PS:* 当别人问你RAM多少时,实际上在问你内存多少
* RAM是CPU外部内存模块(数据必须经过RAM)
6.CPU
指令集:给ALU的指令、让ALU和内存通信的指令等
CPU基本结构与运行顺序:
指令集拓展:
1.HALT指令:可以将RAM中的指令和存储的数据分割开来,同时保证instruction address register不会继续加下去导致程序读取到非指令的数据而导致错误(如找不到对应指令)
2.JUMP—NEG指令(属于条件跳转):表示如果ALU的FLAG中的负数检查器返回True值,就执行jump(即将instruction address register跳转到特定值)(可能导致程序永远运行,因为条件永远成立)
丰富的指令集让在不改变CPU物理结构的前提下(比如ALU不添加乘除功能)仅仅通过软件程序调用指令集来完成工作,即可编程
但是指令集由于需要向下兼容,所以往往只会越来越冗长
关于先进CPU的优化计算能力策略:
复杂性和速度之间的平衡(比如做除法需要多个时钟周期才能完成,但是如果将除法放进ALU中,那么ALU会变得更加复杂)
RAM查找速度以及与CPU通信速度有限(RAM和CPU之间通过几厘米长的BUS来沟通,但是这还是早场了延迟),所以现在很多CPU里面有cache(缓存,容量更小的RAM,CPU里面空间有限)来把RAM中整块的数据搬到CPU里面。(如果CPU请求的数据已经在cache里面,那么叫cache hit否则叫cache miss)
流水化作业:提高吞吐量,通过并行几个循环的不同部分(问题在于数据依赖可能导致数值更新不即使,所以需要提前检查依赖性,或者打乱命令执行顺序(乱序执行))
推测执行技术:猜测下一条需要执行的指令从而提前取出需要用的值,当然,如果猜错了就覆盖掉猜测(管道刷新)(但是一般猜测准确率在90%左右)
在调取RAM时,ALU可以解码另一个指令
7.软件
- 认识编程语言,出现最早的编程语言是COBAL语言(因为需要计算机能统一运行这个语言的源代码)
编程语言一些基础语法,if语句(嵌套),for循环,while循环,调用函数......这些都会在以后学习一门具体语言的时候学到
8.算法介绍
- 排序(选n^2,归并nlogn,图搜索dijkstra n^2 优化后nlogn+L[N是节点数,L是道路数])
- 数据结构 string (专用:strcat 链接字符串作用)列表, 结构体
循环列表超级妙!
1.栈(后进先出)
2.队列(先进先出)
9.认识图灵
图灵自创图灵机,以0和1写在链表里,并且只能向右移动,根据上方数据的整理进行移动
10.软件工程初入
大量的函数对于普通团队和个人来说太艰难,解决方案:把函数打包成层级分明的体系,将相关代码合并成“对象”(面向对象编程)
原理:把底层细节封装成组件来隐藏复杂度(参考之前学的“晶体管电路”封装成逻辑门)
11.集成电路
需要集成电路的原因:电脑元件之间独立以及飞线连接,需要集成电路
障碍:量子隧穿、光波长限制
12.操作系统(OS)
OS的作用:
1.以前的计算机只能一次处理一个程序,有了OS之后可以批处理
2.同时,OS提供软硬件之间交互通道(防止程序员每写一个程序都要和硬件底层斗争)
3通过OS的API,软硬件之间可以通过标准化的IO来交互
PS:在一个CPU上跑多个程序。它在等待较慢的硬件反馈时会先休眠正在等待硬件结果的程序然后处理下一个程序,问题在于每个程序需要内存,而OS分配的内存往往难以连续,所以需要虚拟内存(让程序默认内存地址从0开始,OS会完成虚拟内存位置和物理内存之间的映射)这种机制,可以让OS动态分配内存。同时,可以更好隔离内存,使得一个程序的错误写入不会影响其他程序(内存保护)
后来,电脑处理能力增强,可以多个终端使用一个计算机,这就需要分时操作系统(时序)
诞生了UNIX这个鼻祖系统!!!!非常傲人的战绩!
13.数据存储
可分为磁盘,硬盘,软盘,光盘,DVD
磁盘原理:是依靠电磁感应来进行的,通过编写上面的1和0,可以存储这些数据
硬盘和软盘原理:与磁盘的原理大差不差
光盘原理:光的波长不同,能够处理的信息就不同
14.文件和文件系统
文件内部格式:一长串二进制
文件格式是理解数据的关键
目录文件对子文件的管理,是一个文件系统的例子
注意:
1.存储器开头,有 directory file 记录其他 file 位置(meta data元信息),file位置头尾相接
2.在每个文件开头结尾留空白(slack space)形成一个一个 block ,如果文件在写入时超过一个 block ,为了不覆盖下一个block,会分配另一个block,再记录在directory file里面
3.当删除一个block时,只是删除 directory file 里面的记录,但是实际数据没有被删除,等着后面数据覆盖它
15.压缩算法
- 无损压缩:
游程编码:重复信息前面标注信息重复次数
霍夫曼树:先选取两个频率最低的值,将它们Merge,依此类推,若 Merge 成一个完整的树,我们需要求他的字典,那就对每一个子树进行编码(二进制编码)而后可进行复原图像,节省存储空间
* 有损压缩:
1.音频
用不同精度编码不同频段(如:人耳对于低音不明感,对于超声波听不见,对于人声敏感)
随后有一种编码叫感知编码
2. 图片
jpeg 人眼对于锐利边缘很敏感,但是对于色彩变化不是很敏感,所以jpeg把图像分解成8*8像素块,把每个像素块设置成更简单的图形,比如纯色、比如条纹等
3. 视频
视频里面帧与帧之间有许多temporal redundancy(时间冗余)(不变的重复信息),所以可以压缩。
或者找到帧与帧之间相似的patches对其施加简单效果(移动旋转、变亮变暗)
但是压缩太严重的时候patches里面的像素没有更新,会出现奇怪效果!
16.人机交互
键盘和命令行接口
命令行:将编程语言转化为机器读得懂的语言
具体形式:人在打字机上打出来命令,计算机计算之后用电机在同一张纸上打出来结果(最早源自于zork游戏)
显示器
阴极射线管(CRT):引导电子反复描绘形状使得荧光屏一直发光(矢量扫描)或者一行一行扫描在特定点才发射电子(光栅扫描)
但是这样太耗费内存,为了节约RAM,所以用了:字符生成器(第一款显卡)
就是用类似于ASCII编码的几种字符来组合成图形(比一个像素一个像素地存储更节约空间)
人们还尝试了用基本字符集只做了基本伪图形界面
用CRT的矢量功能来描绘复杂图形
屏幕上的所有图像都由一系列矢量构成(CRT移动亮点的始末位置与亮度)
这个技术使得CAD出现(Computer-Aided Design)
同时,在光笔(用光传感器探测屏幕刷新率从而计算出光笔指向屏幕的具体位置)的协助下,计算机不再是只是计算工具,而是更广泛的助手,研究电路啊等等
再后来,用位图显示,即将VRAM(位于显卡里面,用于将图形快速读取)里面的像素信息映射到屏幕上。
图形用户界面
在鼠标发明之后,GUI(Graphical User Interface)产生,并且借用日常办公的理念开创了桌面、文件夹、文件、窗口(相当于文件之间在桌面上放置时会重叠)等概念与操作模式,同时开创了事件驱动编程。
Xerox公司是GUI的先驱,但是由于理念过于先进,他们的设计最终被Microsoft和Apple商业化成功。
3D三维图形
简要:计算机在做的事情就是把3D转换为2D
立体图形通常有两种投影模式:1平行投影(两条边投影过去之后是平行的)2透视投影(两条边投影之后会聚焦在一点处)
经典算法:扫描线渲染
思路:扫描线首先读取构成多边形的三个点,然后只找到最低和最高的Y值,它只会考虑这两点之间的行,然后线一直不停往下扫,直到扫到最后相交的两个点为这个多边形的边缘点时才会停止
抗锯齿优化:他会在扫描线扫到的图形附近进行羽化(像素低一点)
处理该多个多边形进行扫描问题的一些solution :使用排序算法,具体实现如下:将场景中所有的多边形从远处到最近排列,然后按该顺序渲染他们
还有几个比较重要的操作:
3. 光影
通过计算光源与多边形的夹角来计算入射到观察者眼里的光强,进而调整颜色亮暗
(先进的光影算法包括Gouraud shading 和 Phong Shading)
4. 纹理:
纹理映射,在纹理图上对应一个多边形并从纹理图里面对应色彩值到多边形像素上,需要大量重复并行运算
你们可能要问,光影和纹理到底有什么用呢?主要原因如下:
3D图形学中,光影和纹理是两个关键的视觉元素,它们对渲染出真实感强、视觉上吸引人的3D场景起着至关重要的作用。
- 增强真实感:光影和纹理模拟了现实世界中光线与物体表面的相互作用。通过模拟光照效果,如阴影、高光、反射和折射,可以使3D模型看起来更加真实。
- 提升视觉效果:纹理可以为3D模型添加细节和复杂性,使其看起来更丰富、更有趣。纹理可以模拟各种表面特征,如木材、金属、织物等。
- 优化性能:通过算法优化,可以在不牺牲视觉效果的情况下提高渲染效率。例如,使用Mipmap技术可以减少纹理在不同距离下的渲染细节,从而提高渲染速度。
- 适应不同环境:光影算法可以根据场景中的光源和环境设置动态调整,使得3D模型在不同的光照条件下都能保持逼真的效果。
- 支持艺术创作:艺术家和设计师可以通过光影和纹理的调整,创造出独特的视觉风格和艺术效果,增强作品的表现力。
- 交互性:在交互式应用中,如游戏或虚拟现实,光影和纹理的实时计算可以提供更丰富的用户体验,使场景更加生动和动态。
- 技术挑战:光影和纹理的算法处理也是计算机图形学领域的技术挑战之一。通过解决这些问题,可以推动相关技术的发展和创新。
17.计算机网络
简要概述背景:计算机在之前是一直独立存在的,而后有了物质条件才有网络诞生
比较重要的概念:
1.以太网是基于局域网的一门技术
PS:LAN(局域网)
其中最成功的是Ethernet(以太网)(Ethernet为了让计算机知道一条信息请求自己是否需要应答,每个计算机都有MAC地址(Media Access Control Address))
但是共享传输介质会导致两列数据在载体上碰撞(尤其是导线上)而产生乱码
所以常常:
(1)在检测到碰撞后发送和接受方都随机一个等待时间静默,然后再尝试发送。如果还是尝试失败,那么在第一次尝试的基础上每次尝试失败后等待时间指数增长(Exponential Backoff 指数退避)。这样可以舒缓网络拥堵
2.宽带:是指计算机之间传递的速率
3.交换机用于构造单个网络,路由器用来连接各个网络
补充:
电路交换:早起电话系统工作模式————接相应的数据中心(在free的电路上)
消息交换:通过不同站点传递消息,就像快递到达不同地区的菜鸟驿站一样,但是会出现一个问题就是消息堵塞(例如大数据传输时,小数据只能停滞而运输不出去)解决方案:把大数据分为小数据包传输(称为分组交换)
4.消息沿路由所沿路经过的跳数称为跳数 作用:可以帮助识别路由问题
因特网 TCP/IP协议
- 在数据包的标头只有一个目标地址,他是存储在数据有效的负载前面的元数据中,标记好后计算机暂时不知道这些数据需要去到什么程序应用,于是在IP之上开发了更高级的协议,最常见的就是UDP,
它有自己的标头,位于数据有效负载内,它还包括校验和的东西,允许检验数据的正确性的作用,UDP有效标头内部是一些有用的额外信息,其中有端口号
总结:IP将数据包发送到正确的计算机上,而UDP将数据包发送到计算机运行的正确程序中
TCP协议优点:1.TCP数据包有序列号 2.TCP可以处理无序的数据包传输 3.来回发送的数据会给发送者一个成功发送的指示,可用于网络推断阻塞
当然,因为IP地址是数字组成,于是就有了域名映射到地址的说法(称为域名系统 DNS)
万维网
万维网是互联网上的一个服务,它通过超文本传输协议(HTTP)和超文本标记语言(HTML)来实现网页的浏览和信息的展示
概念补充:网络中立性(含义:任何数据都以相同的速度传递,不分优先级)
这里做一下因特网和万维网和互联网的区别:因特网是设备之间的互联,万维网是资源之间的共享
互联网:基于多种协议,如TCP/IP协议,这是互联网通信的基础
PS:互联网中有URL地址,URL(Uniform Resource Locator,统一资源定位符)是互联网上用来标识某一资源的地址。它是一个字符串,用于指定网页、图片、视频或其他任何类型资源在互联网上的位置。URL 通常包含以下几个部分:
- 协议(Scheme):指定访问资源所使用的协议,如 http、https、ftp 等。
- 子域名(Subdomain):可选,可以用于指定特定的服务或区域。
- 域名(Domain):网站的名称,如 google.com。
- 端口(Port):可选,用于指定服务器上的特定服务端口,默认情况下 http 是 80,https 是 443。
- 路径(Path):指定服务器上的文件或资源路径。
- 查询字符串(Query String):可选,用于传递额外的参数或数据。
- 片段标识符(Fragment Identifier):可选,用于指向页面内的特定部分或资源
一个典型的 URL 示例是:
https://www.example.com:8080/path/to/page?name=ferret&color=purple#section1
在这个例子中:
https 是协议
www.example.com 是域名,其中 www 是子域名
8080 是端口
/path/to/page 是资源的路径
name=ferret&color=purple 是查询字符串,其中 name 和 color 是参数,ferret 和 purple 是对应的值
section1 是片段标识符,通常用于指向页面内的一个锚点
万维网:主要使用HTTP协议来传输数据,HTML是其主要的标记语言
18.机器学习
本质:让计算机在数据中学习,然后做出预测和决策的算法
这里举例是分类问题:(机器学习的算法是最大化正确分类,同时最小化错误)
分割决策空间的线称为决策空间,分类模式如下
1.挑选特征、选择恰当函数来分割不同组别以达到最高准确率
2.用决策树、决策森林来对新数据分类
因为隐藏层有很多,所以也叫深度学习
强化学习定义:在一遍一遍不断学习之后有成功的决策使用
19.计算机视觉
本质:通过让计算机从数字,图像和视频中获取高级理解
计算机视觉:由kernel(特殊矩阵运算)来找到相应特征,Kernel可以由神经网络自行学习
神经网络中有卷积这一算法,卷积就是用标记的矩阵 x 对应像素块的值 里面的一个概念:卷积核:也称为滤波器,是卷积操作中使用的小矩阵,用于提取图像的局部特征。
小tips:卷积神经网络是一种深度学习模型,特别适用于处理图像数据
作用领域:
- 图像获取:使用摄像头或其他图像捕捉设备收集图像数据。
- 预处理:对图像进行去噪、增强、归一化等操作,以提高后续处理的效果。
- 特征提取:从图像中提取有用的信息,如边缘、角点、纹理等。
- 目标检测:识别图像中的特定对象或模式。
- 目标识别与分类:确定图像中对象的类别,如区分不同的物体或生物。
- 场景重建:从图像中恢复三维信息,构建场景的三维模型。
- 运动估计:分析图像序列,估计物体的运动信息。
20.NLP(自然语言处理)
NLP,全称为自然语言处理(Natural Language Processing),是人工智能和语言学领域的一个分支,它涉及到使计算机能够理解、解释和生成人类语言(如英语、中文等)的技术
目的:小人类语言和计算机之间的差距,使计算机能够更有效地处理和生成自然语言数据
实现NLP技术有:
- 规则基础方法:基于手工编写的规则来处理语言数据。
- 统计方法:使用统计模型来预测语言模式和概率。
- 机器学习:利用大量数据训练模型,以识别语言模式和生成语言。
- 深度学习:特别是神经网络,如循环神经网络(RNN)、长短期记忆网络(LSTM)和变换器(Transformer),这些模型能够处理复杂的语言结构和长距离依赖问题。
文中主要讲解的是音频 由快速傅里叶变换算法实现的波频转换
21.机器人
这里讨论一个主要的算法:PI控制器和PID控制器
介绍:
PI控制器是一种常见的控制算法,广泛应用于各种工业控制系统中,如温度控制、压力控制、流量控制等。PI控制器的名称来源于它主要由两个部分组成,比例(Proportional)和积分(Integral)
比例部分是控制算法的基础,其目的是减少误差;积分部分用于消除系统的稳态误差
PID控制器 比例(Proportional)、积分(Integral)和微分(Derivative)三个组成部分,这三个部分共同作用于控制器的输出,以实现对系统状态的精确控制
比例控制是PID控制器的基础部分,它直接响应当前的误差值(期望值与实际值的差值)。比例增益(Kp)决定了控制器对误差的响应强度。比例控制的输出与误差成正比
积分控制用于消除系统的稳态误差,即随着时间的推移累积的误差。积分增益(Ki)决定了控制器对累积误差的响应。积分控制的输出与误差随时间的积分成正比
微分控制基于误差的变化率,即误差随时间的变化速度。微分增益(Kd)决定了控制器对误差变化率的响应。微分控制有助于预测误差的未来趋势,从而提供更快的响应和减少超调
PID控制存在一定的局限性,比如 1.参数调整困难:在某些复杂的系统中,找到最优的PID参数可能需要大量的实验和调整 2.对噪声敏感:微分控制部分对测量噪声较为敏感,可能会导致控制器输出的波动
注意:图画图片参考一位学习者记的笔记
本文来自博客园,作者:Alaso_shuang,转载请注明原文链接:https://www.cnblogs.com/Alaso687/p/18294372