七、查找
1. 看图填空
查找表是由同一类型的数据元素(或记录)构成的集合。例如上图就是一个查找表。
期中(1)是______________. (2)是______________(3)是_____关键字_______。
2. 查找(Searching) 就是根据给定的某个值, 在查找表中确定一个其____________等于给定值的_______________。
3. 列出常见的三种查找算法:______________、______________、______________。
4. ___________又叫线性查找, 是最基本的查找技术,它的查找过程是: 从表中第一个(或最后1个)记录开始,
逐个进行记录的_________与给定值比较,一直到找到相等的记录,它的时间复杂度是_____________。
它对表中记录是否有序___________(有 / 没有)要求。
5. ___________又称为二分查找,它的前提是线性表中的记录必须是________________, 线性表必须采用__________存储。它的时间复杂度是_____________。
6. ___________查找,是把数据集的记录分成若干块,并且这些块需要满足两个条件:
(1). 块内的记录特点:____________________________________。
(2). 块间的记录特点:____________________________________。
7. 二叉排序树,又称为二叉查找树,它或者是一棵空树,或者是具有下列性质:
(1). 若它的左子树不空, 则左子树上所有结点的值均小于它的_____结点的值。
(2). 若它的右子树不空, 则右子树上所有结点的值均大于它的_____结点的值。
(3). 它的左、右子树也分别为_________树。
它的时间复杂度是________________.
8. 二叉排序树是以____________方式存储,这种存储结构在执行插入、删除时不用移动元素的优点。找到合适的插入、删除位置后,仅需要修改__________即可。
9. 散列技术是在记录的_________和它的__________之间建立一个确定的对应关系f, 使得每个_________对应一个存储位置f(key)。
查找时,根据这个确定的对应关系找到给定值key的映射 f(key), 若查找集合中存在这个记录,则必定在f(key)的位置上。
这里我们把对应关系f 称为_________函数,又称为______函数。
采用散列技术将记录存储在一块地址___________的存储空间中,这块连续的存储空间称为______表或_____表。关键字对应的记录位置我们称为_______地址。
10. 散列技术即是一种存储方法,也是一种查找方法,它的时间复杂度是________________。
11. 散列表查找,如果没有冲突,它的效率很高,它的时间复杂度是________。可惜,没有冲突的散列只是一种理想,在实际的应用中,冲突是不可避免的,他的平均查找性能,取决于以下3个因素。
(1) 散列函数的好坏直接影响着出现冲突的频繁程度,它的主要指标是_______________。
(2)处理冲突的方法____________________。
(3) 散列表的装填因子。请解释装填因子是什么_____________________________________。
12. 给定一个长度为n的整形数组 int data[n], 它的数据以按从小到大排序。请用折半查找法,
完成以下函数,要求: 如果查找到目标数据target,则返回所在位置的数组下标,否则返回-1.
int findIndex(int data[], int size, int target)
{
}
-----------------------------------------------------------------------------------------------------------------------------
七、查找(答案)
1. 看图填空
查找表是由同一类型的数据元素(或记录)构成的集合。例如上图就是一个查找表。
期中(1)是___数据项____. (2)是__数据元素(记录)___(3)是_____关键字_______。
2. 查找(Searching) 就是根据给定的某个值, 在查找表中确定一个其__关键字__等于给定值的___数据元素(或记录)____________。
3. 列出常见的三种查找算法:__顺序查找___、__折半查找__、__分块查找____。
4. ___顺序查找__又叫线性查找, 是最基本的查找技术,它的查找过程是: 从表中第一个(或最后1个)记录开始,逐个进行记录的_关键字__与给定值比较,一直到找到相等的记录,它的时间复杂度是___O(n)__________。
它对表中记录是否有序___没有___(有 / 没有)要求。
5. __折半查找___又称为二分查找,它的前提是线性表中的记录必须是__关键字有序____, 线性表必须采用__顺序__存储。它的时间复杂度是____O(logn)_________。
6. __分块查找____查找,是把数据集的记录分成若干块,并且这些块需要满足两个条件:
(1). 块内的记录特点:___块内无序(即每一块内的记录不要求有序)_______。
(2). 块间的记录特点:___块间有序(即要求第二块的所有记录的关键字均要大于第一块中所有记录的关键字,其他块依次类推)____。
7. 二叉排序树,又称为二叉查找树,它或者是一棵空树,或者是具有下列性质:
(1). 若它的左子树不空, 则左子树上所有结点的值均小于它的__根___结点的值。
(2). 若它的右子树不空, 则右子树上所有结点的值均大于它的__根___结点的值。
(3). 它的左、右子树也分别为____二叉排序_____树。
它的时间复杂度是___最理想(二叉树是比较平衡的)是O(logn), 最糟糕(二叉树向一遍倾斜)是O(n)____.
8. 二叉排序树是以___链接__方式存储,这种存储结构在执行插入、删除时不用移动元素的优点。找到合适的插入、删除位置后,仅需要修改__链接指针____即可。
9. 散列技术是在记录的__存储位置___和它的__关键字___之间建立一个确定的对应关系f, 使得每个__关键字key___对应一个存储位置f(key)。
查找时,根据这个确定的对应关系找到给定值key的映射 f(key), 若查找集合中存在这个记录,则必定在f(key)的位置上。
这里我们把对应关系f 称为__散列__函数,又称为__哈希(hash)__函数。
采用散列技术将记录存储在一块地址___连续___的存储空间中,这块连续的存储空间称为__散列__表或__哈希__表。关键字对应的记录位置我们称为__散列_____地址。
10. 散列技术即是一种存储方法,也是一种查找方法,它的时间复杂度是___O(1)_____。
11. 散列表查找,如果没有冲突,它的效率很高,它的时间复杂度是___O(1)__。可惜,没有冲突的散列只是一种理想,在实际的应用中,冲突是不可避免的,他的平均查找性能,取决于以下3个因素。
(1) 散列函数的好坏直接影响着出现冲突的频繁程度,它的主要指标是___是否均匀____。
(2)处理冲突的方法____开放地址法、拉链法______。
(3) 散列表的装填因子。请解释装填因子是什么___填入表中的记录 / 散列表长度______。
12. 给定一个长度为n的整形数组 int data[n], 它的数据以按从小到大排序。请用折半查找法,
完成以下函数,要求: 如果查找到目标数据target,则返回所在位置的数组下标,否则返回-1.
int findIndex(int data[], int size, int target)
{
}