线性探测再散列查找成功和不成功的相关问题
数据结构第九、十章作业答案
数据结构第九、⼗章作业答案第九章查找⼀、填空题1. 在数据的存放⽆规律⽽⾔的线性表中进⾏检索的最佳⽅法是顺序查找(线性查找)。
2. 线性有序表(a 1,a 2,a 3,…,a 256)是从⼩到⼤排列的,对⼀个给定的值k ,⽤⼆分法检索表中与k 相等的元素,在查找不成功的情况下,最多需要检索 8 次。
设有100个结点,⽤⼆分法查找时,最⼤⽐较次数是 7 。
3. 假设在有序线性表a[1..20]上进⾏折半查找,则⽐较⼀次查找成功的结点数为1;⽐较两次查找成功的结点数为 2 ;⽐较四次查找成功的结点数为 8 ,其下标从⼩到⼤依次是1,3,6,8,11,13,16,19______,平均查找长度为 3.7 。
解:显然,平均查找长度=O (log 2n )<5次(25)。
但具体是多少次,则不应当按照公式)1(log 12++=n n n ASL 来计算(即(21×log 221)/20=4.6次并不正确!)。
因为这是在假设n =2m -1的情况下推导出来的公式。
应当⽤穷举法罗列:全部元素的查找次数为=(1+2×2+4×3+8×4+5×5)=74; ASL =74/20=3.74.折半查找有序表(4,6,12,20,28,38,50,70,88,100),若查找表中元素20,它将依次与表中元素 28,6,12,20 ⽐较⼤⼩。
5. 在各种查找⽅法中,平均查找长度与结点个数n ⽆关的查找⽅法是散列查找。
6. 散列法存储的基本思想是由关键字的值决定数据的存储地址。
7. 有⼀个表长为m 的散列表,初始状态为空,现将n (n8、设⼀哈希表表长M 为100 ,⽤除留余数法构造哈希函数,即H (K )=K MOD P (P<=M ), 为使函数具有较好性能,P 应选( 97 )9、在各种查找⽅法中,平均查找长度与结点个数⽆关的是哈希查找法10、对线性表进⾏⼆分查找时,要求线性表必须以顺序⽅式存储,且结点按关键字有序排列。
计算机学科专业基础综合数据结构-7
计算机学科专业基础综合数据结构-7(总分:100.00,做题时间:90分钟)一、单项选择题(总题数:28,分数:74.00)1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为______。
(分数:2.00)A.(n-1)/2B.n/2C.(n+1)/2 √D..n解析:[解析] 此结论需要考生当作定理一样的牢记。
顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为______,二分法查找只适用于查找顺序存储的有序表,平均比较次数为______。
在此假定N为线性表中结点数,且每次查找都是成功的。
(分数:4.00)A.N+1B.2log2NC.log2ND.N/2 √E.Nlog2NF..N2解析:A.N+1B.2log2NC.log2N √D.N/2E.Nlog2NF..N2解析:2.下面关于二分查找的叙述正确的是______。
(分数:2.00)A.表必须有序,表可以顺序方式存储,也可以链表方式存储B.表必须有序且表中数据必须是整型、实型或字符型C.表必须有序,而且只能从小到大排列D.表必须有序,且表只能以顺序方式存储√解析:二叉查找树的查找效率与二叉树的______有天,在______时查找效率最低。
(分数:4.00)A.高度B.结点的多少C.树形√D.结点的位置解析:A.结点太多B.完全二叉树C.呈单枝树√D.结点太复杂解析:3.当采用分块查找时,数据的组织方式为______。
(分数:2.00)A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块√C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D.数据分成若干块,每块(除最后一块外)中数据个数需相同解析:[解析] 本题主要考查分块查找的相关概念。
4.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法?______ (分数:2.00)A.分块√B.顺序C.二分法D.哈希解析:[解析] 由于题目只说明是线性表,因此排除二分法。
哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度⼀、哈希表1、概念哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)⽽直接进⾏访问的数据结构。
它通过把关键码值映射到哈希表中的⼀个位置来访问记录,以加快查找的速度。
这个映射函数就做散列函数,存放记录的数组叫做散列表。
2、散列存储的基本思路以数据中每个元素的关键字K为⾃变量,通过散列函数H(k)计算出函数值,以该函数值作为⼀块连续存储空间的的单元地址,将该元素存储到函数值对应的单元中。
3、哈希表查找的时间复杂度哈希表存储的是键值对,其查找的时间复杂度与元素数量多少⽆关,哈希表在查找元素时是通过计算哈希码值来定位元素的位置从⽽直接访问元素的,因此,哈希表查找的时间复杂度为O(1)。
⼆、常⽤的哈希函数1. 直接寻址法取关键字或者关键字的某个线性函数值作为哈希地址,即H(Key)=Key或者H(Key)=a*Key+b(a,b为整数),这种散列函数也叫做⾃⾝函数.如果H(Key)的哈希地址上已经有值了,那么就往下⼀个位置找,知道找到H(Key)的位置没有值了就把元素放进去.2. 数字分析法分析⼀组数据,⽐如⼀组员⼯的出⽣年⽉,这时我们发现出⽣年⽉的前⼏位数字⼀般都相同,因此,出现冲突的概率就会很⼤,但是我们发现年⽉⽇的后⼏位表⽰⽉份和具体⽇期的数字差别很⼤,如果利⽤后⾯的⼏位数字来构造散列地址,则冲突的⼏率则会明显降低.因此数字分析法就是找出数字的规律,尽可能利⽤这些数据来构造冲突⼏率较低的散列地址.3. 平⽅取中法取关键字平⽅后的中间⼏位作为散列地址.⼀个数的平⽅值的中间⼏位和数的每⼀位都有关。
因此,有平⽅取中法得到的哈希地址同关键字的每⼀位都有关,是的哈希地址具有较好的分散性。
该⽅法适⽤于关键字中的每⼀位取值都不够分散或者较分散的位数⼩于哈希地址所需要的位数的情况。
4. 折叠法折叠法即将关键字分割成位数相同的⼏部分,最后⼀部分位数可以不同,然后取这⼏部分的叠加和(注意:叠加和时去除进位)作为散列地址.数位叠加可以有移位叠加和间界叠加两种⽅法.移位叠加是将分割后的每⼀部分的最低位对齐,然后相加;间界叠加是从⼀端向另⼀端沿分割界来回折叠,然后对齐相加.5. 随机数法选择⼀个随机数,去关键字的随机值作为散列地址,通常⽤于关键字长度不同的场合.6. 除留余数法取关键字被某个不⼤于散列表表长m的数p除后所得的余数为散列地址.即H(Key)=Key MOD p,p<=m.不仅可以对关键字直接取模,也可在折叠、平⽅取中等运算之后取模。
线性探测再散列查找成功和不成功的相关问题
线性探测再散列法查找成功和查找不成功的平均查找长度Question1:将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。
散列表的存储空间是一个下标从0开始的一维数组,散列函数为:H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表。
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。
Ans:(1).首先明确一个概念装载因子,装载因子是指所有关键子填充哈希表后饱和的程度,它等于关键字总数/哈希表的长度。
根据题意,我们可以确定哈希表的长度为L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。
根据散列函数可以得到如下散列函数值表。
H(Key) = (keyx3) MOD 7, 例如key=7时,H(7) = (7x3)%7 = 21%7=0,其他关键字同理。
Key 7 8 30 11 18 9 14H(Key) 0 3 6 5 5 6 0(表1)采用线性探测再散列法处理冲突,所构造的散列表为:地址0 1 2 3 4 5 6 7 8 9关键字7 14 8 11 30 18 9(表2)下面对散列表的构造方式加以说明,注意表1中的关键字7和14,30和9,11和18,这三组关键子的H(Key)值相同,这在构建散列表时就会产生冲突,因为他们的地址相同,所以要通过一定的冲突处理方法来解决这个问题。
依题,采用线性探测再散列法处理冲突。
下面详细介绍如何构建散列表:第一个key 7,它的地址是0,因此放到散列表的数组下表为0的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第二个key 8,它的地址是3,因此放到散列表的数组下表为3的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第三个key 30,它的地址是6,因此放到散列表的数组下表为6的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第四个key 11,它的地址是5,因此放到散列表的数组下表为5的位置,这个位置上没有关键字,因此没有冲突可以直接填入;第五个key 18,它的地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6, 6这个位置上已经存在关键字30则继续增加步长1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;第六个key 9,它的地址是6,因此放到散列表的数组下表为6的位置,但这个位置上已经有关键字30,遇到了冲突,探测下一个位置7, 7这个位置上已经存在关键字18则继续增加步长1,因此现在的新地址应为8,位置8上没有关键字,放入即可;第七个key 14,它的地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1, 位置1上没有关键字,放入即可;到这一步所有关键字均已填入,散列表已经构造完成,如表2所示。
第八章习题
第八章习题8.1 若对大小均为n的有序的顺序表和无序的顺序表分别进行查找,试在下列三种情况下分别讨论两者在等概率时的平均查找长度是否相同?(1)查找不成功,即表中没有关键字等于给定值K的记录。
(2)查找成功且表中只有一个关键字等于给定值K的记录。
(3)查找成功且表中有若干个关键字等于给定值K的记录,一次查找要求找出所有记录。
8.2画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。
8.3试推导含12个结点的平衡二叉树的最大深度并画出一棵这样的树。
8.4试从空树开始,画出按以下次序向2-3树(即3阶B-树)中插入关键码的建树过程:20,30,50,52,60,68,70。
如果此后删除50和68,画出每一步执行后2-3树的状态。
8.5选取哈希函数H(k)=(3k)%11,用线性探测再散列法处理冲突。
试在0~10的散列地址空间中,对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求等概率情况下查找成功与不成功时的平均查找长度。
8.6试为下列关键字建立一个装载因子不小于0.75的哈希表,并计算你所构造的哈希表的平均查找长度。
(ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG,CHANG,CHAO,YANG,JIN)8.7试编写利用折半查找确定记录所在块的分块查找算法。
8.8试写一个判别给定二叉树是否为二叉排序树的算法。
设此二叉树以二叉链表作存储结构,且树中结点的关键字均不同。
8.9编写算法,求出指定结点在给定的二叉排序树中所在的层数。
8.10 编写算法,在给定的二叉排序树上找出任意两个不同结点的最近公共祖先(若在两结点A、B中,A是B的祖先,则认为A是A、B的最近公共祖先)。
8.11 编写一个函数,利用二分查找算法在一个有序表中插入一个元素x,并保持表的有序性。
8.12 已知长度为12的表:(Jan,Feb,Mar,Apr,May,June,July,Aug,Sep,Oct,Nov,Dec)。
《数据结构》习题集:第9章查找(第1次更新2019-5)
第9章查找一、选择题1.顺序查找一个共有n个元素的线性表,其时间复杂度为(),折半查找一个具有n个元素的有序表,其时间复杂度为()。
【*,★】A.O(n)B. O(log2n)C. O(n2)D. O(nlog2n)2.在对长度为n的顺序存储的有序表进行折半查找,对应的折半查找判定树的高度为()。
【*,★】A.nB.C.D.3.采用顺序查找方式查找长度为n的线性表时,平均查找长度为()。
【*】A.nB. n/2C. (n+1)/2D. (n-1)/24.采用折半查找方法检索长度为n的有序表,检索每个元素的平均比较次数()对应判定树的高度(设高度大于等于2)。
【**】A.小于B. 大于C. 等于D. 大于等于5.已知有序表(13,18,24,35,47,50,62,83,90,115,134),当折半查找值为90的元素时,查找成功的比较次数为()。
【*】A. 1B. 2C. 3D. 46.对线性表进行折半查找时,要求线性表必须()。
【*】A.以顺序方式存储B. 以链接方式存储C.以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序7.顺序查找法适合于存储结构为()的查找表。
【*】A.散列存储B. 顺序或链接存储C. 压缩存储D. 索引存储8.采用分块查找时,若线性表中共有625个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分()个结点最佳。
【**】A.10B. 25C. 6D. 6259.从键盘依次输入关键字的值:t、u、r、b、o、p、a、s、c、l,建立二叉排序树,则其先序遍历序列为(),中序遍历序列为()。
【**,★】A.abcloprstuB. alcpobsrutC. trbaoclpsuD. trubsaocpl10.折半查找和二叉排序树的时间性能()。
【*】A.相同B. 不相同11.一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有()个结点。
数据结构 第九章查找
第九章查找:习题习题一、选择题1.散列表查找中k个关键字具有同一散列值,若用线性探测法将这k个关键字对应的记录存入散列表中,至少要进行( )次探测。
A. kB.k+lC. k(k+l)/2D. l+k (k+l)/22.下述命题( )是不成立的。
A. m阶B-树中的每一个结点的子树个数都小于或等于mB. m阶B-树中的每一个结点的子树个数都大于或等于『m/2-1C. m阶B-树中的每一个结点的子树高度都相等D.m阶B-树具有k个子树的非叶子结点含有(k-l)个关键字3.如果要求一个基本线性表既能较快地查找,又能适应动态变化的要求,可以采用( ) 查找方法。
A.分块B. 顺序C. 二分D.散列4.设有100个元素,用折半查找法进行查找时,最大比较次数是( ),最小比较次数是( )。
A.7,1B.6,lC.5,1D. 8,15.散列表长m=15,散列表函数H(key)=key%13。
表中已有4个结点:addr(18)=5;addr(32)=6; addr(59)=7; addr(73)=8;其余地址为空,如果用二次探测再散列处理冲突,关键字为109的结点的地址是( )。
A. 8B. 3C. 5D. 46.用分块查找时,若线性表中共有729个元素,查找每个元素的概率相同,假设采用顺序查找来确定结点所在的块时,每块应分( )个结点最佳。
A. 15B. 27C. 25D. 307.散列函数有一个共同性质,即函数值应当以( )取其值域的每个值。
A.同等概率B. 最大概率C. 最小概率D.平均概率8.设散列地址空间为O..m-1,k为关键字,假定散列函数为h(k)=k%p,为了减少冲突,一般应取p为( )。
A.小于m的最大奇数B. 小于m的最大素数C.小于m的最大偶数D.小于m的最大合数9.当向一棵m阶的B-树做插入操作时,若使一个结点中的关键字个数等于( ),则必须分裂成两个结点。
A.mB. m-lC.m+lD.[m+1]10.当向一棵m阶的B壤f做删除操作时,若使一个结点中的关键字个数等于( ),则可能需要用它的左兄弟或右兄弟结点合并成一个结点。
计算机学科专业基础综合数据结构-7
计算机学科专业基础综合数据结构-7一、单项选择题(总题数:28,分数:74.00)1.若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为______。
A.(n-1)/2B.n/2C.(n+1)/2 √D..n此结论需要考生当作定理一样的牢记。
顺序查找法适用于查找顺序存储或链式存储的线性表,平均比较次数为______,二分法查找只适用于查找顺序存储的有序表,平均比较次数为______。
在此假定N为线性表中结点数,且每次查找都是成功的。
(分数:4.00)A.N+1B.2log2NC.log2ND.N/2 √E.Nlog2NF..N2A.N+1B.2log2NC.log2N √D.N/2E.Nlog2NF..N22.下面关于二分查找的叙述正确的是______。
A.表必须有序,表可以顺序方式存储,也可以链表方式存储B.表必须有序且表中数据必须是整型、实型或字符型C.表必须有序,而且只能从小到大排列D.表必须有序,且表只能以顺序方式存储√二叉查找树的查找效率与二叉树的______有天,在______时查找效率最低。
(分数:4.00)A.高度B.结点的多少C.树形√D.结点的位置A.结点太多B.完全二叉树C.呈单枝树√D.结点太复杂3.当采用分块查找时,数据的组织方式为______。
A.数据分成若干块,每块内数据有序B.数据分成若干块,每块内数据不必有序,但块间必须有序,每块内最大(或最小)的数据组成索引块√C.数据分成若干块,每块内数据有序,每块内最大(或最小)的数据组成索引块D.数据分成若干块,每块(除最后一块外)中数据个数需相同本题主要考查分块查找的相关概念。
4.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用下列哪一种查找方法?______A.分块√B.顺序C.二分法D.哈希由于题目只说明是线性表,因此排除二分法。
哈希算法虽然有最快的查找效率,但建立哈希表无法适应动态变化的要求。
习题9解答
习题9解答判断题:1.用向量和单链表表示的有序表均可使用折半查找方法来提高查找速度。
答:FALSE (错。
链表表示的有序表不能用折半查找法。
)2.有n 个数据放在一维数组A[1..n]中,在进行顺序查找时,这n 个数的排列有序或无序其平均查找长度不同。
答:FALSE (错。
因顺序查找既适合于有序表也适合于无序表;对这两种表,若对于每个元素的查找概率相等,则顺序查找的ASL 相同,并且都是(n+1)/2;对于查找概率不同的情况,则按查找概率由大到小排序的无序表其ASL 要比有序表的ASL 小。
)3.折半查找是先确定待查有序表记录的范围,然后逐步缩小范围,直到找到或找不到该记录为止。
( )答:TRUE4.哈希表的查找效率主要取决于哈希表哈希表造表时选取的哈希函数和处理冲突的方法。
答:TRUE5.查找表是由同一类型的数据元素(或记录)构成的集合。
答:TRUE单选题:6.对于18个元素的有序表采用二分(折半)查找,则查找A[3]的比较序列的下标为( )。
A. 1、2、3B. 9、5、2、3C. 9、5、3D.9、4、2、3 答:D (第一次⎣⎦2/)181(+ = 9,第二次⎣⎦2/)81(+ = 4,第三次⎣⎦2/)31(+ = 2, (第四次⎣⎦2/)33(+ = 3,故选D.7. 顺序查找法适合于存储结构为____________的线性表。
A.散列存储B.顺序存储或链式存储C.压缩存储D.索引存储答:B8.对线性表进行二分查找时,要求线性表必须( )。
A .以顺序方式存储 B. 以链接方式存储C .以顺序方式存储,且结点按关键字有序排序D. 以链接方式存储,且结点按关键字有序排序答:C9.设哈希表长m=14,哈希函数为H(k) = k MOD 11。
表中已有4个记录(如下图所示),如果用二次探测再散列处理冲突,关键字为49的记录的存储地址是( )。
答:D (计算H(k),即H(49)=49 mod 11 = 5,冲突,进行二次探测再散列。
散列表冲突处理方案
散列表冲突处理方案散列表(Hash Table)是一种重要的数据结构,它能够快速地进行插入、查找和删除等操作。
然而,在实际应用中,冲突(Collision)是散列表中常见的问题之一。
本文将介绍散列表冲突处理的几种常见方案,以及它们的优缺点。
一、开放定址法开放定址法是一种解决冲突的常见方法。
其原理是,当发生冲突时,通过一定的探测序列找到下一个可用的空槽,将待插入的元素放入该槽内。
常用的探测序列有线性探测、二次探测以及双重散列等。
1. 线性探测线性探测是最简单的开放定址法策略。
当发生冲突时,直接往后查找下一个空槽,并将待插入元素放入该槽内。
即使数组中只有少数位置被占用,线性探测也可能导致长时间的查找。
此外,线性探测容易产生一次聚集(Primary Clustering)现象,即冲突后的元素倾向于聚集在一起,进一步影响散列表的性能。
2. 二次探测二次探测对线性探测进行了改进。
当发生冲突时,根据一个二次探测序列进行查找下一个空槽,并将待插入元素放入该槽内。
二次探测的探测序列可以是平方探测、斐波那契探测等。
相比线性探测,二次探测能够减少聚集现象,但仍然存在聚集的问题。
3. 双重散列双重散列是一种更为高效的开放定址法策略。
当发生冲突时,通过计算另一个散列函数的值,并将其与原始散列值相加,得到下一个空槽的位置。
双重散列能够更好地解决聚集问题,提高散列表的性能。
二、链表法链表法是另一种常见的散列表冲突处理方案。
基本思想是,将散列得到的相同索引值的元素存储在同一个链表中。
当插入元素时,只需要将其插入到对应索引位置的链表尾部即可。
链表法对于散列冲突的处理效果较好,但在插入和查找操作上需要额外的链表遍历开销。
三、再散列法再散列法是一种结合链表法和开放定址法的冲突处理方法。
当发生冲突时,使用一个新的散列函数对待插入的元素进行再散列,并将其放入新的散列位置。
再散列法能够在一定程度上减少冲突的概率,提高散列表的性能。
综上所述,散列表冲突处理的方案有开放定址法、链表法以及再散列法等。
《数据结构》历年考研真题及解答
《数据结构》考研真题及解答目录2009 年试题 (1)填空题 (1)解答题 (2)2010 年试题 (2)填空题 (2)解答题 (4)2011 年试题 (4)填空题 (4)解答题 (5)2012 年试题 (6)填空题 (6)解答题 (7)2013 年试题 (8)填空题 (8)解答题 (9)2014 年试题 (10)填空题 (10)解答题 (11)2015 年试题 (12)填空题 (12)解答题 (14)2009 年试题填空题1.为解决计算机与打印机之间速度不匹配的问题,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。
该缓冲区的逻辑结构应该是A.栈B.队列C.树D.图2.设栈 S 和队列 Q 的初始状态均为空,元素 abcdefg 依次进入栈 S。
若每个元素出栈后立即进入队列 Q,且7 个元素出队的顺序是 bdcfeag,则栈 S 的容量至少是A.1 B.2 C.3 D.43.给定二叉树图所示。
设 N 代表二叉树的根,L代表根结点的左子树,R代表根结点的右子树。
若遍历后的结点序列为 3,1,7,5,6,2,4,则其遍历方式是A.LRN B.NRL C.RLN D.RNL4.下列二叉排序树中,满足平衡二叉树定义的是5.已知一棵完全二叉树的第 6 层(设根为第 1 层)有8 个叶结点,则完全二叉树的结点个数最多是A.39 B.52 C.111 D.1196.将森林转换为对应的二叉树,若在二叉树中,结点u 是结点v 的父结点的父结点,则在原来的森林中,u 和v 可能具有的关系是I.父子关系II.兄弟关系III.u 的父结点与v 的父结点是兄弟关系A.只有IIB.I 和IIC.I 和IIID.I、II 和III7.下列关于无向连通图特性的叙述中,正确的是I.所有顶点的度之和为偶数II.边数大于顶点个数减1 III.至少有一个顶点的度为1A.只有IB.只有IIC.I 和IID.I 和III8.下列叙述中,不符合 m 阶B 树定义要求的是A.根节点最多有m 棵子树 B.所有叶结点都在同一层上C.各结点内关键字均升序或降序排列 D.叶结点之间通过指针链接9.已知关键序列 5,8,12,19,28,20,15,22 是小根堆(最小堆),插入关键字 3,调整后得到的小根堆是A.3,5,12,8,28,20,15,22,19B.3,5,12,19,20,15,22,8,28C.3,8,12,5,20,15,22,28,19D.3,12,5,8,28,20,15,22,1910.若数据元素序列 11,12,13,7,8,9,23,4,5 是采用下列排序方法之一得到的第二趟排序后的结果,则该排序算法只能是A.起泡排序 B.插入排序 C.选择排序 D.二路归并排序解答题41.(10 分)带权图(权值非负,表示边连接的两顶点间的距离)的最短路径问题是找出从初始顶点到目标顶点之间的一条最短路径。
二次探测再散列例题
二次探测再散列是一种处理哈希冲突的方法,它通过在哈希表中为每个关键字重新探测一个空闲的槽位来处理冲突。
下面是一个二次探测再散列的例题:假设我们有一个哈希表,其大小为7,哈希函数为H(key) = key % 7。
现在我们要插入以下关键字:17, 23, 3, 29, 12, 14, 6。
1. 插入关键字17:H(17) = 17 % 7 = 3,将17插入到位置3。
2. 插入关键字23:H(23) = 23 % 7 = 5,将23插入到位置5。
3. 插入关键字3:H(3) = 3 % 7 = 3,发现位置3已经存在关键字17,需要进行二次探测再散列。
假设我们使用线性探测方法,将关键字3插入到位置4。
4. 插入关键字29:H(29) = 29 % 7 = 2,发现位置2已经存在关键字23,需要进行二次探测再散列。
假设我们使用平方探测方法,将关键字29插入到位置6。
5. 插入关键字12:H(12) = 12 % 7 = 5,发现位置5已经存在关键字23,需要进行二次探测再散列。
假设我们使用平方探测方法,将关键字12插入到位置6。
6. 插入关键字14:H(14) = 14 % 7 = 0,发现位置0已经存在关键字17,需要进行二次探测再散列。
假设我们使用平方探测方法,将关键字14插入到位置6。
7. 插入关键字6:H(6) = 6 % 7 = 6,发现位置6已经存在关键字29和关键字14,需要进行二次探测再散列。
假设我们使用平方探测方法,将关键字6插入到位置4。
最终的哈希表如下:* 位置0: 17* 位置1: (空)* 位置2: 23* 位置3: 3* 位置4: 6* 位置5: 29* 位置6: (空)在这个例子中,我们使用了平方探测方法进行二次探测再散列。
如果使用其他方法(如线性探测、双重哈希等),结果可能会有所不同。
2010年计算机考研真题大题参考答案
块的大小为 64B,块内地址为 6 位,主存容量为 256MB,按字节编址,256MB = 228 B,主
存地址为 28 位,快标记为 19 位,采用直接映射方式,主存和 Cache 的地址格式分别为:
44.(12 分)某计算机的主存地址空间大小为 256MB,按字节编址,指令 Cache 和数据 Cache 分离,均有 8 个 Cache 行,每个 Cache 行大小为 64B,数据 Cache 采用直接映射方式,现有 两个功能相同的程序 A 和 B,其伪代码如下所示:
程序 A: int a[256][256]; …… int sum_array1() {
(2)数组元素 a[0][31]和 a[1][1]各自所在的主存块对应的 Cache 行号分别是多少(Cache 行号从 0 开始)?
(3)程序 A 和程序 B 的数据访问命中率各是多少?哪个程序的执行过程更短?
【 解 答 】(1)数据 Cache 有 8 个 Cache 行,每个 Cache 行大小为 64B,若不考虑用于 Cache 一致性维护和替换算法的控制位,则数据 Cache 的总容量为 8×64B = 512B。
( X 0 X1 …… X n-1 )变化为( X p X p+1 …… X n-1 X 0 X1 …… X p−1 )。 要 求 :
(1)给出算法的基本设计思想; (2)根据设计的算法,采用 C 或 C++或 JAVA 语言描述算法,关键之处给出注释; (3)说明你所设计的算法的时间复杂度和空间复杂度。
页号 0 1 2 3
页框号 7 4 2 9
二次探测散列法
二次探测散列法二次探测散列法是一种常用的解决哈希冲突(hash collision)问题的方法之一。
在介绍二次探测散列法之前,我们先来了解一下哈希冲突。
哈希冲突是指在散列表(hash table)中,不同的关键字经过哈希函数(hash function)计算得到相同的存储位置的情况。
哈希冲突是不可避免的,因为哈希函数的输出空间是有限的,而关键字的集合可能是无限的。
为了解决哈希冲突,我们需要找到一种方法,在保证高效查询的同时,尽量减少冲突的发生。
二次探测散列法就是一种解决哈希冲突的方法。
它的基本思想是,当发生冲突时,不仅仅进行线性探测(linear probing),而是根据一个固定的步长序列,按照一定规律去寻找下一个存储位置。
具体来说,二次探测散列法的步骤如下:1.创建一个大的散列表,其中包含N个存储位置(N通常是一个质数),初始时都为空。
2.定义一个哈希函数,将关键字映射到散列表中的存储位置。
3.当发生冲突时,计算下一个存储位置。
3.1首先计算第i次探测的偏移量offset,通常可以选择一种固定的步长序列,例如,平方数序列(1,4,9,16...),这样可以更好地散列关键字。
3.2然后计算下一个存储位置为hash(key) + offset * i。
3.3如果计算得到的存储位置已经被占用,则继续计算下一个存储位置,直到找到一个空闲的位置为止。
4.将关键字存储到对应的存储位置。
通过以上的步骤,二次探测散列法可以有效地解决哈希冲突的问题。
它的优点是简单易实现、存储位置分布均匀、查找速度快。
但同时也存在一些缺点。
首先,二次探测散列法可能导致聚集(clustering)的现象。
聚集是指关键字在散列表中分布不均匀,导致某些区域的存储位置更容易发生冲突。
这会导致哈希表的效率下降,因为查询操作需要进行更多次的探测。
其次,二次探测散列法的步长序列选择也有一定的讲究。
如果选择不当,可能会导致更多的冲突。
例如,选择的步长序列和散列表的大小之间存在某种关联,可以减少聚集的发生。
查找与排序 自测题
第四部分查找与排序自测题一、选择(每题2分。
共25分)1. 从二叉搜索(排序)树中查找一个元素时,其时间复杂度大致为________。
A、O(n)B、O(1)C、O(log2n)D、O(n2)2.从任意结点出发到根的路径上所经过的结点序列按其关键字有序,则该二叉树是_____。
A、二叉排序树B、Huffman树C、AVL树D、堆3.不可能生成右图所示二叉排序树的关键字序列是_____。
A、4, 5, 3, 1, 2B、4, 2, 5, 3,1C、4, 5, 2, 1, 3D、4, 2, 3, 1, 54.AVL树是一种平衡的二叉排序树,树中任一结点如果左右子树均存在,则_____。
A、左、右子树的高度均相同B、左、右子树高度差的绝对值不超过1C、左子树的高度均大于右子树的高度D、左子树的高度均小于右子树的高度5.向平衡二叉排序树中插入和查找一个元素时,其时间复杂度分别大致为_____、_____。
A、O(1)B、O(1og2n)C、O(n)D、O(nlog2n)E、O(n2)6.对二叉排序树进行_____遍历,可得到该二叉树所有结点构成的有序序列。
A、前序B、中序C、后序D、按层次7.依次插入序列(50,72,43,85,75,20,35,45,65,30)后建立的二叉排序树中,查找元素35要进行_____元素间的比较。
A、4次B、5次C、7次D、10次8.若在线性表中采用折半查找法查找元素,该线性表应该_____。
A、元素按值有序B、元素按值有序,且采用顺序存储结构C、采用顺序存储结构D、元素按值有序,且采用链式存储结构9.设有100个元素,用二分法查找时,最大比较次数是_____。
A、6B、7C、8D、9 D、1010.有一个长度为12的有序表,按二分查找法对该表进行查找,在表内各元素等概率情况下查找成功所需的平均比较次数为_____。
A、35/12B、37/12C、39/12D、43/1211.设二叉树中关键字由l至1000的整数构成,现要检索关键字为363的结点,下述关键字序列中,_____不可能是二叉排序树上搜索到的序列。
计算机学科专业基础综合数据结构-查找(一)_真题-无答案
计算机学科专业基础综合数据结构-查找(一)(总分100,考试时间90分钟)一、单项选择题(下列每题给出的4个选项中,只有一个最符合试题要求)1. 对长度为n的有序单链表,若查找每个元素的概率相等,则顺序查找表中任一元素查找成功的平均查找长度为______。
A.n/2 B.(n+1)/2 C.(n-1)/2 D.n/42. 对线性表进行折半查找时,要求线性表必须______。
A.以顺序方式存储 B.以链接方式存储 C.以顺序方式存储,且结点按关键字有序排序 D.以链接方式存储,且结点按关键字有序排序3. 采用折半查找方式查找一个长度为n的有序顺序表时,其平均查找长度为______。
A.O(n)B.O(log2n)C.O(n2)D.O(nlog2n)4. 在对长度为n的顺序存储的有序表进行折半查找时,对应的二叉判定树的高度为______。
A.n B.C.D.5. 采用折半查找法查找长度为n的有序顺序表,查找每个元素的数据比较次数______对应二叉判定树的高度(设高度≥2)。
A.小于 B.大于 C.等于 D.小于等于6. 已知有序顺序表(13,18,24,35,47,50,62,83,90,115,134),当用折半查找法查找值为18的元素时,查找成功的数据比较次数为______。
A.1 B.2 C.3 D.47. 折半查找和二叉排序树的时间性能______。
A.相同 B.有时不相同 C.完全不同 D.不定8. m阶B树是一棵______。
A.m叉查找树 B.m叉高度平衡查找树 C.m-1叉高度平衡查找树 D.m+1叉高度平衡查找树9. 在10阶B树中根结点所包含的关键字个数最多为______,最少为1。
A.7 B.8 C.9 D.1010. 在一棵m阶B树的结点中插入新关键字时,若插入前结点的关键字数为______,则插入新关键字后该结点必须分裂为两个结点。
A.m B.m-1 C.m+1 D.m-211. 在一棵高度为h的B树中插入一个新关键字时,为查找插入位置需读取______个结点。
数据结构程序设计题目共29题
目录题目1:设计一元多项式简单计算 (1)题目2:链表应用1 (1)题目3:链表应用2 (1)题目4:通讯录 (2)题目5:停车场管理系统................................................ 错误!未定义书签。
题目6:约瑟夫环 (3)题目7:运动会分数统计 (3)题目8:文学研究助手问题 (3)题目9:银行业务模拟与离散事件模拟 (4)题目10:学生信息管理系统任务(用顺序表/链表)....... 错误!未定义书签。
题目11:文章编辑功能 ................................................. 错误!未定义书签。
题目12:实验室管理..................................................... 错误!未定义书签。
题目13:二叉树的基本操作(建立、求二叉树树深度、遍历).. (4)题目14:纸牌游戏任务 (5)题目15:算术表达式求值 (5)题目16:内部排序算法比较 (5)题目17:哈夫曼树的构造和哈夫曼编码/译码 (6)题目18:构造可以使n个城市连接的最小生成树 (7)题目19:交通咨询系统中的最短路径 (7)题目20:集合的交、并、差运算 ................................... 错误!未定义书签。
题目21:长整数四则运算 (7)题目22:机订票系统..................................................... 错误!未定义书签。
题目23:图书管理系统 (8)题目24:哈希表应用 (8)题目25:模拟旅馆管理系统的一个功能——床位的分配与回收 (9)题目26:地图着色问题 (9)题目27:俄罗斯套娃问题 (10)题目28:扫雷 (11)题目29:用C语言设计一个日历系统 (11)题目1:设计一元多项式计算【任务要求】(1)能够按照指数降序排列建立并输出多项式;(2)能够完成两个多项式的相加、相减,并将结果输入;实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数,如项数等。
二次探测法处理冲突例题
二次探测法处理冲突例题【最新版】目录1.二次探测法的概念2.二次探测法的增量序列3.处理散列冲突的步骤4.构建哈希表并查找成功时的平均查找长度正文二次探测法处理冲突例题在本文中,我们将介绍如何利用二次探测法处理散列冲突。
散列是一种将节点按关键字的散列地址存储在散列表中的过程。
在散列的过程中,可能会发生将不同的关键字映射到同一个散列地址的现象,这就是散列冲突。
为了解决这个问题,我们可以使用二次探测法。
首先,我们来了解一下二次探测法的概念。
二次探测法是在散列冲突发生时,通过探测另一个散列地址来解决冲突的方法。
这个方法的核心思想是利用一个增量序列,将发生冲突的元素依次探测到另一个散列地址。
二次探测法的增量序列是如何构成的呢?假设我们有一个散列地址空间为 0-10,我们可以将这个空间划分为若干个探测区域。
例如,我们可以将其划分为 0-2, 3-5, 6-8, 9-10 四个区域。
当我们遇到散列冲突时,我们将当前元素依次探测到这四个区域。
具体来说,我们从当前地址的后移偏量开始,每次加上增量序列中的值,直到找到一个空闲的散列地址。
下面,我们通过一个具体的例子来说明如何处理散列冲突。
假设我们有一个关键字序列:22, 41, 53, 46, 30, 13, 01, 67。
我们选取哈希函数 H(k) = k MOD 11,然后在 0-10 的散列地址空间中构建哈希表。
首先,我们计算每个关键字的散列地址:- 22 MOD 11 = 1- 41 MOD 11 = 9- 53 MOD 11 = 3- 46 MOD 11 = 6- 30 MOD 11 = 0- 13 MOD 11 = 3- 01 MOD 11 = 1- 67 MOD 11 = 8接下来,我们将这些关键字插入到哈希表中:- 22 -> 1- 41 -> 9- 53 -> 3- 46 -> 6- 30 -> 0- 13 -> 3 (冲突!与 53 冲突)- 01 -> 1- 67 -> 8当发生冲突时,我们使用二次探测法来解决。
哈希表查找——成功和不成功时的平均查找长度
哈希表查找——成功和不成功时的平均查找长度以下求解过程是按照“计算机统考的计算方法”,不同的老师、教材在“处理冲突”上可能会有不同的方法,所以最主要的是掌握原理即可,对于考研的朋友最好掌握统考真题的解题方法。
题目例子:(2010年全国硕士研究生入学统一考试计算机科学与技术学科联考计算机学科专业基础综合试题第一题)将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。
散列表的存储空间是一个下标从0开始的一维数组。
散列函数为:H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表;(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。
1.散列表:α= 表中填入的记录数/哈希表长度==> 哈希表长度= 7/0.7 = 10H(7) = (7x3) MOD 7 = 0H(8) = (8x3) MOD 7 = 3 H(30) = (30x3) M OD 7 = 6H(11) = (11x3) MOD 7 = 5 H(18) = (18x 3) MOD 7 = 5 H(9) = (9x3) MOD 7 = 6H(14) = ( 14x3) MOD 7 = 0按关键字序列顺序依次向哈希表中填入,发生冲突后按照“线性探测”探测到第一个空位置填入。
0123456789714 8 11301892.查找长度: 2.1 查找成功的平均查找长度(待查找的数字肯定在散列表中才会查找成功)查找数字A的长度= 需要和散列表中的数比较的次数;步骤:比如查找数字:8则H(8) = (8x3) MOD 7 = 3哈希表中地址3处的数字为8,进行了第一次比较:8 = 8,则查找成功,查找长度为1;比如查找数字:14则H(14) = (14x3) MOD 7 = 0哈希表中地址0处的数字为7,进行第一次比较:7≠14哈希表中地址1处的数字为14,进行第二次比较:14=14 ,则查找成功,查找长度为2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性探测再散列法查找成功和查找不成功的平均查找长度Question1:
将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。
散列表的存储空间是一个下标从0开始的一维数组,散列函数为:H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。
(1) 请画出所构造的散列表。
(2) 分别计算等概率情况下查找成功和查找不成功的平均查找长度。
Ans:
(1).首先明确一个概念装载因子,装载因子是指所有关键子填充哈希表后饱和的程度,它等于关键字总数/哈希表的长度。
根据题意,我们可以确定哈希表的长度为L = 7/0.7 = 10;因此此题需要构建的哈希表是下标为0~9的一维数组。
根据散列函数可以得到如下散列函数值表。
H(Key) = (keyx3) MOD 7, 例如key=7时,H(7) = (7x3)%7 = 21%7=0,其他关键字同理。
Key 7 8 30 11 18 9 14
H(Key) 0 3 6 5 5 6 0
(表1)
采用线性探测再散列法处理冲突,所构造的散列表为:
地址0 1 2 3 4 5 6 7 8 9
关键字7 14 8 11 30 18 9
(表2)
下面对散列表的构造方式加以说明,注意表1中的关键字7和14,30和9,11和18,这三组关键子的H(Key)值相同,这在构建散列表时就会产生冲突,因为他们的地址相同,所以要通过一定的冲突处理方法来解决这个问题。
依题,采用线性探测再散列法处理冲突。
下面详细介绍如何构建散列表:
第一个key 7,它的地址是0,因此放到散列表的数组下表为0的位置,这个位置上没有关
键字,因此没有冲突可以直接填入;
第二个key 8,它的地址是3,因此放到散列表的数组下表为3的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第三个key 30,它的地址是6,因此放到散列表的数组下表为6的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第四个key 11,它的地址是5,因此放到散列表的数组下表为5的位置,这个位置上没有关键字,因此没有冲突可以直接填入;
第五个key 18,它的地址是5,因此放到散列表的数组下表为5的位置,但这个位置上已经有关键字11,遇到了冲突,此时我们根据线性探测再散列法来处理这个冲突,探测下一个位置6, 6这个位置上已经存在关键字30则继续增加步长1,因此现在的新地址应为7,位置7上没有关键字,放入即可,到此冲突已经解决;
第六个key 9,它的地址是6,因此放到散列表的数组下表为6的位置,但这个位置上已经有关键字30,遇到了冲突,探测下一个位置7, 7这个位置上已经存在关键字18则继续增加步长1,因此现在的新地址应为8,位置8上没有关键字,放入即可;
第七个key 14,它的地址是0,因此放到散列表的数组下表为0的位置,但这个位置上已经有关键字7,遇到了冲突,探测下一个位置1, 位置1上没有关键字,放入即可;
到这一步所有关键字均已填入,散列表已经构造完成,如表2所示。
(2)等概率情况下查找成功平均查找长度:
这一问可以根据第一问的构造过程求解:
key7一次就填入了表中,因此查找次数为1,同理8,30,11查找次数均为1;key18 进行了3次放入操作,探测位置分别是5,6,7 ,因此查找次数为3;key9也是3次;key14 进行了两次探测,因此查找次数为2。
次数表如表3所示
Key 7 8 30 11 18 9 14
Count 1 1 1 1 3 3 2
(表3)
所以ASLsuccess= (1+1+1+1+3+3+2)/ 7 = 12/7。
等概率情况下查找不成功的平均查找长度:
接下来讨论不成功的情况, 看表2,计算查找不成功的次数就直接找关键字到第一个地址上关键字为空的距离即可,但根据哈希函数地址为MOD7,因此初始只可能在0~6的位置。
等概率情况下,查找0~6位置查找失败的查找次数为:
看地址0,到第一个关键字为空的地址2的距离为3,因此查找不成功的次数为3.
地址1,到第一个关键为空的地址2的距离为2,因此查找不成功的次数为2.
地址2,到第一个关键为空的地址2的距离为1,因此查找不成功的次数为1.
地址3,到第一个关键为空的地址4的距离为2,因此查找不成功的次数为2.
地址4,到第一个关键为空的地址4的距离为1,因此查找不成功的次数为1.
地址5,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为5,因此查找不成功的次数为5.
地址6,到第一个关键为空的地址2(注意不是地址9,因为初始只可能在0~6之间,因此循环回去)的距离为4,因此查找不成功的次数为4.
因此查找不成功的次数表如下表所示
Key 7 8 30 11 18 9 14
Count 3 2 1 2 1 5 4
(表4)
所以ASLunsuccess= (3+2+1+2+1+5+4)/ 7 = 18/7。