ASL查找成功和查找失败的计算方法

查找成功:所要查询的数据一定能在散列表中查找得到,平均查找长度为各个元素的比较次数。例如(1,2,3,4,5,6),使用Hash(key) mod 8 装入长度为20的散列表,那么此时平均查找成功长度为 [ 1/6 * (6个元素比较次数之和) ]
查找失败:一定是不在散列表中的数据,比较次数为当前查找失败对象往后比较到第一个空单元或超出散列表,其查找个数需要根据散列函数而定,例如Hash(key) mod 8,那么即使当前散列表长度为20,查找失败的对象也不会超过8,因为散列的映射地址不会>8,即平均查找失败长度为 [ 1/8 * (8个散列单元查找失败时的比较次数之和) ]

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
算法思想: BST(Binary Search Tree)是一种基于二分查找的数据结构,每个节点都有最多两个子节点,其中左子节点的值小于父节点,右子节点的值大于父节点。在BST中查找元素时,从根节点开始比较,如果待查找元素小于当前节点值,则向左子树查找;如果待查找元素大于当前节点值,则向右子树查找。直到找到匹配的节点或者遇到空节点停止搜索。 ASL(Average Search Length)指的是在查找一组数据中,平均需要搜索的节点数。对于BST而言,ASL与树的结构有关,如果树是平衡的则ASL会更小,如果树是不平衡的则ASL会更大。 计算ASL方法是,对于BST中每个节点,计算出从该节点出发查找成功的概率(即该节点对应元素在数据集中出现的概率),并将该概率乘以从根节点到该节点的路径长(即该节点的深度)。然后将所有节点的贡献相加,即可得到平均搜索长度。 具体实现: 我们可以使用递归的方式遍历BST中的每个节点,计算出该节点的搜索成功概率和深度,然后将二者相乘,累加到ASL上。具体实现步骤如下: 1. 定义一个函数,输入为BST的根节点指针和数据集大小,输出为ASL。 2. 在函数中定义一个辅助函数,用于计算每个节点的搜索成功概率和深度。该函数的输入为当前节点指针、数据集大小和当前深度,输出为概率和深度。 3. 在辅助函数中,如果当前节点为空,则返回概率和深度都为0。 4. 如果当前节点不为空,则根据BST的性质,将数据集分成三部分:小于当前节点值的部分、等于当前节点值的部分和大于当前节点值的部分。分别计算这三部分的概率和深度。 5. 将三部分的贡献相加,得到当前节点的概率和深度。 6. 返回当前节点的概率和深度。 7. 在主函数中,调用辅助函数计算每个节点的贡献,并将所有节点的贡献相加,得到ASL。 下面是具体的C语言代码实现:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值