第九章. 查找 (chaer 9. searching) 查找运算是计算机边中最常用的操作之一。有人统计过,计算机大约有40%的运算是与查找相关的。.pptVIP

  • 9
  • 0
  • 约8.72千字
  • 约 43页
  • 2019-03-09 发布于福建
  • 举报

第九章. 查找 (chaer 9. searching) 查找运算是计算机边中最常用的操作之一。有人统计过,计算机大约有40%的运算是与查找相关的。.ppt

第九章. 查找 (chaer 9. searching) 查找运算是计算机边中最常用的操作之一。有人统计过,计算机大约有40%的运算是与查找相关的。

作 业 27. 试从空树开始,按以下顺序向2-3树中插入关键字建树:20,30,50,52,60,68,70。如果此后再删去50和68,画出每一步执行后的状态。 §9.3 散列表查找 前面所介绍的查找方法的查找效率各不相同,且相适应的查找表也不一样,但都有一个共性,即平均查找长度不会为 1。那么有没有办法使平均查找长度等于 1,即一次查找成功呢? 散列表(Hash table)的查找就是为了解决这个问题而提出的。 散列表是如此构造的:给定一个线性表空间,选取一 个自变量为关键字的映射函数,其函数值为关键字在线性表空间中的存储位置,关键字经该函数映射后即可存储到线性表空间中;查找时也用相同的方法即可找到该记录。 该线性表空间即称为散列表(也叫哈稀表),所选取的函数称为散列函数(Hash function),得到的函数值称为散列地址,得到散列地址的过程称为哈稀造表或散列。 理论上散列表查找成功的平均查找长度 ASL成功 = 1。 但实际上经常会遇见这样的情况:不同的两个关键字经过散列函数运算后所得到的散列地址相同,这种现象称为冲突(collision),而产生冲突的两个关键字对该散列函数而言称为同义词(synonym)。 我们应尽可能选取冲突少的散列函数,但不能完全避免冲突的产生,而有了冲突就需要找相应的解决办法。 * 第九章. 查找 (Chapter 9. Searching) 查找运算是计算机中最常用的操作之一。有人统计过,计算机大约有40%的运算是与查找相关的。 数据元素(或记录)的某个数据项,能用来标识一个数据元素。若能唯一的标识一个数据元素, 则称为主关键字(primary key),反之则为次关键字(secondary key)。 关键字(key) 查找表(search table) §9.1 静态表的查找 查找(searching) 根据某个给定的值,在查找表中找寻关键字等于给定值的数据元素(或记录)。若表中存在这样的数据元素,则称查找是成功的,查找结果即为查找到的数据元素;反之则称查找是不成功的,此时查找结果为空。 由同一类型的数据元素(或记录)构成的集合。表中的元素基本上是固定的,这类查找表称为静态查找表(static search table);若在查找过程中将不存在的元素插入查找表中,则称这类查找表为动态查找表(dynamic search table)。 实际查找时,通常将给定值放在第 0 个记录处,然后从后向前查找,直到找到所查记录为止,找不到则返回结果 0。因为记录 0 像哨兵一样看守着查找表下界,所以不会越界。 typedef struct { keytype key; . . . . . . } elemtype; 一、无序表的查找: 查找表中的各元素(或记录)的关键字的值是无序的。 typedef struct { elemtype * elem; int length; } sstable; int seqsearch ( sstable R, keytype K ) { R.elem[0].key := K; for ( i = R.length ; R.elem[i].key != K ; i -- ) ; return i; } 查找表的长度为 n: 查找性能分析: 平均查找长度(average search length) 为了确定记录在查找表中的位置,需与给定值比较的关键字的个数的期望值称为平均查找长度。 对含有 n 个记录的查找表,查找成功时的平均查找长度为: ASL = ∑PiCi ,其中Pi为查找第i个记录的概率,且∑Pi = 1。 n i=1 i=1 n 在等概率情况下,顺序查找无序表的平均查找长度为: ASL成功 = (n+1) / 2 和 ASL不成功 = n+1 。 二、有序表的查找: 查找表中的各元素(或记录)的关键字的值是有序的。 这类有序表的查找仍可以用顺序查找,但在找不到时不需比较到表尾,只需比较到比给定值大的记录就可终止。 在等概率情况下,顺序查找有序表的平均查找长度为: ASL成功 = (n+1) / 2 和

文档评论(0)

1亿VIP精品文档

相关文档