当前课程知识点:计算思维导论 > 第七单元 > 7.9 技术层面的其他方法学 > Video
大家好
这一节我们介绍
技术层面的其他方法学
首先我们讲
串行与并行
所谓串行
简单地说
就是事情要一件一件地做
饭要一口一口地吃
一件事情还没有做完之前
不会开始做第二件事情
所谓并行
就是人多力量大
三个臭皮匠
顶个诸葛亮的朴素思想
简单地说就是几件事情同时做
同时做的几件事情可以相关
也可以无关
我们先看一个童话故事
从前一个年轻的国王
向邻国一位聪明美丽的公主求婚
公主给他出了一道题
如果国王
能够在规定的时间内给出答案
便接受他的求婚
这道题
是求这么一个17位数的
一个真因子
国王回去后
立即开始逐个数的进行计算
他从早到晚
共计算了三万多个数
最终还是没有结果
国王向公主求情
公主告诉了他一个答案
并且说我再给你一个机会
再求一个17位数的真因子
如果还求不出
将来您只好做我的证婚人了
国王立即回国
并向时任宰相的数学家请教
宰相仔细思考后认为
一个17位数的最小的一个真因子
不会超过9位
于是他给国王出了一个主意
按自然数的顺序
给全国的老百姓每人编一个号
等公主给出题目后
立即通报全国
让每个老百姓用自己的编号
去除这个数
除尽了立即上报
赏金万两
最后
国王用这个办法求婚成功
在这个童话故事中
国王最先使用的是串行计算
依靠个人的能力
逐个数进行演算
即便最终能找到答案
也是一个十分漫长的过程
而宰相
提出的是一种并行计算
它依靠大量的人力资源
在短时间内
就能获得想要的计算结果
现实生活中
我们每天
都在串行 并行地工作和思考
比如
张山病了
去医院看医生
先挂号
再就诊
发现门诊部很多人在排队
医生看病
得按顺序一个一个的来
他需要等
这换谁都不会傻等
张山就从包里找出一本书
和一个MP3的随身听来
一边看书
一边听音乐
时不时还跟周围的人说几句话
计算机世界中的串行和并行
主要体现在两个方面
一是数据通信
分为串行通信和并行通信
二是计算
分为串行计算和并行计算
在数据通信方面
我们知道
计算机的网口
RS232
USB接口等等都是串口
打印机接口多半都是并口
机器内部的数据总线也是并行的
并行数据传输
通常是以计算机的字长为单位
字长可以是
8位
16位
32位等等
一次传送一个字长的数据
适合于外部设备
与CPU之间近距离信息交换
而串行通信则不然
数据是一位一位地传送
传送的距离可以很长
因此串行适用于
长距离而速度要求不高的场合
传输速率
用每秒中传送的位数来表示
称之为波特率(bps)
在计算方面
所谓串行计算
就是单处理器的机器上
按照计算任务的先后顺序
一个一个地进行计算
一个计算任务完成后
才能执行另一个计算任务
所谓并行计算
就是用多个处理机
来协同求解一个问题
即将被求解的问题
分解成若干个部分
各部分均由一个独立的处理机
来并行计算
显然
并行是相当自然的思维方式
我们假设
某个程序由5个子任务组成
并且每个子任务
运行时间均需要100秒
则整个计算任务需要500秒
如果我们通过
右边这样的并行计算方式
加速其中的第二个和第四个子任务
那么程序运行的总时间
将由原来的500秒分别缩减至
400秒和350秒
并行计算系统
既可以是专门设计的
含有多个处理器的高性能计算机
也可以是以某种方式互连的
若干台独立计算机构成的集群
当然
也包括多核CPU
在同时处理多个任务的时候
多核处理器
可以自然地将不同的任务
分解给不同的核
显然
并行计算基于一个简单的理论
N台计算机
应该能够提供N倍计算能力
不论当前计算机的速度如何
都可以期望
被求解的问题
在N分之一的时间内完成
但这只是一个理想的情况
因为被求解的问题
在通常情况下
都不可能被分解为
完全独立的各个部分
而是需要
进行必要的数据交换和同步
尽管如此
并行计算仍然可以使
计算系统的性能
得到实质性的改进
而改进的程度取决于
欲求解问题自身的并行程度
接下来我们看一看
局部化和信息隐藏
辩证唯物主义认为
正确处理好全局与局部
也就是整体与部分的关系
对于科学地认识世界和改造世界
具有重要的意义
整体是指事物的各内在要素
相互联系构成的有机统一体
及发展的全过程
部分
是指组成有机统一体的各个方面
要素及发展过程的某一个阶段
全局是由局部构成的
但是
全局并不是
局部的简单相加和组合
它统率局部
高于局部
程序中的局部化
强调的是把
某些数据
以及处理这些数据的程序代码
尽量放在一起
形成一个模块
这样
即便这一部分
需要变更或者出现问题
也容易管理和解决
这样的理念生活中处处都有
比如
从整个国家的管理来说
国务院下辖
外交部
国防部
发改委
教育部
科技部
公安部
(国家)安全部
监察部
民政部
司法部
财政部
国土资源部
铁道部
文化部
卫生部等等几十个部委
各部委的职责分明
自己的问题自己解决
那么教学质量的提升
应该由教育部负责
而不至于让外交部或者国防部插手
局部化最好的办法是分成模块
形式上分出显式的模块
自然就把问题局部化了
每个模块只在规定的渠道
与其他模块通信
模块内部定义的许多量
只和本模块有关
外界无法访问
在这个意义上
这些量就被模块屏蔽了
达到了数据隐藏的目的
例如
这是一个求组合数的C语言程序
在这里
k是与外部通信的量
f L是局部量
主程序无法访问
函数Fact()屏蔽了f和L
因而
在函数过程中因某种原因修改L
只局限于函数Fact()
对主程序没有影响
为了减少
模块间的耦合要多使用局部量
少用全局量
全局量还会引起
函数副作用之类的问题
局部化
是程序设计中的一个普遍原则
我们早已接受这种思想
例如
语言中
循环控制变量的定义
只在本循环内有效
每个程序段中
声明的数据
只对本程序段有效等等
这里只是说
要有意识地使程序
模块化 局部化
从而达到可读性好
容易修改和维护的目的
越是大程序越要重视这一点
模块化的概念
给每个程序设计者
提出了一个基本的问题
我们怎么样分解一个计算任务
以获得最好的模块组合
信息隐藏
就很好地回答了这个问题
直观地理解
信息隐藏就是把某些信息隐藏起来
不让他人了解
传统的信息隐藏
起源于古老的隐写术
在古希腊战争中
为了安全地传送军事情报
奴隶主剃光奴隶的头发
将情报纹在奴隶的头皮上
待头发长起来后
再派出去传送消息
我国古代也早已有
以藏头诗 藏尾诗 漏格诗
以及绘画等形式
将要表达的意思
和密语隐藏在诗文
或画卷中的特定位置
一般人只注意诗
或画的表面意境
而不会去
关注或者破解隐藏其中的密语
程序设计中的信息隐藏原理
认为模块设计决策的特征
彼此是隐藏的
换句话说
模块应当有这样的规定和设计
就是包含在模块内的信息
对于其他不需要这些信息的模块
是不可访问的
即通过信息隐藏
可以定义和实施
对模块的过程细节
和局部数据结构的存取限制
信息隐藏的目的
不仅仅是彼此是否可见的问题
更重要的是
彼此是否可操作的问题
就像两个不同的单位
如果内部的所有情况
都可以相互了解
而且一个单位可以随意
曝光或者插手
另一个单位的内部事务
那将是一个什么样的情形
现实世界显然是不可能的
别说随意插手
就连单位周围都立起围墙
增设门卫
外人不得随意进入
有效的模块化
可以定义一组独立的模块来达到
这些独立的模块彼此之间
仅仅交换那些
为了完成系统功能所必需的信息
在测试以及以后的维护期间
当需要对软件进行修改时
这样规定和设计的模块会带来
极大的好处
因为绝大多数的数据和过程
是软件其他部分不可访问的
因此
在修改中由于疏忽
而引起的错误传播
到其他部分的可能性极小
信息隐藏原理
在人与人之间相处时
也有相同的意义
每个人都有自己的隐私
比如美女的年龄
家庭的财产
身体的健康状况等等
这些隐私是不愿意让别人了解的
如果你由于好奇去打探别人的隐私
恐怕会使人家尴尬
也会给自己带来不便
严重时
就会影响人与人之间的关系
原来也许是好朋友
之后恐怕都不愿意在一起相处了
好
这一节就讲到这
谢谢大家
-1.1 计算思维及其教育
--Video
-2.1 计算是什么
--Video
-2.2 计算与自动计算
--Video
-2.3 计算机及其计算本质特征(I)
--Video
-2.4 计算机及计算的本质特征(II)
--Video
-3.1 数的表示与模拟计算
--Video
-3.2 数的表示与数字计算
--Video
-3.3 二进制加法运算的机器化
--Video
-3.4 “九九归一”的加法运算
--Video
-3.5 二进制之优越性及问题与代价
--Video
-4.1 从数学危机到图灵机
--Video
-4.2 图灵机的计算能力
--Video
-4.3 什么问题都能计算吗?
--Video
-4.4 冯•诺依曼机及其发展与演化
--Video
-4.5 从算盘到图灵机——机械计算的本质
--Video
-4.6 电子计算机——透过现象看本质
--Video
-5.1 思维可机械计算吗(I)
--Video
-5.2 思维可机械计算吗(II)
--Video
-6.1 量子理论
--Video
-6.2 量子计算机
--Video
-7.1 人类求解问题之过程
--Video
-7.2 基于计算(机)的问题求解过程
--Video
-7.3 面向过程的结构化设计方法学
--Video
-7.4 面向对象之方法学
--Video
-7.5 面向对象技术
--Video
-7.6 抽象
--Video
-7.7 计算学科中的抽象
--Video
-7.8 时间与空间及其相互转换
--Video
-7.9 技术层面的其他方法学
--Video
-7.10 认知层面的其他方法学
--Video
-8.1 算法与程序
--Video
-8.2 算法设计方法——枚举
--Video
-8.3 算法设计方法——递推
--Video
-8.4 算法设计方法——递归
--Video
-8.5 算法设计方法——分治
--Video
-8.6 算法设计方法——仿生
--Video
-9.1 机器间的通信方式
--Video
-9.2 数据转发方法
--Video
-9.3 网络分层体系结构
--Video
-9.4 有趣的对称加密技术
--Video
-9.5 难解的非对称加密技术
--Video
-9.6 数字签名及其应用
--Video
-9.7 从自然智能到人工智能
--Video
-9.8 符号主义的基本思想
--Video
-9.9 连接主义Ⅰ
--Video
-9.10 连接主义Ⅱ
--Video
-9.11 行为主义的基本思想
--Video
-9.12 机器翻译的愿景与困难
--Video
-9.13 峰回路转的自然语言处理
--Video
-9.14 信息传输中的问题与挑战
--Video
-9.15 重复传输与冗余编码
--Video
-9.16 校验与校验和
--Video
-9.18 自纠错技术及应用
--Video
-9.19 两种简单的数据压缩方法
--Video
-9.20 哈夫曼编码
--Video
-9.21 数据压缩极限与LZ压缩方法
--Video
-9.22 大海捞针的搜索引擎
--Video
-9.23 网页排序方法(PageRank)
--Video
-10.1 计算文化
--Video
-期末考试--作业