1、1Ch9 查找一、单项选择题1顺序查找法适合于存储结构为 B 的线性表。A散列存储 B顺序存储或链接存储 C压缩存储 D索引存储2对线性表进行二分查找时,要求线性表必须 C。A以顺序方式存储 B以链接方式存储C以顺序方式存储,且结点按关键字有序排序 D以链接方式存储,且结点按关键字有序排序3采用顺序查找方法查找长度为 n 的线性表时,每个元素的平均查找长度为 C。An Bn/2 C(n+1)/2 D(n-1)/24 采用二分查找方法查找长度为 n 的线性表时,每个元素的平均查找长度为 D。AO(n 2) B O(nlog2n) CO(n) DO(log 2n)5二分查找和二叉排序树的时间性能
2、B。A相同 B不相同就平均时间性能而言,二叉排序树上的查找和二分查找差不多。就维护表的有序性而言,二叉排序树无须移动结点,只需修改指针即可完成插入和删除操作,且其平均的执行时间均为O(log2n),因此更有效。二分查找所涉及的有序表是一个向量,若有插入和删除结点的操作,则维护表的有序性所花的代价是 O(n)。当有序表是静态查找表时,宜用向量作为其存储结构,而采用二分查找实现其查找操作;若有序表里动态查找表,则应选择二叉排序树作为其存储结构。6有一个有序表为1,3 ,9,12,32,41,45,62,75,77,82,95,100 ,当二分查找值 82 为的结点时,C 次比较后查找成功。A1 B
3、2 C4 D87有一个长度为 12 的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为 B。A35/12 B37/12 C39/12 D43/128根据一组记录 ( 56, 42, 50, 64, 48 ) 依次插入结点生成一棵 AVL 树(高度平衡的二叉搜索树)时,当插入到值为 50 的结点时需要进行旋转调整。 29向一棵二叉搜索树中插入一个新元素时,若该新元素的值大于根结点的值,则应把它插入到根结点 右子树上。 10根据一组记录 ( 56, 42, 73, 50, 64, 48, 22 ) 依次插入结点生成一棵 AVL 树(高度平衡的二叉搜索树)时,
4、当插入到值为 48 的结点时才出现不平衡,需要进行旋转调整。 11以顺序搜索方法从长度为 n 的顺序表或单链表中搜索一个元素时,其时间复杂度为 O(n) 。 12在一棵 AVL 树(高度平衡的二叉搜索树)中,每个结点的左子树高度与右子树高度之差的绝对值不超过 1 。 13在线性表的散列存储中,装载因子 a 又称为装载系数,若用 m 表示散列表的长度,n表示待散列存储的元素的个数,则 a 等于 n/m 。 14以折半搜索方法从长度为 n 的有序表中搜索一个元素时,时间复杂度为 O(log2n)。 15假定一个顺序表的长度为 40,并假定搜索每个元素的概率都相同,则在搜索成功情况下的平均搜索长度为
5、 20.5 。 16假定要对长度 n = 100 的线性表进行散列存储,并采用开散列法处理冲突,则对于长度m = 20 的散列表,每个散列地址的同义词子表(单链表)的长度平均为 5 。 17假定对长度 n = 50 的有序表进行折半搜索,则对应的判定树中最后一层的结点数为 19 个。 31 2 4 8 16 1918根据 n 个元素建立一棵二叉搜索树(二叉排序树)的时间复杂度性大致为 O(nlog2n) 。 19从一棵二叉搜索树中搜索一个元素时,若给定值小于根结点的值,则需要向 左子树 继续搜索。 20假定一个线性表为 (”abcd”, ”baabd”, ”bcef”, ”cfg”, ”ahi
6、j”, ”bkwte”, ”ccdt”, ”aayb”),若按照字符串的第一个字母进行划分,使得第一个字母相同的字符串被划分在一个子表中,则得到的以 a 为第一个字母的子表长度 3 。 21假设在有序线性表 A1 20上进行二分查找,则比较一次查找成功的结点数为 1,则比较二次查找成功的结点数为 2,则比较三次查找成功的结点数为 4,则比较四次查找成功的结点数为 8,则比较五次查找成功的结点数为 5,平均查找长度为 37。22对于长度为 n 的线性表,若进行顺序查找,则时间复杂度为 O(n);若采用二分法查找,则时间复杂度为 O(log2n) 。 23、 对长度为 3 的顺序表进行搜索,若搜索
7、第一个元素的概率为 1/2,搜索第二个元素的概率为 1/3,搜索第三个元素的概率为 1/6,则搜索到表中任一元素的平均搜索长度为 A 。 A5/3 B2 C7/3 D4/3 1/2*3+1/3*2+1/6*1=9/6+4/6+1/6=7/31/2*1+1/3*2+1/6*3=3/6+4/6+3/6=5/324、 向一棵 AVL 树(高度平衡的二叉搜索树)插入元素时,可能引起对最小不平衡子树的双向旋转的调整过程,此时需要修改相关 C 个结点指针域的值。 A2 B3 C4 D5 25、 向一棵 AVL 树(高度平衡的二叉搜索树)插入元素时,可能引起对最小不平衡子树的调整过程,此调整分为 C 种旋转
8、类型。 A2 B3 C4 D5 26、 向一棵 AVL 树(高度平衡的二叉搜索树)插入元素时,可能引起对最小不平衡子树的左单或右单旋转的调整过程,此时需要修改相关 C 个结点指针域的值。 A2 B3 C4 D5 三、判断题:1()对二叉搜索树进行前序遍历得到的结点序列是一个有序序列。2()折半搜索所对应的判定树,既是一棵二叉搜索树,又是一棵理想平衡二叉树(它的特点是除最底层结点外其他各层结点数都是满的,最底层的若干结点可能散布在该层各处) 。3( )装载因子是散列表的一个重要参数,它反映了散列表的装满程度。4( )对于两棵具有相同记录集合而具有不同结构的二叉搜索树,按中序遍历得到的结点序列是相
9、同的。三、综合练习题:1画出对长度为 10 的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找4长度。等概率时查找成功的平均查找长度=(1*1+2*2+4*3+3*4)/10=292已知一组关键字49, 38,65,97,76,13,27,44,82,35,50 ,画出由此生成的二叉排序树和平衡二叉树。二叉排序树:平衡二叉树:53设某字典组成如下D=016, 087, 154, 170, 275, 426, 503, 509, 512, 612, 653, 677, 703, 765, 897, 908依次顺序表示在内存中,现用二分法的方法查找字典中是否有元素 612,问需要进行多
10、少次比较才能得到结论? 每次选择的比较对象是什么元素?解:比较次数为 3 次,第一次和 509 比较,第二次和 677 比较,第三次和 612 比较。64试给出一个关键码序列,使构造 AVL 树时四种调整平衡操作( LL, LR, RR, RL )各至少执行一次,并画出其构造过程。:解:设输入序列为12,6,4,16,24,15,13,1,35设顺序表中关键字是递增有序的,试写一顺序查找算法,将哨兵设在表的高下标端。解:Search_Seq(SSTable ST, KeyType key)7/顺序查找的算法,n 号元素为监视哨STelemnkey=key; /哨兵for (i=0; !EQ(S
11、Telemikey,key);+i);return i;6什么叫静态查找?什么叫动态查找?什么样的存储结构适宜于进行静态查找?什么样的存储结构适宜于进行动态查找?7什么叫平均查找长度?写出平均查找长度的定义。8已知一个个数为 12 的数据元素序列为Dec, Feb, Nov, Oct, June, Sept, Aug, Apr, May, July, Jan, Mar,要求:(1)按各数据元素的顺序构造一棵二叉排序树。 (2)设各数据元素的查找概率相等,给出该二叉排序树的平均查找长度。 (注:字母的大小是指字母的 ASCII 码数值大小) (3)按各数据元素的顺序构造一棵平衡二叉树。解:(1)
12、构造的二叉排序树:(2)平均查找长度为:(1*1+2*2+2*3+2*4+3*5+2*6)/12=46/12=23/6(3)构造的平衡二叉树:89使用散列函数 hash (x) = x %11, 把一个整数值转换成散列表地址。现要把数据 1, 13, 12, 34, 38, 33, 27, 22 插入到散列表中。(1) 使用线性探查再散列法来构造散列表。(2) 使用链地址法构造散列表。针对这两种情况, 确定其装载因子, 搜索成功所需的平均探查次数, 以及搜索不成功所需的平均探查次数。解:(1)Hash(1)=1;成功hash(13)=2;成功hash(12)=1;冲突;hash(12)=2;冲
13、突;hash(12)=3;成功;hash(34)=1;hash(34)=2 ;冲突;hash(34)=3 ;冲突;hash(34)=3 ;冲突;hash(34)=4;成功hash(38)=5;成功hash(33)=0;成功hash(27)=5;冲突; hash(27)=6;成功hash(22)=0;冲突;hash(22)=1;冲突;hash(22)=2;冲突;hash(22)=3 ;冲突;hash(22)=4;冲突;hash(22)=5;冲突;hash(22)=6;冲突;hash(22)=7;成功9线性探查再散列法来构造的散列表0 1 2 3 4 5 6 7 8 9 1033 1 13 12 34 38 27 22搜索次数 1 1 1 3 4 1 2 8装载因子=8/11搜索成功所需的平均探查次数=(1+1+1+3+4+1+2+8)/8=21/8搜索不成功所需的平均探查次数=(9+8+7+6+5+4+3+2+1+1+1)/11=47/11(2) 使用链地址法构造的散列表装载因子=8/11搜索成功所需的平均探查次数=(1+1+1+1+2+2+2+3)/8=13/8搜索不成功所需的平均探查次数=(3+4+2+1+1+3+1+1+1+1+1)/11=19/11