正在加载图片...
452空间开销分析 空间开销分析 结构性开销 存储密度a(≤1)表示数据结构存储的效率 a(存储密度) 数据本身存储量 辅助空间 整个结构占用的存储总量 保存数据结构的逻辑特性 显然a=1-y 方便运算 紧凑结构vs非紧凑结构 y(结构性开销) 辅助结构存储量 叉链表的存储是非紧凑结构 整个结构占用的存储总 张写 空间开销分析 空间开销分析入 根据满二叉树定理:一半的指针是空的 去掉满二叉树叶结点中的指针 ■每个结点存两个指针、一个数据域 (2p)n/2p ■总空间(2p+an 则结构性开销为12(假设p=d) 结构性开销:2pn 如果只在叶结点存数据,dn2 如果p=d,则 在分支结点存储指针,2pn/2=pn 2p(2p+a=2/3 注意:区分叶结点和分支结点又需要额外的算法时间 叔有。轨印当究 张鲁写 前有,聊脂究 回 空间开销分析 453用数组实现完全二叉树 d+可以用两种方法来实现不同的分支结点与叶结点 用 union联合类型定义 顺序方法存储二叉树 使用C+十的子类来分别实现分支结点与叶结点,并采用虚 把所有结点按照一定的次序顺方存储到一片连续的存储单 函数 isLe来区别分支结点与叶结点 早期节省内存资源 使结点在序列中的相互位量反映出二叉树结构的部分信息 利用结点指针的一个空阳位(一个bit)来存蜻点所属的类型 利用指向叶结点的指或者叶结点中的指针域来存储该叶结点的值 ■在存储结构上是线性的,但在逻辑结构上它仍然是 目前,计算机内存资源并不紧张的时候,一般不提倡这种单 纯追求效率,而丧失可读性的做法 二叉树型结构 真大_血单 大息 1010 北京大学信息学院 张铭 编写 ©版权所有,转载或翻印必究 Page 55 4.5.2 空间开销分析 „ 结构性开销γ „ 辅助空间 „ 保存数据结构的逻辑特性 „ 方便运算 γ = 辅助结构存储量 (结构性开销) 整个结构占用的存储总量 北京大学信息学院 张铭 编写 ©版权所有,转载或翻印必究 Page 56 空间开销分析 „ 存储密度α (≤1)表示数据结构存储的效率 „ 显然α = 1 - γ „ 紧凑结构 vs 非紧凑结构 „ 二叉链表的存储是非紧凑结构 α = 数据本身存储量 (存储密度) 整个结构占用的存储总量 北京大学信息学院 张铭 编写 ©版权所有,转载或翻印必究 Page 57 空间开销分析 根据满二叉树定理:一半的指针是空的 „ 每个结点存两个指针、一个数据域 „ 总空间 (2p + d)n „ 结构性开销:2pn „ 如果 p = d, 则 2p/(2p + d) = 2/3 G H E A B C D F I 北京大学信息学院 张铭 编写 ©版权所有,转载或翻印必究 Page 58 空间开销分析 „ 去掉满二叉树叶结点中的指针 (2p) n/2 p (2p) n/2+ dn p + d 则结构性开销为 1/2 (假设p = d) „ 如果只在叶结点存数据, d n/2 在分支结点存储指针,2p n/2 = p n 则结构性开销为 „ pn / (pn + dn / 2) ⇒ 2/3 (假设p = d) „ 注意:区分叶结点和分支结点又需要额外的算法时间 = A B C D E F G H I 北京大学信息学院 张铭 编写 ©版权所有,转载或翻印必究 Page 59 空间开销分析 „ C+可以用两种方法来实现不同的分支结点与叶结点: „ 用union联合类型定义 „ 使用C++的子类来分别实现分支结点与叶结点,并采用虚 函数isLeaf来区别分支结点与叶结点 „ 早期节省内存资源 „ 利用结点指针的一个空闲位(一个bit)来存储结点所属的类型 „ 利用指向叶结点的指针或者叶结点中的指针域来存储该叶结点的值 „ 目前,计算机内存资源并不紧张的时候,一般不提倡这种单 纯追求效率,而丧失可读性的做法 北京大学信息学院 张铭 编写 ©版权所有,转载或翻印必究 Page 60 4.5.3 用数组实现完全二叉树 „ 顺序方法存储二叉树 „ 把所有结点按照一定的次序顺序存储到一片连续的存储单 元 „ 使结点在序列中的相互位置反映出二叉树结构的部分信息 „ 在存储结构上是线性的,但在逻辑结构上它仍然是 二叉树型结构
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有