当前课程知识点:数据结构(上) > 第一章 绪论(上) > (c)大O记号 > 01c-4 : 有效解
接下来的一个刻度 是一个大家族
我们统称之为多项式复杂度
我们可以看到多项式复杂度
从一般的意义上讲
确实呈现出多项式的一个形式
正如我们此前讲过的
所有的低次项 其实都是可以忽略的
即便是最高次项
它的常系数也是可以去掉的
所以我们说这类的复杂度
可以很简明的界定为 其中最高次
也就是这个多项式本身的次数
这样的一个复杂度
它的具体形式很多
比如说我们看 这是一次方的
这个地方呢 我们也可以做这种
以后要习惯于这种一眼看过去的计算
比如说 在这里我们可以很快地把这个抹掉
在这里 可以把这个和这个都抹掉
所以很快地 我们可以得到这两项
而这两项的常系数 其实我们都可以抹掉
或者说等效地 把它们当成1
所以很快地 可以得到结果
是n的3次方
这个地方也一样
我们很快把这些低次项抹掉
把常系数抹掉
很快地 做一个指数之间的减法
2减1次方 所以很快地也能得到是1次方
笼统来说 它们都属于多项式形式的复杂度
在其中 有必要提一下的
就是所谓的线性复杂度
也就是说 对于一个规模为n的问题
它所需要的时间成本
恰好就是由n一阶的 来度量的
在我们的很多相应的编程习题中
更多的问题 大部分的问题
都是介乎n的1次方到n的平方之间复杂度
更高的复杂度 其实会使得这个问题的难度一下增加
计算时间也会很快地提高
我们可以再来看 这样一个
稍微复杂一些的例子
同样用我们刚才的那些方法
可以看到 先从最里层来入手
经过比较以后 可以断定
低次项都是可以抹掉的
所以我们可以很快地得到
这个的结果应该是 2013除以3
应该就是671 这是它的次数
所以相对而言 后边的这个
无论是567 还是 更不用说是123
都是更低阶的 都可以直接忽略掉
所以相应的 我们这里头其实就等于是
可以估算为是 n的671次方
再经过1次开方 再除一个11以后
我们就可以得到是 n的61次方
以后 我们要习惯于这样的估算
这类算法的效率 通常我们认为是
已经可以令人满意的了
当然 我想第一次接触到这个结论的同学
往往持一个怀疑的态度
这样的一个标准是不是太低了呢?
因为我们说这里的多项式的阶次c
并没有更多的限定
只要它是个正数就可以
它可能是1 可能是2
也可能是20 甚至可能300 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)深度优先搜索--作业
-第六章 图--本章测验