第1关:静态树表的查找
任务描述
本关任务:利用静态树表查找元素。
相关知识
本关将基于 C 语言介绍静态树表的概念以及由此产生的查找算法。
折半查找的问题
在学习之前,请务必了解折半查找,相关实训:顺序表的查找
折半查找实际上是将顺序表构造成了一颗二叉树,比如下面的顺序表:
[1, 2, 5, 10, 20, 50, 100]
构成的二叉树如下所示:
以查找元素20描述查找过程,先和根元素10比,大于10,转向右子树,和右子树的根元素50比,小于50,转向左子树,和左子树的根元素20比,相等,查找结束。
如果查找每一个元素的概率都相同,那么折半查找的平均查找长度最小。
但是如果每一个元素的平均查找概率不同,折半查找并非最优解。
平均查找长度的计算公式为:
每个元素被查找概率 * 该元素在树中的层数
然后求和。
如果上例中每个元素的被查找概率分别为:
[0.4, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
那么这个例子的平均查找长度为:
3 * 0.4 + 2 * 0.1 + 3 * 0.1 + 1 * 0.1 + 3 * 0.1 + 2 * 0.1 + 3 * 0.1 = 2.6
#