当前课程知识点:数据结构(上) > 第一章 绪论(上) > (b)计算模型 > 01b-7: RAM模型
我们再来看Random Access Machine
也就是所谓的RAM模型
在可计算的意义上讲
它和图灵机是完全对等的
尽管二者之间还是有重要的区别
那么二者之间首先的一个共同之处就是
它们都拥有无限的空间
当然这个在实际世界中还不能做到
这种无限的空间
在这里是以顺序编号的
一组寄存器的形式给出来
每一个寄存器换而言之
都由一个自然数唯一的标识
我们可以说第0号寄存器 第1号寄存器
第2号第3号 以及诸如此类
那么与图灵机的转化函数相对应的
这里提供了一系列的
大概有10种格式的可行的语句
我们大概看一下
首先是常数赋值语句
也就是说 我们可以将一个常数
赋予编号为i的那个寄存器
我们也可以在寄存器与寄存器之间
完成数值的复制
具体来说
我们可以把第j个寄存器中的数值
赋值到第i个寄存器中
如果这个是直接通过一个自然数
来确定一个寄存器的话
那么这样一种方式
就叫做间接取址
学过汇编的同学
应该非常好理解这一点
其他的同学 我相信也不难
我们不妨在这里解释一下
这里所谓的间接取址
实际上就是首先根据给定的编号j
取出编号为j的寄存器中
所存放的整数数值
并将这个整数作为一个编号
再取对应寄存器的数值
最终 将取出来的这个数值
复制到另一个指定的
比如说第i个寄存器中
但这种复制的方向
也可能颠倒过来
接下来
这里还支持寄存器与寄存器之间
数值的加和减两种最基本的算数运算
并且能够将结果
转入第3个寄存器中
为了构成算法
这里也不可或缺的需要有
条件判断语句和转向语句
所谓条件判断语句 这里有判0
也就是一个寄存器的数值是不是0
包括判正
也就是其中的数值是不是一个正数
只要条件满足
就会相应的转到对应的语句
这个l呢都是顺序语句的编号
当然也有绝对的转向
还有一个特别的STOP语句
也就是终止语句
那么这个STOP语句的功能
和图灵机中的那个停机状态h是完全对等的
每当执行到STOP 对应的程序都会停止下来
我们稍后再看RAM模型的一个例子
但实际上到这里
我们已经完全可以将RAM模型
和图灵机模型放在一起做一个概括
我们说二者其实都是对一般的
计算工具进行抽象以后的简化
这样的一个简化以后
我们不仅可以用这种基本的简单的操作
来描述我们的算法
而且更重要的是
使得我们可以因此独立于具体的环境和平台
对具体算法的总体效率做出比较和评判
而且这种比较评判
相对于前面那种实测的方法
更具有可信度
那么为什么能这样呢
这里关键是做了一个转换
也就是说我们将算法所运行的时间
转化为在上述这些基本平台上
执行算法的过程中
所需执行基本操作的次数
时间 到次数
这样就将时间的统计问题
转换为了次数的整体求和和估算问题
因此 我们前面所定义的那个T(n)
也就是在求解规模为n的问题的时候
我们所需要的时间成本
我们就可以转化为
为此所需要执行的基本操作的次数
这样的好处在哪呢 有很多
比如说 其中一点就是
至少我们现在可以不用考虑硬件环境
一个算法好不好 并不取决于运行的时候
所依赖的那个CPU主频的快慢
而取决于它本身它需要执行多少次CPU的计算
我们说这样确实更加客观
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)计算
--演示
--(a)计算--作业
-(b)计算模型
-(b)计算模型--作业
-(c)大O记号
-(c)大O记号--作业
-(d)算法分析
-(d)算法分析--作业
-(e)迭代与递归
-(e)迭代与递归--作业
-(xc)动态规划
-- 演示
-(xc)动态规划--作业
-本章测验--作业
-(a)接口与实现
--02A-5 复制
-(a)接口与实现--作业
-(b)可扩充向量
-(b)可扩充向量--作业
-(c)无序向量
--02C-1 概述
--02C-3 插入
--02C-6 查找
--02C-8 遍历
-(c)无序向量--作业
-(d1)有序向量:唯一化
-(d1)有序向量:唯一化--作业
-(d2)有序向量:二分查找
-(d2)有序向量:二分查找--作业
-(d3)有序向量:Fibonacci查找
-(d3)有序向量:Fibonacci查找--作业
-(d4)有序向量:二分查找(改进)
-(d4)有序向量:二分查找(改进)--作业
-(d5)有序向量:插值查找
-第二章 向量(下)--(d5)有序向量:插值查找
-(e)起泡排序
--02E-2 改进
--02E-3 反例
-(e)起泡排序--作业
-(f)归并排序
-(f)归并排序--作业
-本章测验--作业
-(a)接口与实现
--03A-4 实现
-(a)接口与实现--作业
-(b)无序列表
--03B-2 查找
-(b)无序列表--作业
-(c)有序列表
--03C-3 查找
-(c)有序列表--作业
-(d)选择排序
--03D-1 构思
--03D-2 实例
--03D-3 实现
--03D-4 推敲
--03D-6 性能
-(d)选择排序--作业
-(e)插入排序
--03E-1 经验
--03E-2 构思
--03E-3 对比
--03E-4 实例
--03E-5 实现
-(e)插入排序--作业
-(xd)习题辅导:LightHouse
-本章测验--作业
- (a)栈接口与实现
--04A-1 栈
--04A-2 实例
--04A-3 实现
- (a)栈接口与实现--作业
-(c1)栈应用:进制转换
-第四章 栈与队列--(c1)栈应用:进制转换
-(c2)栈应用:括号匹配
-(c2)栈应用:括号匹配--作业
-(c3)栈应用:栈混洗
-第四章 栈与队列--(c3)栈应用:栈混洗
-(c4)栈应用:中缀表达式求值
-(c4)栈应用:中缀表达式求值--作业
-(c5)栈应用:逆波兰表达式
-第四章 栈与队列--(c5)栈应用:逆波兰表达式
-(d)队列接口与实现
--04D-1 接口
--04D-2 实例
--04D-3 实现
-第四章 栈与队列--本章测验
-(a)树
--05A-1 动机
--05A-2 应用
-(a)树--作业
-(b)树的表示
--05B-2 父亲
--05B-3 孩子
-第五章 二叉树--(b)树的表示
-(c)二叉树
-(c)二叉树--作业
-(d)二叉树实现
-(d)二叉树实现--作业
-(e1)先序遍历
-(e1)先序遍历--作业
-(e2)中序遍历
-第五章 二叉树--(e2)中序遍历
-(e4)层次遍历
-第五章 二叉树--(e4)层次遍历
-(e5)重构
-(e5)重构--作业
-本章测验--作业
-(a)概述
-(a)概述--作业
-(b1)邻接矩阵
-(b1)邻接矩阵--作业
-(c)广度优先搜索
--06C-2 策略
--06C-3 实现
--06C-5 实例
-(c)广度优先搜索--作业
-(d)深度优先搜索
--06D-1 算法
--06D-2 框架
--06D-3 细节
-(d)深度优先搜索--作业
-第六章 图--本章测验