当前课程知识点:数据结构(上) > 第一章 绪论(上) > (a)计算 > 01a-4: 算法
我们现在也许已经到了可以稍微做一个总结的时候
什么叫做一个算法呢
什么叫做一个计算的过程呢
我们说计算的过程如果抽象的认为
是一个信息处理的过程的话
那么大致来说
首先它必须借助某种工具
比如说刚才的绳索计算机
或者是尺规计算机
然后呢 要遵照一定的规则
比如说刚才我们讲到的绳索的使用方法
以及尺规的使用方法
而且必须能够以明确且机械的一系列简单基本的操作
构成一个序列或者过程
当然更严格的定义
我们还需要学其他的课程才能给出来
那么这门课里头 我们认为
这样的一个定义已经基本上够用了
反过来讲 这里头用的工具
也就是我们说的计算机
实际上也是某种用于计算的一个模型
它也可以认为是信息处理的工具
所以我们可以再罗列一下 作为一个计算过程
也就是计算的方法 算法 到底是什么呢
我们不妨从外延的角度
刻画一下它到底应该具备哪些要素
我们可以看到 这里有很多个点
为什么呢 因为实际上它还具有很多要素
鉴于我们这个课的主题的关系
我们不必把它逐一的罗列出来并且逐一的去分析
但主要的几个 要在这里做一个介绍
首先都有问题本身的描述
也就是输入以及最后得到的东西
我们管它叫做输出
这是必须的 很好理解
那么正确性似乎也很好理解
也就是说 你所给出的这个计算过程 这个方法
应该确实能够达到你所需要的要求
虽然在实际中 很遗憾
这一点并不是那么容易轻易的证明
但是我们说 至少可以假定这个是应该满足的
另外呢 所有的动作都应该是确定的
就是说 应该可以描述为一个或者若干个基本的操作
这些操作都是语义明确的
不是说 可左可右 可上可下
或者说酌情适当等等等等
不含糊 而是确定的
比如说 七等分 抻直 过哪两个点做一条线
或者说至少过一个点做一条非退化的线等等
都属于确定性
还有呢 我们说必须要可行
什么叫可行呢 就是说所有这些操作
都必须在你的这种计算的条件下能够兑现
在这里我们不妨回忆一下 有一个很著名的小品
是由赵本山和宋丹丹表演的 叫做《钟点工》
宋丹丹上门陪他聊天
为了逗赵本山高兴 她讲了一个脑筋急转弯
她说如何把大象装到冰箱里去
她最后呢实际上给出一个方法
总共分三步
第一步是把冰箱门打开
第二步是把大象装进冰箱里
第三步是把冰箱门关上
表面上看 这种过程确实已经构成了一个算法
明明它确实可以明确的描述出来
而且你需要什么它怎么做的它都说的很清楚
但是我们说这里有一个致命的一点
也就是这个小品的笑点所在
实际上它其中的动作有一条是不能兑现的
也就是中间那一步把大象赶到冰箱里去
所以我们说 如果你写出这样的一个算法出来
那其实是没有任何意义的 因为它是不可行的
好 那么接下来还有一点呢 其实也很重要
就是 每一个计算过程 如果它真正是有意义的话
必须是有穷的 必须能够在有限步之后终止
并且得到一个输出
这一点也表面上看很自然
甚至你觉得再自然不过了
但是我们恰恰要说的是 它其实并不自然
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验