【数据结构】——查找、散列表简答题模板

发布时间:2023年12月19日

一、查找的概念

(一)静态查找和动态查找

1、简述静态查找和动态查找的概念,并举例相应的查找名称。

:查找某个特定元素是否在表中和它的相关属性称为静态查找,例如顺序、折半、分块、散列查找等;若在查找过程中需要插入或删除查找表的元素,则为动态查找,例如树形查找中的二叉搜索树、平衡二叉树、B树等。

(二)二分查找的适用情况

1、什么情况下可以采用二分查找?若数据元素的个数为n,则查找成功的平均查找长度是多少?

:二分(折半)查找要求线性表必须采用顺序存储结构,且表中元素按关键字有序排列,由于在二分判定树中,比较次数最多不会超过树的高度h=?log2(n+1)?,即二分查找成功的平均查找长度为O(log2n)。

2、对于一个有序顺序表来说,折半查找是否任何时候都比顺序查找快?为什么?

:并不是,只是一般情况下折半查找比顺序查找快,因为折半查找每次比较都可以排除一半的元素,从而减少了查找时间。例如,若要查找的元素为顺序表的第一个元素,则通过顺序查找会比折半查找快。

(三)查找算法中的监视哨

1、在很多查找和排序算法中,经常使用“监视哨”,其目的是什么?

:监视哨的作用是免去了查找过程中每次都要检测整个表是否查找完毕,提高了查找效率。

二、散列查找

(一)同义词

1、在采用线性探测法处理冲突的散列表中,所有同义词在表中是否一定相邻?

:不一定相邻。因为发生了冲突,即出现两个不同的关键字被哈希函数散列到同一个地址的情况,都争夺哈希地址。

(二)构造哈希函数

1、简述构造哈希函数的常用方法。

:简述构造哈希函数的常用方法有以下:
(1)直接定址法:选取关键字或关键字的某个线性函数值为哈希地址;
(2)除留余数法:选取关键字除以某个整数的余数作为哈希地址,即通过取余运算得到的余数作为哈希地址;
(3)平方取中法:取关键字平方的中间几位作为哈希地址;
(4)折叠法:将关键字分割成位数相同的几段,然后叠加求和作为哈希地址。

2、如何衡量Hash函数的优劣?

:评价Hash函数的优劣有:能否将关键字均匀影射到哈希空间上,有无好的解决冲突的方法,计算哈希函数是否简单高效等。另外,一个好的哈希函数可以减小冲突,但不可能避免冲突。

(三)散列查找的步骤

1、假设已按散列函数H和冲突处理方法R建立了散列表,试写出散列查找的步骤。

:设查找哈希表的关键字KEY,首先通过散列函数计算地址,然后用关键字KEY与该地址的关键字进行比较,若当前地址为空,则查找失败;若相同,则查找成功;若不同,则通过冲突处理方法R得到下一个地址进行比较,直到相同为止,其中若按照冲突处理方法R得到的新地址又比较为空,则证明查找失败。

(四)冲突和解决冲突

1、简要叙述hash表技术中的冲突概念,并指出三种解决冲突的方法。

:两个不同的关键字被哈希函数散列到同一个地址的情况则称为冲突,解决冲突的方法有线性探查法、平方探查法、双散列法、链地址法等等。

三、树形查找

(一)二叉搜索树的定义

1、什么是二叉搜索树?

:用于查找的二叉树,其中每个结点的值不小于左子树结点的值,不大于右子树结点的值。

(二)平衡二叉搜索树的定义

1、什么是平衡二叉搜索树?有哪些动态平衡调整操作?

:平衡二叉树以二叉搜索树为基础,若二叉搜索树中左、右子树的高度之差的绝对值不超过1,则称为平衡二叉树,其左、右子树也为一棵平衡二叉树。有以下动态平衡调整操作:
①左单旋转LL;
②右单旋转RR;
③先左后右双旋转LR;
④先右后左双旋转RL。

(三)平衡二叉搜索树结点的个数

1、一棵具有m层的AVL树至少有多少个结点,最多有多少个结点?

:一棵具有 m 层的平衡二叉树(AVL),最多有2m-1个结点,另外,由斐波那契数列(Fibonacci),可得最少有f(m) = f(m-1) + f(m-2) + 1个结点,其中f(1) = 1 、f(2) = 2、f(3) = 4。

文章来源:https://blog.csdn.net/qq_43085848/article/details/135003975
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。