邓俊辉《数据结构》→ “2.6.5 二分查找(版本A)”之“成功查找长度”递推式推导

news2024/10/6 16:18:48

【问题描述】
邓俊辉的《数据结构(C++语言版)(第3版)》(ISBN:9787302330646)中,开始于第48页的“2.6.5 
二分查找(版本A)”内容在第50页详述了“成功查找长度”的递推式,但此递推式乍一看令人费解。故为了说明问题,进行一些约定并详述如下:
● 既然是二分查找,所以给定的序列必定是有序的。
● 不失一般性,约定有序序列的长度
\color{red} n=2^k-1,这样便可构建一个高度为 k 的的二分查找树。
● 设
C(k) 表示高度为 k 的满的二分查找树中所有元素的查找长度总和。此时,问题就可以用递归方法求解。即 k 层的满二叉树,可以转化为左右两个 k-1 层的满二叉树。 依据邓俊辉《数据结构(C++语言版)(第3版)》(ISBN:9787302330646)中“2.6.5 二分查找(版本A)”的算法陈述,可知:
(1)第 k 层的查找长度为2(也即 \color{red} C(1)=2);
(2)且稍加观察会发现左面的 k-1 层的子树所有元素的查找长度都会相对于以第 k-1 层为顶层时的查找长度多1(
左子树共多 \color{red} 2^{k-1}-1)。
(3)同样右面的 k-1 层的子树所有元素的查找长度都会相对于以第 k-1 层为顶层时的查找长度多2(
右子树共多 \color{red} 2\times (2^{k-1}-1))。
所以,根据递归算法的设计思想,需要把这些长度补上,共同构成 C(k)。


综上,可得 C(k) 的递推公式如下:
C(k)=[C(k-1)+(2^{k-1}-1)]+2+[C(k-1)+2\cdot (2^{k-1}-1)]
化简得:\color{red} C(k)=2\cdot C(k-1)+3\cdot 2^{k-1}-1

若令,\color{red} F(k)=C(k)-3k\cdot 2^{k-1}-1
则有:
F(1)=C(1)-3\cdot 1\cdot 2^{1-1}-1=2-3-1=-2 \\ F(k)=C(k)-3k\cdot 2^{k-1}-1=2\cdot C(k-1)+3\cdot 2^{k-1}-1-3k\cdot 2^{k-1}-1 \\ =2\cdot C(k-1)-2\cdot(3k\cdot2^{k-2}-3\cdot 2^{k-2})-2 \\ =2\cdot C(k-1)-2\cdot 3 \cdot (k-1) \cdot 2^{k-2}-2 \\ =2[C(k-1)-3 \cdot (k-1) \cdot 2^{k-2}-1] \\ =2\cdot F(k-1)

故利用上文得出的 \color{red} F(k)=2\cdot F(k-1),可进一步得出:
F(k)=2\cdot F(k-1)=2^2\cdot F(k-2)=2^3\cdot F(k-3)=\cdots \\ =2^{k-1}\cdot F(1)=-2^k

于是将 F(k)=-2^k 代入 F(k)=C(k)-3k\cdot 2^{k-1}-1 可得:
C(k)=F(k)+3k\cdot 2^{k-1}+1 \\ =-2^k+3k\cdot 2^{k-1}+1 \\ =(3k/2-1)\cdot (2^k-1)+3k/2

从而可得平均查找长度为:C(k)/(2^k-1)=3k/2-1+3k/2/(2^k-1)=3k/2-1+O(\varepsilon )
忽略掉低阶项、常数项、系数项,可得本版本的二分查找的平均查找长度的时间复杂度为:\color{red} O(1.5k)
​​​​​​​



【参考文献】
https://ask.csdn.net/questions/699067
https://www.bilibili.com/video/BV1C54y1L7JM/
https://www.bilibili.com/video/BV1C54y1L7JM/?p=76&vd_source=fea4f130ba05b1c873be1db0c639fc56
https://blog.csdn.net/hnjzsyjyj/article/details/133100051
https://blog.csdn.net/qq_33499861/article/details/105103708




 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

敏捷在建设项目中的应用

敏捷这个概念天然地和软件开发密不可分,因为在2001年由17位软件业的管理大师聚在一起举办一场具有历史里程碑意义的大会,确定了敏捷软件开发宣言和敏捷原则,软件开发就是敏捷的起源之地。 钱亮老师在ShineScrum捷行举办的第五届敏捷论坛&…

vue项目打包部署到服务器,报错。

这个是因为后端部署服务器时,名称没有对上,不是前端的问题,后端配置名称和前端的包名称保持一致就可以了。

pve虚拟lxc安装docker教程

目录 (一)前提1. 存在的问题2. 解决办法 (二)安装lxc系统1. 环境2. 镜像3. 安装流程 (三)ubuntu安装docker1. 不同版本docker介绍:2. 安装docker-ce3. 安装青龙4. 青龙的卸载更新 (四…

9.23统计学金融学(第一部分)

泊松分布 某事件在特定时间或空间中发生的次数。比如一天内中奖的个数,一个月内某机器损坏的次数等。 泊松概率的成立条件是在任意两个长度相等的区间中,时间发生的概率是相同的,并且事件是否发生都是相互独立的。 泊松概率既然表示事件在…

Python的安装教程(Windows)

简单理解就两个动作:安装python、安装PyCharm 我们要跟着做!!! 编辑器和编译器 编辑器和编译器是两个不同的概念。编辑器是一种编写代码的工具,方便人对程序的操作和管理。常见的编辑器有文本编辑器、网页编辑器、源…

python回文素数

这能有1和本身整除的整数叫素数;如一个素数从左向右和从右向左是相同的数,则该素数为回文素数。编程求出2-1000内的所有回文素数。 源代码: def sushu(n): for i in range(2,n//21): if n%i 0: return False r…

PZ-3B-70E2A-10、PZ-6B-220E2A-20电控比例压力流量驱动泵放大器

PZ-2B-35E1A-11、PZ-2B-35E2A-11、PZ-2B-35E3A-11、PZ-2B-45E1A-11、PZ-2B-45E2A-11、PZ-2B-45E3A-11、PZ-3B-70E1A-10、PZ-3B-70E2A-10、PZ-3B-70E3A-10、PZ-4B-70E1A-10、PZ-4B-70E2A-10、PZ-4B-70E3A-10、PZ-5B-130E1A-10、PZ-5B-130E2A-10、PZ-5B-130E3A-10、PZ-6B-180E1A-…

MySQL数据库入门到精通5--进阶篇(视图/存储过程/触发器)

4.视图/存储过程/触发器 4.1 视图 4.1.1 介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视 图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了…

windows系统将 CMD(命令提示符)添加到鼠标右键菜单

一、新建OpenCMDHere.reg文件 OpenCMDHere.reg Windows Registry Editor Version 5.00[HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCMDHere] "Open CMD Here" "Icon""C:\\WINDOWS\\system32\\cmd.exe"[HKEY_CLASSES_ROOT\Directory\Ba…

相机数据恢复!详细步骤解析(2023新版)

和朋友在外面旅游用相机拍了好多有意义的照片和视频,但是导入电脑后不知道是被我删除了还是什么原因,这些照片都不见了,请问有方法恢复吗?” 在数字摄影时代,我们依赖相机记录珍贵的瞬间。然而,相机数据丢失…

废料出售回收小程序开发制作方案

随着社会对环保意识的提高,废料回收已经成为一项备受关注的社会活动。许多人意识到将废料进行回收不仅可以保护环境,还可以获得一定的经济回报。因此,开发一款废料出售回收小程序具有重要意义。这个小程序将有助于简化废料交易流程&#xff0…

华为云云耀云服务器L实例评测|定时给微信群中推送每日新闻及生活小常识

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 目录 前言效果图前期准备 前言 你是否遇到过这样的场景: 自己的私域群或粉丝群,为了活跃群内气氛,每日早晨发送热点新闻至群中,供大家讨论自…

OpenHarmony应用分发运营体系

一、分发流程 图片来源:OpenHarmony官网 二、主要途径 更多 开鸿智谷在鸿OS 开发板 设备 润和HiHopeOS 开发板 设备 软通动力SwanLinkOS 开发板 设备 深开鸿KaiHongOS 开发板 设备 华为HarmonyOS AGC 18N 开放原子开源基金会OpenHarmony 底座基础

伯俊ERP与金蝶云星空对接集成表头表体组合查询打通应收单新增

伯俊ERP与金蝶云星空对接集成表头表体组合查询打通应收单新增 数据源平台:伯俊ERP 伯俊科技拥有近千人的团队、出色的本地化服务能力及强劲的研发创新实力,在深耕零售行业24年中,成功研发企业级ERP系统、OMS订单管理系统、门店收银系统、门店管理软硬件一…

打通谷歌办公软件 Bard与ChatGPT走差异化道路

时隔半年,曾被ChatGPT吊打的Bard发布重磅更新,打通了Gmail、Docs等谷歌办公应用全家桶的数据,支持一键转存AIGC内容至谷歌系的邮箱、文档、表格等应用程序中,还在对话页面加入“Google it”自核实功能,避免对话机器人的…

SOLIDWORKS特征冻结 防止意外更改模型

在日常的设计过程中,有的零件特征比较复杂,特别是具有曲面特征、纹理数据的模型,对于这些多特征的模型进行查看的时候,也很容易以外更改模型,如何避免这些呢?用特征冻结功能,防止意外更改模型。…

飞控姿态解算算法解析

姿态估计的作用? 姿态估计是飞控算法的一个基础部分,而且十分重要。为了完成飞行器平稳的姿态控制,首先需要精准的姿态数据作为控制器的反馈。 飞控姿态估计的难点? 姿态估计的一个难点主要是一般选用的惯性传感器,…

智能 BI 数据分析平台

智能BI平台 作者:猫十二懿 项目介绍 本项目是基于ReactSpring BootRabbitMQAIGC的智能BI数据分析平台。 访问地址:http://bi.kongshier.top AIGC :Artificial Intelligence Generation Content(AI 生成内容) 区别于传统的BI,数据…

如何使用ChatGPT构建一个Web应用程序?

围绕ChatGPT的最大卖点之一是它可以成为一种有效的编程工具。其想法是这样的:你用自然语言描述需求,该聊天机器人生成满足该需求的代码。但是ChatGPT在这方面到底有多好呢? 还有什么比亲自测试一下更好的方法呢?我们让ChatGPT从头…

uniapp小程序点击按钮直接退出小程序效果demo(整理)

点击按钮直接退出小程序 <navigator target"miniProgram" open-type"exit">退出小程序</navigator>