文章分类 -  数据结构-查找

查找 (Search) 就是确定一个已给的数据是否出现在某个数据元素集合中。
摘要:“处理冲突”的含义是:为产生冲突的关键字寻找下一个哈希地址。通常有两类方法处理冲突:开放定址(Open Addressing)法和拉链(Chaining)法。前者是将所有结点均存放在散列表T[0..m-1]中;后者通常是将互为同义词的结点链成一个单链表,而将此链表的头指针放在散列表T[0..m-1]中。1 开放地址法这个方法的基本思想是:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。这个过程可用下式描述:H i ( key ) = ( H ( key )+ d i ) mod m ( i = 1,2,…… , k ( k ≤ m – 1))其中: H ( k 阅读全文
posted @ 2012-02-06 11:26 nba76ers 阅读(8675) 评论(0) 推荐(2) 编辑
摘要:散列函数的选择有两条标准:简单和均匀。 简单指散列函数的计算简单快速; 均匀指对于关键字集合中的任一关键字,散列函数能以等概率将其映射到表空间的任何一个位置上。也就是说,散列函数能将子集K随机均匀地分布在表的地址集{0,1,…,m-1}上,以使冲突最小化。 函数的运算应尽可能地简单;函数的值域必须在散列表的范围内;关键字值的集合由散列函数映射得到的地址集合均匀分布在散列表范围内,即尽可能使存取结点在散列表中均匀分布;尽可能减少冲突。选取散列函数,考虑以下因素: >>计算散列函数所需时间 >>关键字长度 >>散列表长度(散列地址范围) >>关键字分 阅读全文
posted @ 2012-02-05 20:42 nba76ers 阅读(679) 评论(0) 推荐(0) 编辑
摘要:散列表的概念 根据设定的的哈希函数H(key)和处理冲突的方法,将一组关键字映像到一个有限的连续的地址集(区间)上,并以关键字在地址集中的"像"作为记录在表中的存储位置,这种表便称为哈希表。1、散列表 设所有可能出现的关键字集合记为U(简称全集)。实际发生(即实际存储)的关键字集合记为K(|K|比|U|小得多)。 散列方法是使用函数h将U映射到表T[0..m-1]的下标上(m=O(|U|))。这样以U中关键字为自变量,以h为函数的运算结果就是相应结点的存储地址。从而达到在O(1)时间内就可完成查找。 其中: ① h:U(可能出现的全集)→{0,1,2,…,m-1} ,通常称 阅读全文
posted @ 2012-02-05 19:54 nba76ers 阅读(1111) 评论(1) 推荐(0) 编辑
摘要:查找的文件较大,且存放在磁盘等直接存取设备中时,为了减少查找过程中对磁盘的读写次数,提高查找效率,基于直接存取设备的读写操作以"页"为单位的特征。 1972年R.Bayer和E.M.McCreight提出了一种称之为B-树的多路平衡查找树。它适合在磁盘等直接存取设备上组织动态的查找表。B-树的定义1、B-树的定义 一棵m(m≥3)阶的B-树是满足如下性质的m叉树:(1)每个结点至少包含下列数据域: (j,P0,Kl,P1,K2,…,Ki,Pi) 其中: j为关键字总数 Ki(1≤i≤j)是关键字,关键字序列递增有序:K1<K2<…<Ki。 Pi(0≤i≤j 阅读全文
posted @ 2012-02-05 13:46 nba76ers 阅读(524) 评论(1) 推荐(0) 编辑
摘要:1、二叉排序树的定义 二叉排序树(Binary Sort Tree)又称二叉查找(搜索)树(Binary Search Tree)。其定义为:二叉排序树或者是空树,或者是满足如下性质的二叉树:①若它的左子树非空,则左子树上所有结点的值均小于根结点的值;②若它的右子树非空,则右子树上所有结点的值均大于根结点的值;③左、右子树本身又各是一棵二叉排序树。 上述性质简称二叉排序树性质(BST性质),故二叉排序树实际上是满足BST性质的二叉树2、二叉排序树的存储结构typedef int KeyType; //假定关键字类型为整数typedef struct node { //结点类型 KeyTyp.. 阅读全文
posted @ 2012-02-04 21:55 nba76ers 阅读(2955) 评论(0) 推荐(0) 编辑
摘要:分块查找(Blocking Search)又称索引顺序查找。它是一种性能介于顺序查找和二分查找之间的查找方法。1、 二分查找表存储结构 二分查找表由"分块有序"的线性表和索引表组成。(1)"分块有序"的线性表 表R[1..n]均分为b块,前b-1块中结点个数为,第b块的结点数小于等于s;每一块中的关键字不一定有序,但前一块中的最大关键字必须小于后一块中的最小关键字,即表是"分块有序"的。(2)索引表 抽取各块中的最大关键字及其起始位置构成一个索引表ID[l..b],即:ID[i](1≤i≤b)中存放第i块的最大关键字及该块在表R中的起 阅读全文
posted @ 2012-01-15 14:14 nba76ers 阅读(774) 评论(0) 推荐(0) 编辑
摘要:1、二分查找(Binary Search) 二分查找又称折半查找,它是一种效率较高的查找方法。 二分查找要求:线性表是有序表,即表中结点按关键字有序,并且要用向量作为表的存储结构。不妨设有序表是递增有序的。2、二分查找的基本思想 二分查找的基本思想是:(设R[low..high]是当前的查找区间)(1)首先确定该区间的中点位置:(2)然后将待查的K值与R[mid].key比较:若相等,则查找成功并返回此位置,否则须确定新的查找区间,继续二分查找,具体方法如下: ①若R[mid].key>K,则由表的有序性可知R[mid..n].keys均大于K,因此若表中存在关键字等于K的结点,则该结. 阅读全文
posted @ 2012-01-15 13:17 nba76ers 阅读(907) 评论(0) 推荐(0) 编辑
摘要:1、顺序查找的基本思想 基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。2、顺序查找的存储结构要求 顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构(使用单链表作存储结构时,扫描必须从第一个结点开始)。3、基于顺序结构的顺序查找算法(1)类型说明 typedef struct{ KeyType key; InfoType otherinfo; //此类型依赖于应用 }NodeType; typedef NodeType SeqLis.. 阅读全文
posted @ 2012-01-13 21:43 nba76ers 阅读(1676) 评论(0) 推荐(0) 编辑
摘要:定义: 查找表:是由同一类型的数据元素(或记录)构成的集合,由于“集合”中的数据元素之间存在着松散的关系,因此查找表是一种应用灵便的数据结构。对查找表的操作:查询某个“特定的”数据元素是否在查找表中;检索某个“特定的”数据元素的各种属性;在查找表中插入一个数据元素;从查找表中删去某个数据元素。按照记录在表中的位置和它的关键字之间的关系可以分为:静态查找表,动态查找表和Hash表。 其中静态查找表和动态查找表都是:记录在表中的位置和它的关键字之间不存在一个确定的关系。 Hash表:记录在表中的位置和它的关键字之间存在一个确定的关系。静态查找表: 仅作查询和检索操作的查找表。动态查找表... 阅读全文
posted @ 2012-01-13 20:20 nba76ers 阅读(516) 评论(0) 推荐(0) 编辑