最优检索二叉树

2023-11-05

最优检索二叉树

抛出问题:

在这里插入图片描述

在这里插入图片描述

算法的基本解决思路:

在这里插入图片描述

空隙:

所谓的空隙也就是查找的数值在二叉树的结点中是不存在的,指向的是附近结点的左右子树两边。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

检索数据的平均时间:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于工作量而言,结点的工作量就是等于其层数加1,因为二叉树是从0层开始的,对于空隙结点的工作量就是其层数。
在这里插入图片描述

小结:

在这里插入图片描述

最优二叉检索树的实现算法分析:

关键问题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例如我们选取BCD为子问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 注意m[]的含义,平均比较次数,也就是其工作量乘以对应概率

关于优化函数的递推方程

在这里,我们会选取一个节点作为当前子问题的根节点,将此子问题的第i个节点到k-1个结点连接在左子树,将k+1到j的节点连接在右子树,因此这样形成的子问题树,其节点的普遍的操作次数全部加一,也就是说这个加一的体现可以在概率上面,等同于说是平均操作次数就是其对应子问题节点的检索概率全部乘以1,等同于其概率本身。这也就是为什么要进行加上所有节点的检索概率的原因。

在这里插入图片描述
在这里插入图片描述

所以在这个时候,我们已经搞清楚了最优检索二叉树的子问题的划分以及其平均操作次数的计算方法,那么接下来我们进行子问题中k取值的确定,子问题中不同的k的取值,也就是子问题根节点的选定对于整体子树的平均检索时间是不相同的,也就是说在子问题中可能存在一个最优的k的取值情况。

在这里插入图片描述

关于k的取值的极端情况:

在这里插入图片描述

我们进行一个实例来计算平均计算次数。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZymGkZ70-1633842713368)(../../../../typora_images/java数据结构与算法/tree/image-20211010125030787.png)]

对于这个公式解读一下,这也运用了递归的思想,将大问题细小化,从最小的问题进行计算求解,逐个击破求解。

在这里插入图片描述

在这里是以k取二为根节点,也就是说以B为根节点,将B的前部分节点连接在左子树,也就是:
在这里插入图片描述

再将剩下的归为右子树

在这里插入图片描述
将余下的划分为:

在这里插入图片描述

在m[3,5]的里面又可以划分为一个子问题。

通过这样的动态规划,进行子问题的划分,我们可以很方便的计算出其平均查找次数:
42713370)(../../../../typora_images/java数据结构与算法/tree/image-20211010130641569.png)]

  • 这里的1是最高层公式里面的w[i,j]也就是整体的概率之和(节点的概率和空隙的概率)为1。

计算的结果和我们通过计算检索数据的平均时间的数值是一样的,也就是说,运用递推方程能够更合理快速的计算出其检索二叉树的效率,也就是检索的平均时间,平均查找次数。

复杂性估计:

在这里插入图片描述

总结:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQJjWUsa-1633842713371)(../../../../typora_images/java数据结构与算法/tree/image-20211010130749633.png)]
取k=2仅仅是我们算法中进行最优值求解中的一个方向而已,之后也会进行k=3…5
的计算,然后再对相应的平均计算时间进行记录,最后将最优的k值从底层向上据记录下来,就求解出了最优解,

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最优检索二叉树 的相关文章

随机推荐

  • pm2入坑教程

    PM2入坑教程 一 使用场景 二 使用命令 2 1 安装pm2的命令 2 2 创建启动 2 3 查看命令 2 4 删除命令 2 5 停止命令 2 6 结束进程 一 使用场景 1 普通启动方式 node index js 关闭终端就结束进程
  • Windows下批处理管理Nginx应用程序

    每次更新完配置 通过命令行或者任务管理器来操作Nginx重启 操作起来 显得有点麻烦 下面脚本就是解决这个问题的 cls echo off set NGINX PATH d0 set NGINX DIR cd color 0a title
  • 微软:从“开源是毒瘤”到“我爱Linux”的20年

    整理 彭慧中 责编 屠敏 出品 CSDN ID CSDNnews 英国前首相帕麦斯顿曾说过 没有永远的朋友 也没有永远的敌人 只有永远的利益 这句话用来形容微软对于开源的态度正合适 在21世纪初 曾视开源为 毒瘤 并一度想将其毁灭的微软 现
  • 优化算法选择:SGD、SGDM、NAG、Adam、AdaGrad、RMSProp、Nadam

    目录 优化算法通用框架 SGD 系列 固定学习率的优化算法 SGD SGD with Momentum SGD M SGD with Nesterov Acceleration NAG 自适应学习率的优化算法 AdaGrad AdaDelt
  • 18. TypeScript 扩展全局变量类型

    TypeScript 扩展全局变量类型 1 扩展局部变量 可以直接使用接口对已有类型进行扩展 interface String double string String prototype double function return th
  • css学习——sass(6)

    第一步 全局安装 sass 在命令行工具 npm install g sass 查看版本 sass version 第二步 手动将sass 编译为css 1 创建一个test scss 2 在命令行终端 输入sass test scss t
  • AQS相关工实现类的使用及其原理

    文章目录 1 AQS 1 1 概述 1 2 自定义不可重入锁 2 ReentrantLock 2 1 非公平锁 2 1 1 加锁解锁流程 2 1 1 1 加锁失败 2 1 1 2 解锁竞争 2 2 可重入原理 2 3 可打断原理 2 3 1
  • 虚拟乒乓球连接不上服务器,虚拟乒乓球正版

    虚拟乒乓球正版 游戏画面场景设定的比较小清新 不过其中的内容设定是超级的精彩 极其逼真的玩家操作定能带给各位最为真实的游戏体验 这个过程你需要不断锻炼自己的水平 更得要击败尽可能多的对手 玩法难度可供选择 喜欢的玩家快快点击下载试玩吧 游戏
  • 解决jdbc连接本地mysql数据库时报错Caused by: java.net.UnknownHostException: mysql

    今天在写代码的时候遇到的问题 解决问题后记录下 The last packet sent successfully to the server was 0 milliseconds ago The driver has not receiv
  • Mali GPU OpenGL ES 应用性能优化--测试+定位+优化流程

    1 使用DS 5 Streamline定位瓶颈 DS 5 Streamline要求GPU驱动启用性能测试 在Mali GPU驱动中激活性能测试对性能影响微不足道 1 1 DS 5 Streamline简介 可使用DS 5 Streamlin
  • 解决VS中scanf()函数报错问题的四种方案(详细)

    scanf函数在VS中报错的主要原因是 scanf被认为不安全而被编译器默认设置为禁用 那么如何解决这个问题呢 法一 仅将函数scanf替换为scanf s即可 其他语法不变 但scanf s函数并不是C语言函数库里的标准函数 而是VS编译
  • Android中显示网页的多种方式

    在android中显示页面主要有两种方式 一种是在Activity里面直接显示网页 另一种是调用浏览器显示网页 方式不同 使用的方法也不同 下面我们分别讲解 一 在Activity里面直接显示网页 1 在Manifest xml文件里添加I
  • Ubuntu 安装anaconda后,自动进入base虚拟环境解决

    Ubuntu关闭anaconda自动进入base虚拟环境 在Ubuntu上安装完anaconda后 发现每次打开终端后都会自动进入到base的虚拟环境中去 虽然在这些环境下使用问题不大 但一些软件的安装在虚拟环境下有影响 每次使用conda
  • juc并发包整理

    目录 JUC提供了java并发编程需要的类 主要分几个大模块 1 原子类操作 2 锁 3 阻塞队列 4 并发集合 5 同步器 6 线程池 7组合式异步编程 JUC的作者Doug Lea神一样的人物 其中以上很多类的实现底层实现都是基于AQS
  • QPainter绘图工具的完善

    上一篇 QPainter实现简单的绘图程序 绘图工具 文章目录 前言 撤回功能的理解 拆分的理解 一 重绘函数的写法 二 绘制判断 三 橡皮擦 感谢各位的观看 前言 gitee工程地址 PaintTool 03 学习了简单的绘图工具后 程序
  • qt中菜单栏中添加快捷键

    使用技巧 在编辑好的qt的菜单中添加快捷键 具体添加菜单栏 可以参考博客 qt中菜单栏中实现第一个简单的打开功能 Littlehero 121的博客 CSDN博客 qt菜单栏打开文件 然后就是找到这个 或者是找到这个 双击动作 开始进行编辑
  • 算法提高 彩票 我只是觉得我的代码比较帅

    算法提高 彩票 时间限制 1 0s 内存限制 256 0MB 提交此题 问题描述 为丰富男生节活动 贵系女生设置彩票抽奖环节 规则如下 1 每张彩票上印有7个各不相同的号码 且这些号码的取值范围为 1 33 2 每次在兑奖前都会公布一个由七
  • Java基础-对象序列化

    对象序列化 作用 以内存为基准 把内存中的对象存储到磁盘文件中去 称为对象序列化 使用到的流是对象字节输出流 ObjectOutputStream package per mjn serializable import java io Se
  • Ubuntu下漏洞的修复流程

    最近需要修复cve漏洞 研究了如何在源码上修复漏洞 在这里记录一下 目录 I 介绍 漏洞和补丁 CVE漏洞 普通漏洞和CVE漏洞的区别 II 获取补丁 III 应用补丁 常见的打补丁工具 打补丁的步骤 patch的用法 I 介绍 首先介绍一
  • 最优检索二叉树

    最优检索二叉树 最优检索二叉树 抛出问题 算法的基本解决思路 空隙 检索数据的平均时间 小结 最优二叉检索树的实现算法分析 关于优化函数的递推方程 复杂性估计 总结 最优检索二叉树 抛出问题 算法的基本解决思路 空隙 所谓的空隙也就是查找的