当前课程知识点:数据结构(上) > 第一章 绪论(上) > (a)计算 > 01a-6 : 好算法
什么是一个好的算法
或者说是一个好的计算过程
这件事并不容易回答
我们也可能从不同的侧面
听到过不同的回答
比如说 它必须是刚才说的正确的
它应该有足够的能力来处理
各种规模的 包括可能是一些特殊
也可能是一些一般性的问题实例
也可能是退化的 或正常的输入
以及所有合法的那些输入
我们说这确实是好的算法的一方面
但是很遗憾
这不是我们这里最在意的
也可能有的人会提到
我们不光是要对合法的输入能处理
对不合法的输入 也需要能够处理
也就是所谓的需要健壮
很遗憾 这部分
也不是我们这里最强调的
虽然我们在做题的时候
在完成一个数据结构的时候
要考虑这些
但首先考虑的并不是这些
还有一部分呢 是说
一个好的程序或者好算法
需要是可读的
这个也是很重要的一个方面
虽然也不是我们最重要的方面
但是我们要强调这一点
所谓的程序 是你作为人
去指挥计算机的途径
也是你和计算机相互沟通的一个渠道
我们说这很重要
是对的 但不完全是这样
我们说还有一方面
也就是说 程序语言
实际上像自然语言一样
它也是人与人之间打交道的
一个很重要的部分
所以可读性是非常强调的一条
也就是说 你所设计出来的算法
在形式上 必须是结构清晰的
所有的变量 和有些有语义的对象的命名
都应该是准确的
同时还应该准备足够多的注释
包括文档等等
这个很重要
但是还不是最重要的
那我们这里头 最最重要的
到底是什么呢?
我们说最最重要的
其实就是这样两个字 效率
也就是说 我们需要不仅能够
指挥计算机进行计算
而且希望计算的速度要尽可能的快
同时消耗的资源
比如说空间的资源
要尽可能的少
既要马儿跑
又要马儿不吃草
做不到
我们这里所努力的方向是
既要马儿快快跑
又要马儿吃得少
有一个很著名的公式 大家都应该听过
也就是说 算法和数据结构的结合
就可以得到解决问题的程序
那正如我们刚才所说的
程序未必能够有效地进行计算
所以这里 狗尾续貂
对这个公式略做一点大胆的修改
我们说在算法和数据结构
这两个因素都兼具之后
我们还需要使得它具有效率
当然前提是
使得这两部分不是一般的
简单的堆砌
而是能够有机地融合 结合
只有在这样的情况下
我们才能够写出
高效的程序和算法
从而高效率地
来完成计算这样一个过程
这也正是我们在这一节里
希望告诉大家的
几个重要概念及观念
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验