当前课程知识点:数据结构(上) > 第一章 绪论(上) > (c)大O记号 > 01c-1: 主流长远
接下来的这节我们将重点讨论大O记号
如果将我们在上一节所引入和介绍的计算模型
比作一杆公正的直尺
那么大O记号 就相当于是这杆直尺上的刻度
非常有意思的是
在这里我们并不需要一味地强调
这种刻度的精细程度
而是 在定性和定量之间
达到一个适度的折中
使得我们可以用更短的时间更迅速地
抓住DSA性能方面的要害和主要的方面
我们很快就会体会到
作为一种强大的工具
大O记号对于复杂度分析而言
是多么地至关重要
关于科学记号 在科学本身的发展过程中
所具有的这样的一种特殊的重要的作用
很多人都曾经注意到过
比如Alan Turing就曾经指出
对于数学而言 最最急需的
与其说是 一个又一个的新发现的定理
不如说是
尽早发现和设计出来的good notations
也就是好的记号
大O记号好的方面在哪呢?
我们可以概括为
中国古代诗人陶渊明的一句话
陶渊明在评价自己的时候
曾经说过自己是好读书的一类
但是他很注意一点 不求甚解
这里我们说所的不求甚解
并不是说不去求解
而是说 反过来
我们不要过多的拘泥于问题的细节
和一些琐碎的部分
换而言之 我们在考察一个东西
比如说DSA的时候
应该像考察一个人一样
应该更多的看中它的长远
也就是说 要看中DSA的潜力如何
比如在处理更大规模问题的时候
它应该是如何的
第二 也像考察一个人一样
我们不要过多地 纠结于它的细微不足
而应该更多的看到它主要的方面 也就是主流
非常有意思
陶渊明的这种见解
和我们将要介绍的大O记号的思路
居然不谋而合
回到最初的问题
也就是说 随着计算问题规模的不断增长
相应的计算成本会如何地增长
那么这里我们更多地关心的是足够大规模的问题
而且考察的是 计算成本的总体增长趋势
因此 我们更倾向于采用所谓的Asymptotic analysis
也就是渐近地分析方法
具体来说就是
我们要考察当问题的规模大于大于2
也就是足够大之后
相应地规模为n的问题
需要多少计算的时间
在这里我们上节曾经介绍过
可以转化为平台上的基本操作的次数
以及存储单元相应需要的规模
后者我们说通常可以不考虑
这方面可以参考我们的教科书和习题解析
用一张图来表示 也就是这样
如果我们用横轴表示问题的规模
用纵轴来表示相应地计算成本
那么 数据结构和算法具体的任何一个组合
都可以得到这样一条曲线
那么 我们所关心的并不是这条曲线
局部的、细微的 包括暂时的一些趋势
而是看它的主要的、长远的变化的趋势
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)深度优先搜索--作业
-第六章 图--本章测验