当前课程知识点:数据结构(上) > 第三章 列表 > (b)无序列表 > 03B-1 循秩访问
接下来的这节,我们讨论无序列表的
相关算法
我们首先关心的一个问题是
既然列表和向量同属于线性的序列结构
那么是否可以继续沿用向量那种
十分便捷也是我们十分习惯的
循序(也即:秩)访问的方式呢?
具体说来,对于任何一个名字叫L的列表
每当我们指定其中一个合法的秩r
都可以以这样的一个形式来直接引用
并且访问到对应的这个节点
我们说答案是可以的
因为我们可以仿照向量的做法
对下标操作符进行适当的重载
具体的方法如下
对于当前的这个列表
我们可以重载它所对应的那个括号
操作符
接下来呢,如果指定的秩是r的话
我们就从first node,也就是首节点出发
不断地沿着succ引用向后行进
那么总共的步长是多少呢?
如果指定的秩是r
那么就是恰好r
换而言之
当这个while循环结束的时候
p就正好处于
总体秩为r的那个节点的位置
因此我们只需将这个位置处的数据返回
由此也可以看出
整个这个算法的复杂度是取决于
你所指定的那个秩r的
具体来说,也就是O(r)
那么这个效率,我们说是十分低下的
实际上,这种用法虽然很方便
但是我们只能偶尔为之
而不能常用
我们可以来对它的平均性能
做一个估算
假设这个列表的长度为n
那么正如我们刚才所说的
对于任何的r所需要的时间都是O(r)
那么换而言之
对于第一个元素,我们需要一个单位的时间
对于第二个元素,需要两个单位的时间
第三个元素,需要三个单位的时间
直到最后那个元素需要n的时间
整体上呢,恰好呈现出一个算术级数的形式
我们讲过,它的总和是n平方
而在这个时候总共有n种可能
每个元素在一般的假设下
都有均等的n分之一的概率
被作为那个指定的秩
所以总体而言的平均就是再要
乘以这个n分之一或者等效的是,除以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)深度优先搜索--作业
-第六章 图--本章测验