当前课程知识点:数据结构(上) >  第一章 绪论(下) >  (d)算法分析 >  01d-7: 封底估算-2

返回《数据结构(上)》慕课在线视频课程列表

01d-7: 封底估算-2在线视频

01d-7: 封底估算-2

下一节:01-E-1: 迭代与递归

返回《数据结构(上)》慕课在线视频列表

01d-7: 封底估算-2课程教案、知识点、字幕

无论费米还是埃拉托斯特尼

无论是物理学

还是几何学 包括测地学

之所以能成功运用这种方法

关键都在于它们

善于抓住问题的主要方面

从而简捷地得出

这个问题的总体的规律

我们说这种方法

可以很自然地运用到

我们复杂度的分析过程中

当然对象变成了时间

因此我们对很多的时间量

从今天开始就要建立起

直接的概念

有哪些概念呢?

第一个就是关于一天

我们说我们的基本计算单位

当然是秒

我们的CPU在一秒钟

现在gigahertz

大概是10的9次方次运算

那么一天有多少秒呢?

我们这里要换算一次

并且把它记下来

我们说大概是24小时

乘以60分钟乘60秒

那么技巧就是

把24小时

要放大估算为25

把六六三千六放大成大概是4000

这个时候 我们就看得出来端倪了

大概是 1后面接5个零

所以我们从此要建立一个概念

一天大概就是10的5次方秒

那么我们的一生呢?

当然希望各位都是长命百岁

我们不妨用一个世纪来估算

100年 每年360天

大概是三万多天

如果这么样换算的话

大概是3乘以10的9次方秒

在清华 我们都有一个宏伟的目标

要为祖国健康的工作50年

那么这50年是多少呢?

从今天开始我们应该有一个概念了

大概1.6乘以10的9次方

而无论这个 还是这个

我们说都不是很好记忆

那么怎么好记忆呢?

今天的人们更喜欢用

三生三世这样的词来形容长久

那么这个准确地讲 又是多少呢?

我们说大概近似为300年

那么恰好大致是

10的10次方秒

这是个非常好记的数值

所以我们以后要记住

所谓的三生三世

其实对应的就是

10的10次方秒

所以串起来 我们说

在三生三世中的一天

其实就相当于

在一天中的一秒

这个概念 我们要从此建立起来

我们也知道现代物理学

所估算出的宇宙大爆炸至今

也就是宇宙的寿命

大概是10的21次方秒

所以相对而言

在整个宇宙生命中的三生三世

其实就相当于

在三生三世中的0.1秒

我们来看封底估算的

一个具体实例 也就是

如果我们承担一个任务

要对全国人口普查的数据进行排序

这个时候的任务的规模

十几亿人口

我们大致归算为十亿

也就是10的9次方

那么我们将可以

怎么来完成这个任务呢?

我们有两方面的选择

一方面是在硬件机器上

不断地做改进

一方面是在算法上做改进

我们分别来看一下

先来考虑用普通的PC机

也就是诸位用的

台式机和笔记本电脑

目前主流的频率

大概都是10的9次方

我们大致地认为它在一秒钟之内

可以进行的浮点

包括通常的整数运算吧

我们估算为10的9次方次

那么如果采用我们刚刚介绍的

Bubble sort 就是起泡排序

会怎么样呢?

我们刚才说了

它的复杂度是平方

所以是10的9次方再平方

应该是10的18次方

这样的一个计算量

这两个做一除法 就会得到

大致需要10的9次方秒

10的9次方秒是多少呢?

我们刚刚估算过

一个世纪大概是

3乘以10的9次方秒

而10的9次方秒大概就是

三分之一个世纪

也就是约30年

我们再来看看

如果改用比较高性能的机器

比如天河1A

这也是一度成为世界上

计算速度最快的机器

它的计算能力是千万亿次

我们大致认为是一个P(peta)

具体来说 就是10的15次方

那么如果估算一下的话

这边是10的18次方

除以10的15次方

我们说 还需要大概一千秒

一千秒什么概念呢?

大致是20分钟

所以通过硬件的改进

我们可以将这个问题

从30年改进为20分钟

这个硬件的改进

确实有相当的效果

但是我们再来看另一个维度

如果我们改用不同的算法

比如说 稍候要介绍的

Merge sort 也就是归并排序

那么它的复杂度是nlogn

所以除了这个10的9次方以外

它还要附属的乘上去一个

10的9次方的对数

这样乘下来呢

是大概等于3乘以10的10次方

而这个地方是10的9次方

经过一个简单的估算 就会发现

实际上用这种算法

即使是用普通的PC机

我们也只需要30秒

没错 30秒

和刚才的一千秒比起来

小很多

如果你既要用这样的

一个高明的算法

同时用这样一个

更好的机器来计算的话

那么完成这个任务

大致只需要零点几个毫秒

所以从这里我们也可以

看出来算法的威力

我们再看一遍

通过硬件的改进

我们是将30年缩短为20分钟

而通过算法的改进

我们可以将30年缩短为

不足一分钟 只有半分钟

从这里 我们也可以看出来

算法改进的威力是多么的巨大

我们的数据结构

研究这样一类问题

那么它的意义更是可想而知

我们更是有必要把这门课

学好 掌握好

数据结构(上)课程列表:

第零章

-选课之前

--写在选课之前

--宣传片

-考核方式

--考核方式

-OJ系统说明

--关于OJ

--1-注册与登录

--2-界面与选课

--3-提交测试

-关于课程教材与讲义

--课程教材与讲义

-关于讨论区

--关于讨论区

-微信平台

--html

-PA晋级申请

--PA晋级

--MOOC --> THU 晋级申请专区

--THU --> CST 晋级申请专区

--编程作业不过瘾?且来清华试比高!

第一章 绪论(上)

-(a)计算

--01-A-1: 计算

--01a-2: 绳索计算机

--01a-3: 尺规计算机

--01a-4: 算法

--01a-5 : 有穷性

--演示

--01a-6 : 好算法

--(a)计算--作业

-(b)计算模型

--01b-1: 性能测度

--01b-2: 问题规模

--01b-3: 最坏情况

--01b-4: 理想模型

--01b-5: 图灵机

--01b-6: 图灵机实例

--01b-7: RAM模型

--01b-8: RAM实例

-(b)计算模型--作业

-(c)大O记号

--01c-1: 主流长远

--01c-2: 大O记号

--01c-3: 高效解

--01c-4 : 有效解

--01c-5 : 难解

--01c-6: 2−Subset

--01c-7: 增长速度

-(c)大O记号--作业

第一章 绪论(下)

-(d)算法分析

--01d-1: 算法分析

--01d-2: 级数

--01d-3: 循环

--01d-4: 实例:非极端元素+起泡排序

--01d-5: 正确性的证明

--01d-6: 封底估算-1

--01d-7: 封底估算-2

-(d)算法分析--作业

-(e)迭代与递归

--01-E-1: 迭代与递归

--01-E-2: 减而治之

--01-E-3: 递归跟踪

--01-E-4: 递推方程

--01-E-5: 数组倒置

--01-E-6: 分而治之

--01-E-7: 二分递归:数组求和

--01E-8 二分递归:Max2

--01E-09: Max2:二分递归

-(e)迭代与递归--作业

-(xc)动态规划

--01XC-1: 动态规划

--01XC-2: Fib():递推方程

--01XC-3: Fib():封底估算

--01XC-4: Fib():递归跟踪

--01XC-5: Fib():迭代

--01XC-6: 最长公共子序列

-- 演示

--01XC-7: LCS:递归

--01XC-8: LCS:理解

--01XC-9: LCS:复杂度

--01XC-A: LCS:动态规划

-(xc)动态规划--作业

-本章测验--作业

第二章 向量(上)

-(a)接口与实现

--02A-1 接口与实现

--02A-2 向量ADT

--02A-3 接口操作实例

--02A-4 构造与析构

--02A-5 复制

-(a)接口与实现--作业

-(b)可扩充向量

--02B-1 可扩充向量

--02B-2 动态空间管理

--02B-3 递增式扩容

--02B-4 加倍式扩容

--02B-5 分摊复杂度

-(b)可扩充向量--作业

-(c)无序向量

--02C-1 概述

--02C-2: 循秩访问

--02C-3 插入

--02C-4 区间删除

--02C-5 单元素删除

--02C-6 查找

--02C-7 唯一化

--02C-8 遍历

-(c)无序向量--作业

-(d1)有序向量:唯一化

--02D1-1 有序性

--02D1-2 唯一化(低效版)

--02D1-3 复杂度(低效版)

--02D1-4 唯一化(高效版)

--02D1-5 实例与分析(高效版)

-(d1)有序向量:唯一化--作业

-(d2)有序向量:二分查找

--02D2-1 概述

--02D2-2 接口

--02D2-3 语义

--02D2-4 原理

--02D2-5 实现

--02D2-6 实例

--02D2-7 查找长度

-(d2)有序向量:二分查找--作业

第二章 向量(下)

-(d3)有序向量:Fibonacci查找

--02D3-1 构思

--02D3-2 实现

--02D3-3 实例

--02D3-4 最优性

-(d3)有序向量:Fibonacci查找--作业

-(d4)有序向量:二分查找(改进)

--02D4-1 构思

--02D4-2 版本B

--02D4-3 语义

--02D4-4 版本C

--02D4-5 正确性

-(d4)有序向量:二分查找(改进)--作业

-(d5)有序向量:插值查找

--02D5-1 原理

--02D5-2 实例

--02D5-3 性能分析

--02D5-4 字宽折半

--02D5-5 综合对比

-第二章 向量(下)--(d5)有序向量:插值查找

-(e)起泡排序

--02 E-1 构思

--02E-2 改进

--02E-3 反例

--02E-4 再改进

--02E-5 综合评价

-(e)起泡排序--作业

-(f)归并排序

--02F-1 归并排序:构思

--02F-2 归并排序:主算法

--02F-3 二路归并:实例

--02F-4 二路归并:实现

--02F-5 二路归并:正确性

--02F-6 归并排序:性能分析

-(f)归并排序--作业

-本章测验--作业

第三章 列表

-(a)接口与实现

--03A-1 从静态到动态

--03A-2 从向量到列表

--03A-3 从秩到位置

--03A-4 实现

-(a)接口与实现--作业

-(b)无序列表

--03B-1 循秩访问

--03B-2 查找

--03B-3 插入与复制

--03B-4 删除与析构

--03B-5 唯一化

-(b)无序列表--作业

-(c)有序列表

--03C-1 唯一化·构思

--03C-2 唯一化·实现

--03C-3 查找

-(c)有序列表--作业

-(d)选择排序

--03D-1 构思

--03D-2 实例

--03D-3 实现

--03D-4 推敲

--03D-5 selectMax()

--03D-6 性能

-(d)选择排序--作业

-(e)插入排序

--03E-1 经验

--03E-2 构思

--03E-3 对比

--03E-4 实例

--03E-5 实现

--03E-6 性能分析

--03E-7 平均性能

--03E-8 逆序对

-(e)插入排序--作业

-(xd)习题辅导:LightHouse

--03X D 习题辅导:LightHouse

-本章测验--作业

第四章 栈与队列

- (a)栈接口与实现

--04A-1 栈

--04A-2 实例

--04A-3 实现

- (a)栈接口与实现--作业

-(c1)栈应用:进制转换

--04C1-1 应用

--04C1-2 算法

--04C1-3 实现

-第四章 栈与队列--(c1)栈应用:进制转换

-(c2)栈应用:括号匹配

--04C2-1 实例

--04C2-2 尝试

--04C2-3 构思

--04C2-4 实现

--04C2-5 反思

--04C2-6 拓展

-(c2)栈应用:括号匹配--作业

-(c3)栈应用:栈混洗

--04C3-1 混洗

--04C3-2 计数

--04C3-3 甄别

--04C3-4 算法

--04C3-5 括号

-第四章 栈与队列--(c3)栈应用:栈混洗

-(c4)栈应用:中缀表达式求值

--04C4-1 把玩

--04C4-2 构思

--04C4-3 实例

--04C4-4 算法框架

--04C4-5 算法细节

--04C4−6A 实例A

--04C4−6B 实例B

--04C4−6C 实例C

--04C4-6D 实例D

-(c4)栈应用:中缀表达式求值--作业

-(c5)栈应用:逆波兰表达式

--04C5-1 简化

--04C5-2 体验

--04C5-3 手工

--04C5-4 算法

-第四章 栈与队列--(c5)栈应用:逆波兰表达式

-(d)队列接口与实现

--04D-1 接口

--04D-2 实例

--04D-3 实现

-第四章 栈与队列--本章测验

第五章 二叉树

-(a)树

--05A-1 动机

--05A-2 应用

--05A-3 有根树

--05A-4 有序树

--05A-5 路径+环路

--05A-6 连通+无环

--05A-7 深度+层次

-(a)树--作业

-(b)树的表示

--05B-1 表示法

--05B-2 父亲

--05B-3 孩子

--05B-4 父亲+孩子

--05B-5 长子+兄弟

-第五章 二叉树--(b)树的表示

-(c)二叉树

--05C-1 二叉树

--05C-2 真二叉树

--05C-3 描述多叉树

-(c)二叉树--作业

-(d)二叉树实现

--05D-1 BinNode类

--05D-2 BinNode接口

--05D-3 BinTree类

--05D-4 高度更新

--05D-5 节点插入

-(d)二叉树实现--作业

-(e1)先序遍历

--05E1-1 转化策略

--05E1-2 遍历规则

--05E1-3 递归实现

--05E1-4 迭代实现(1)

--05E1-5 实例

--05E1-6 新思路

--05E1-7 新构思

--05E1-8 迭代实现(2)

--05E1-9 实例

-(e1)先序遍历--作业

-(e2)中序遍历

--05E2-1 递归

--05E2-2 观察

--05E2-3 思路

--05E2-4 构思

--05E2-5 实现

--05E2-6 实例

--05E2-7 分摊分析

-第五章 二叉树--(e2)中序遍历

-(e4)层次遍历

--05E4-1 次序

--05E4-2 实现

--05E4-3 实例

-第五章 二叉树--(e4)层次遍历

-(e5)重构

--05E5-1 遍历序列

--05E5-2 (先序|后序)+中序

--05E5-3 (先序+后序)x真

-(e5)重构--作业

-本章测验--作业

第六章 图

-(a)概述

--06A-1 邻接+关联

--06A-2 无向+有向

--06A-3 路径+环路

-(a)概述--作业

-(b1)邻接矩阵

--06B1-1 接口

--06B1-2 邻接矩阵+关联矩阵

--06B1-3 实例

--06B1-4 顶点和边

--06B1-5 邻接矩阵

--06B1-6 顶点静态操作

--06B1-7 边操作

--06B1-8 顶点动态操作

--06B1-9 综合评价

-(b1)邻接矩阵--作业

-(c)广度优先搜索

--06C-1 化繁为简

--06C-2 策略

--06C-3 实现

--06C-4 可能情况

--06C-5 实例

--06C-6 多连通

--06C-7 复杂度

--06C-8 最短路径

-(c)广度优先搜索--作业

-(d)深度优先搜索

--06D-1 算法

--06D-2 框架

--06D-3 细节

--06D-4 无向图

--06D-5 有向图

--06D-6 多可达域

--06D-7 嵌套引理

-(d)深度优先搜索--作业

-第六章 图--本章测验

01d-7: 封底估算-2笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。