数据结构_文件及查找
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件的存取方式与文件的物理结构有
关。采用不同的组织形式就得到不同的存 储结构。基本的组织有顺序组织、索引组 织和Hash组织。
9.2 顺序文件
顺序文件是指记录按其在文件中的逻 辑顺序依次存入存储介质而建立的,即顺 序文件中物理记录的顺序和逻辑记录的顺 序是一致的。若顺序文件中的记录按关键 字有序,则称此顺序文件为有序顺序文件, 否则称为无序顺序文件。
– ⑵ 冲突的处理。如何采取合适的处理冲突方法来解 决冲突。
• ① Hash函数。若Hash函数选择得当,就可使Hash地址尽 可能均匀地分布在Hash地址空间上,从而减少冲突的发生; 否则,若Hash函数选择不当,就可能使Hash地址集中于某 些区域,从而加大冲突的发生。 • ② 处理冲突的方法。选择适当的Hash函数可以减少冲突, 但不能避免冲突,因此当冲突发生时,必须有较好的处理冲 突的方法。 • ③ Hash表的装填因子。
索引表只需对每个块保存一个索引项,分别给出每一
块的最大关键字及该块的首地址。
这种索引称为非稠密索引 非稠密索引分块文件
9.3 索引文件
多级索引文件 1.二叉树排序树多级索引
2.多分树索引
9.4 B-树与B+树
• B树是一种平衡的多路查找树,它在数据处理中有着 巨大的作用,已经成为数据处理中主要的文件组织形 式。它以占用存储空间少,查找效率高的优势在数据 库系统的索引技术中占据了重要的地位。 • 定义 :一棵m阶的B树,或者为空树,或为满足下列 特性的m叉树。 • (1)对树中子树的要求: – 每个结点至多有m棵子树。 – 若根结点不是叶子结点,则至少有两棵子树。 – 除根结点之外的所有非终端结点至少有m/2 棵子 树。
外存的访问次数,寻道次数和寻道时间。
9.3 索引文件
稠密索引文件
索引对基本文件中的每个记录都保持一个索引项。
索引项按记录关键字值大小排序
9.3 索引文件
非稠密索引文件 将基本文件分成若干块,每一块内的记录不必排序, 但在块与快之间有序,即前一块中的所有记录的关键
字都小于后一块中所有记录的关键字。
• B—树的删除
9.4 B-树与B+树
• B+树是应文件系统所需而产生的一种B树的变 形树。一棵m阶的B+树和m阶的B树的差异在于:
– (1)在B树中,每个结点含n个关键字,n+1棵子树; 在B+树中,每个结点含n个关键字,n棵子树。 – (2)在B树中,每个结点中关键字个数n的取值范围 m/2 1≤n≤m1(除根)结点外。
– 散列只是通过记录的关键码定位该记录,没 有完整地表达记录之间的逻辑关系,所以, 散列主要是面向查找的存储结构。
– 散列既是一种查找技术,也是一种存储技术。
9.5 杂凑(Hash)文件
• 散列技术适合于哪种类型的查找?
– 散列技术一般不适用于允许多个记录有同样 关键码的情况。 – 散列方法也不适用于范围查找,换言之,在 散列表中,我们不可能找到最大或最小关键 码的记录,也不可能找到在某一范围内的记 录。
9.2 顺序文件
顺序文件在存储介质中可以有两种 不同的实现结构:连续结构和链结构。 连续结构是指逻辑上相邻的记录其存 储位置是相邻的,链结构是指物理记录之 间的次序由指针链来表示。这两种结构对 应的顺序文件分别称为连续顺序文件和链
接顺序文件。
9.2 顺序文件
上图为一个具有4个逻辑块的连续结构 文件,其逻辑块号0、1、2、3依次存放在物 理块15、16、17、18中。
9.2 顺序文件
• 排序顺序文件 •一般顺序文件
9.2 顺序文件
连续结构的优点是:
(1)结构简单; (2)顺序访问速度快,对于等长记录的连 续文件可以进行顺序存取,也可以进行类 似折半查找的随机存取,但是对于不等长
记录的连续文件只能进行顺序存取; (3)因为数据集中存放在连续的盘块中,
访问时所需的寻道次数和寻道时间少。
9.4 B-树与B+树
• 例1 在一棵3阶B树上依次插入关键字65、 24、50和38
9.4 B-树与B+树
• 例2 有下列关键字序列{20,54,69,84, 71,30,78,25,93,41,7,76,51, 66,68,53,3,79,35,12,15, 65},建立5阶B树
9.4 B-树与B+树
适用情况? 事先知道关键码,关键码集合不是很大且连续性较好。
9.5 杂凑(Hash)文件
9.5 杂凑(Hash)文件
• 散wk.baidu.com技术的关键问题:
– ⑴ 散列函数的设计。如何设计一个简单、 均匀、存储利用率高的散列函数。
• ① 所选函数尽可能简单,以便提高转换速度。 • ② 所选函数对关键字计算出的地址,应在Hash 地址集中大致均匀分布,以尽量减少冲突。
9.5 杂凑(Hash)文件
• 散列技术的关键问题:
第九章 文件及查找
提纲 9.1 文件概述 9.2 顺序文件 9.3 索引文件 9.4 B-树与B+树 9.5 杂凑(Hash)文件
9.1 文件概述
文件(File)是性质相同、逻辑上相关的 记录的集合。
按文件记录的类型不同可以将文件分为两类: 操作系统文件和数据库文件。操作系统文件是一维 的字符序列,无结构,无解释。数据库文件是带有 结构的记录集合。 数据库文件的每个记录由若干数据项构成。记 录是文件存取的基本单位,数据项是文件使用的最 小单位。数据项又称关键字项,关键字项的值称为 关键字(Key)。能惟一标识一个记录的关键字称为主 关键字,而其他的关键字称为次关键字。
9.4 B-树与B+树
• • • • B+树操作 (1)查找 (2)插入 (3)删除
9.5 杂凑(Hash)文件
• 查找操作要完成什么任务?
待查值k 确定k在存储结构中的位置
• 我们学过哪些查找技术?这些查找技术的 共性?
– 顺序查找、二叉排序树查找等。 – 以上讨论的查找方法,由于记录的存储位置与 关键字之间不存在确定的关系,因此查找时需 要进行一系列对关键字的查找比较,即“查找 算法”是建立在比较的基础上的,查找效率由 比较一次缩小的查找范围决定。
9.5 杂凑(Hash)文件
散列函数——直接定址法
散列函数是关键码的线性函数,即:
H(key) = a key + b (a,b为常数)
例:关键码集合为{10, 30, 50, 70, 80, 90},选取的散 列函数为H(key)=key/10,则散列表为:
0 1 10 2 3 30 4 5 50 6 7 8 9 70 80 90
9.4 B-树与B+树
• (2)对树中关键字个数的要求:
– 所有的非终端结点中包含以下信息(n,A0,K1,A1, K2,…,Kn,An)。 – 其中,n为关键字个数,m/2 1≤n≤m1;Ki(i=1,2,…,n) 为关键字,且Ki<Ki+1;Ai为指向子树根结点的指针 (i=0,1,…,n),且指针Ai-1所指子树中所有结点的关键字 值均小于Ki(i=1,2,…,n),An所指子树中所有结点的关键字 值均大于Kn。 • (3)对叶子结点的要求: – 所有的叶子结点都出现在同一层次上,并且不带信息(可以 看做是外部结点或查找失败的结点,实际上这些结点不存在, 指向这些结点的指针为空)。
存取第i个记录,必须搜索在它之前的i-1个记录。
9.2 顺序文件
链结构主要优点是:
(1)提高了磁盘空间利用率,解决了磁盘碎片问题; (2)便于文件的插入和删除操作; (3)便于文件的动态增长。 从本质上讲,顺序文件就是线性表,因而对顺序 文件的各种操作与线性表类似,但是,外存的访问速
度比主存要慢的多,在考虑算法时要立足于尽量减少
9.5 杂凑(Hash)文件
• 能否不用比较,通过关键码直接确定存 储位置?
– 理想的情况是,依据关键字直接得到其对应 的记录位置,即要求关键字与记录位置间存 在一一对应关系,通过这个关系,能很快地 由关键字得到对应的记录位置。
9.5 杂凑(Hash)文件
• 散列技术仅仅是一种查找技术吗?
• 散列是一种完整的存储结构吗?
9.1 文件概述
文件上的操作主要有两类:检索和维护。
文件检索就是在文件中查找满足条件的记录, 可以按记录的逻辑号查找,也可以按关键字查 找。 文件维护主要是指对文件进行记录的插入、
删除及修改等更新操作。
9.1 文件概述
文件的存储结构是指文件在物理存储介质 (磁盘、光盘、U盘)上的组织形式,它决定了 文件信息在存储设备上的存储位置。
• 在B+树中,每个结点中关键字个数n的取值范围m/2≤n≤m (除根结点外),1≤n≤m(根结点)。
– (3)B+树中所有叶子结点包含了全部关键字及指向 对应记录的指针,且所有叶子结点按关键字由小到大 顺序依次链接。 – (4)B+树中所有非叶子结点仅起索引作用,结点中 仅含有其子树中的最大(或最小)关键字。
找新的较大的空闲空间,并将原有数据移动到新空间
中,然后才能插入新的数据,因此,连续结构不易动 态增长,而且外存容易存在碎片。
9.2 顺序文件
上图为一个4个逻辑块的链结构文件的物理存储。
使用链结构时,只要指明该文件的第一个块号就可以
按链指针检索整个文件。链结构的另一个特点是文件 长度可以动态地增长,只要调整链指针就可插入或删 除一个信息块。 链结构文件适用于顺序存取,不便于进行直接存取,
9.2 顺序文件
连续结构存储的缺点:
(1)由于插入和删除记录会引起其它记录的移动,
在外存中执行此操作会引起磁头的频繁来回移动,因
此连续结构只能在文件的末尾插入记录,删除记录时,
只作标记进行逻辑删除,只有用户指定物理删除时才
真正删除相应记录,进行记录的移动;
9.2 顺序文件
(2)顺序文件需要连续的盘块存放数据,因此, 在插入记录时如果原来分配的盘块已没有空闲空间, 而与其邻接的盘块也不空闲时,需要重新在外存中查
9.4 B-树与B+树
• 例 一棵5阶的B树
9.4 B-树与B+树
• 例 一棵7阶的B树 • 在一棵7阶的B树中,树根结点的关键字 个数最少为1,最多为m1=6,子树个数 最少为2,最多为m=7; • 每个非树根结点的关键字个数最少为 「m/2 -1=「7/21=3,最多为m1=6, 子树个数最少为「m/2=「7/2=4,最多 为m=7。
9.4 B-树与B+树
• B+树定义
一个m阶B+树满足下列条件: (1)每个分支节点至多m棵子树 (2)出根结点外,其它每个分支结点至少有ceiling(m/2)棵 子树 (3)跟结点至少有两颗子树 (4) 有n棵子树的结点有n个关键字 (5)叶子结点中存放了数据文件的中记录的关键字及指向该 记录的指针,或存放数据文件分块后没块的最大关键字 及指向该块的指针,也结点关键字值按大小顺序链接。 (6)所有分支结点可以看成是索引的索引,结点中仅包含它 的各个子结点中最大(或最小)关键字及指向子结点的 指针
文件的操作是定义在逻辑结构上的,但操作的具体
实现要在存储结构上进行
9.1 文件概述
文件的逻辑结构是指文件的外部组织形式,是 用户对数据的表示和存取方式。
文件中各记录之间存在着逻辑关系,当一个 文件的各记录按照某种次序排列起来时,各记录 之间自然地形成了一种线性关系。文件中的各个 记录最多只有一个前驱记录和一个后继记录,而 文件的第一个记录只有后继记录没有前驱记录, 文件的最后一个记录只有前驱记录没有后继记录。 所以可以把文件看成是线性结构。
200801004
200801005
王新刚
张惠
男
女
18
19
9.1 文件概述
文件又可分为定长文件和不定长文件。
若文件中记录含有的信息长度相同,则称这类
记录为定长记录,由这种定长记录组成的文件称为
定长文件;若文件中记录含有的信息长度不等,则
称为不定长文件。
和其它数据结构一样,文件结构也包括逻辑结 构、存储结构以及文件上的各种操作这3个方面。
9.1 文件概述
• 文件的存储介质
– 磁带 – 磁盘 – 光盘 – 移动电子盘
9.1 文件概述
下面是一个简单的学生文件,每个学生的 情况是一个记录。每个记录由学号、姓名、性 别和年龄4个数据项组成。其中“学号”是主 关键字,“姓名”、“性别”等是次关键字。
学号 200801001 200801002 200801003 姓名 张小平 李立新 王鹏飞 性别 男 女 男 年龄 18 20 19