【数据结构】败者树的建树与比较过程
文章目录
- 前置知识
- 归并段
- 建树过程
- 比较过程
- 疑问
- 为什么比较次数减少了?
- 如果某个归并段的元素一直获胜,没有元素了怎么办?
- 处理方法 1
- 处理方法 2
前置知识
归并段
- 外部排序算法通常用于处理大规模数据,其中数据量远超过计算机内存的容量。由于内存无法一次性容纳全部数据,因此需要将数据划分为较小的片段进行排序,在排序过程中将这些片段合并成一个有序的序列
- 这些归并段内部是有序的,各个归并段之间无序
- 如图,有 3 个归并段,内部升序

建树过程
-
假设有 5 个节点,给这些节点编号

-
17 是 0 号节点,5 是 1 号节点,…,15 是 4 号节点
-
为每个节点创建一个根节点,根节点的值是其编号,叶子节点是值

-
从子树中任意挑选两个子树的根节点进行比较,比较对应的值,假设比较规则是:值小的胜出
本例中,初始有 5 棵子树 -
比较顺序是任意的,假设根节点为 0 和 1 对应子树进行比较,取出根节点对应的值,5 < 17,5 胜出
- 除去两棵子树的根节点后,胜者的根节点作为两棵子树的爷节点,败者的根节点作为两棵子树的父节点
- 即 0 作为父节点,1 作为爷节点

-
比较根节点为 3 和 4 对应子树,取出根节点对应的值,15 < 29,15 胜出
3 作为父节点,4 作为爷节点

-
比较根节点为 1 和 2 对应的子树,5 < 10,5 胜出
1 作为爷节点,2 作为父节点

-
比较根节点为 1 和 4 对应的子树,5 < 15,5 胜出
1 作为爷节点,4 作为 父节点

-
可以看出,根节点是 1,其对应的值是 5,也就是
{17, 5, 10, 29, 15}中的最小值,共比较 4 次
败者树构建完成
比较过程
-
将根节点对应的值进行输出,假设编号 1 所在的
归并段还有元素需要比较,是 44 -
败者树需要调整,将根节点重新和编号 1 对应的值进行组合

-
根节点为 0 和 1 的子树进行比较,17 < 44,17 胜出
0 作为爷节点,1 作为父节点

-
根节点为 0 和 2 的子树进行比较,10 < 17,10 胜出
2 作为爷节点,0 作为父节点

-
根节点为 2 和 4 的子树进行比较,10 < 15,10 胜出
2 作为爷节点,4 作为父节点

-
可以看出,根节点是 2,其对应的值是 10,也就是
{17, 44, 10, 29, 15}中的最小值,共比较 3 次,比建树时找到最小值所需的比较次数(5次)少
疑问
为什么比较次数减少了?
- 在刚才的例子中,44 没有和 4 的右子树进行比较,这是为什么呢?
-
败者树中,两棵子树的合并规则是:胜者根节点做爷节点,败者做父节点
因此,编号 3 是败者,编号 4 是胜者 -
新节点
x只需要和胜者y比较即可- 若 x < y,那么 x 可以做根节点,而
y做父节点 - 反之
y做根节点,而x做父节点
- 若 x < y,那么 x 可以做根节点,而
-
换句话说,在设定的比较规则中(值小的获胜),我们只关心获胜者(谁是最小的),而不关心节点比哪些节点大
-
有 2 个集合 A,B,我们想找到两个集合的最小值
A 集合的最小值是 x
B 集合的最小值是 y显然,要选出最小值,只要比较 x 和 y 即可,若 x < y,那么 x 就是 A 和 B 中最小的,y 比 A 中的哪些元素小,我们并不关心

-
-
如果某个归并段的元素一直获胜,没有元素了怎么办?
处理方法 1
-
记录归并段的元素个数,若某个归并段没有元素,则在输出其根节点对应的值后,移除这课子树
-
编号 1 对应的归并段没有元素了,那么输出 5,并移除 5 对应的子树,移除后的败者树被破坏了

-
0 和 2 需要重新比较

-
2 和 4 重新比较

-
败者树又构建好了(ヾ(•ω•`)o)

处理方法 2
-
可以填充一个“最大值”,保证所有元素都比最大值小,那么这个最大值就不会在接下来的比较中胜出
-
1 对应的 5 输出,而 1 合并的是 2 和 4

- 假设 999 是最大的值了,类似方法 1,调整一下败者树的结构

2 对应的 10 是 {17, 999, 10, 29, 15} 中的最小值
相关文章:
【数据结构】败者树的建树与比较过程
文章目录 前置知识归并段 建树过程比较过程疑问为什么比较次数减少了?如果某个归并段的元素一直获胜,没有元素了怎么办?处理方法 1处理方法 2 前置知识 归并段 外部排序算法通常用于处理大规模数据,其中数据量远超过计算机内存的…...
GlobalMapper---dem生成均匀分布的网格,或者均匀分布的点高程点
1打开DEM数据。点击工具栏上的Open Data File(s)按钮,打开DEM数据 2点击【Create Grid】按钮 3生成点 4导出格式xyz 5南方cass展点 6过滤抽稀...
k8s系列文章一:安装指南
前言 k8s是docker的升级版,可用于docker集群配置管理微服务 一、更新ubuntu系统版本 sudo apt update sudo apt upgrade二、添加GPG密钥(阿里源) 尽管我不知道gpg是个什么东西,反正跟着做就完了 curl https://mirrors.aliyun.com/kubernetes/apt/do…...
Pod 进阶
目录 1、资源限制 1.1 官网示例 1.2 CPU 资源单位 1.3 内存 资源单位 2、健康检查:又称为探针(Probe) 2.1 探针的三种规则 2.2 Probe支持三种检查方法 2.3 官网示例 3、扩展 pod的状态 3.1 Container生命周期 1、资源限制 当定义…...
Proteus仿真--12864LCD显示计算器键盘按键实验(仿真文件+程序)
本文主要介绍基于51单片机的12864LCD液晶显示电话拨号键盘按键实验(完整仿真源文件及代码见文末链接) 仿真图如下 本设计主要介绍计算器键盘仿真,按键按下后在12864液晶上显示对应按键键值 仿真运行视频 Proteus仿真--12864LCD显示计算器…...
pam_radius库的使用
一. 前言 我们知道,linux pam库是一系列的库,用于处理一些应用程序的认证工作,比如login程序。但是默认的pam库只是用于本地认证,也就是认证的用户名和密码存储在本机上。如果需要远程认证,比如向radius服务器认证&…...
qt6:无法使用setFontColor
问题描述 跟着C开发指南视频学习,但是发现无论是直接使用ui设计,还是纯代码都无法实现变更字体颜色的功能。图中显示,点击颜色控件后,文本框的文字加粗、下划线、斜体等才能设置,但是无法变更颜色。 此文提醒qt sty…...
竞赛 深度学习疫情社交安全距离检测算法 - python opencv cnn
文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖,适合作为竞赛…...
无声的世界,精神科用药并结合临床的一些分析及笔记(十)
目录 回 “ 家 ” 克服恐惧 奥沙西泮 除夕 酒与药 警告 离别 回 “ 家 ” 她的锥切手术进行的很顺利,按计划继续返回安定医院调节心理状态,病友们都盼着我们回“家”。当我俩跨入病区,大家都涌过来帮我们大包小包的拎着行李࿰…...
构建强大的Web应用之Django详解
引言: Django是一个功能强大且灵活的Python Web框架,它提供了一套完整的工具和功能,帮助开发者快速构建高效的Web应用。本篇文章将带您逐步了解Django的基本概念和使用方法,并通过实际的代码案例,帮助您从零开始构建自…...
Linux 之搭建 arm 的 qemu 模拟器
目录 1. Linux 之搭建 arm 的 qemu 模拟器 1. Linux 之搭建 arm 的 qemu 模拟器 OS: kali 1. 安装交叉编译工具、GDB 和 QEMU # sudo apt-get install qemu debootstrap qemu-user-static # sudo apt-get install qemu-system-arm # sudo apt-get install gdb-multiarch //支持…...
uinapp微信小程序隐私政策授权
🚀 隐私弹窗效果图: 1、启用隐私相关功能在manifest.json文件中配置 usePrivacyCheck: true "mp-weixin" : {"__usePrivacyCheck__" : true, },2、创建组件 <template><view><!-- 隐私政策弹窗 --><uni-popu…...
使用Java工作流简单介绍
本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…...
数字媒体技术基础之:ICC 配置文件
ICC 配置文件(也称为 ICC 色彩配置文件或 ICC 色彩描述文件)是由国际色彩联盟(International Color Consortium, ICC)制定的一种标准文件格式,用于在不同的设备和软件之间保持颜色的一致性。 ICC 配置文件包含有关设备…...
解析SD-WAN组网方式及应用场景,全面了解典型案例
随着企业业务高速发展,跨区域开展业务首要解决的难题是构建各站点能互联互通的网络,然而目前大多数企业在广域网优化的问题上依旧碰壁,主要原因是企业广域网面临的挑战并不能马上得到解决。 传统网络互联方案无论是IPsec还是专线,…...
中小学智慧校园电子班牌管理系统源码
智慧校园云平台电子班牌系统,利用先进的云计算技术,将教育信息化资源和教学管理系统进行有效整合,实现基础数据共享、应用统一管理。借助全新的智能交互识别终端和移动化教育管理系统,以考勤、课表、通知、家校互通等功能为切入点…...
日常踩坑-[sass]Error: Expected newline
在学习sass的时候,运行时发现报错 经过网上冲浪知道,原来在声明语言的时候 lang 不能声明为 sass ,而是 scss ,这就有点坑了 原因: scss是sass3引入进来的,scss语法有"{}“,”;"而sass没有,所以…...
UI设计感蓝色商务数据后台网站模板源码
蓝色商务数据后台网站模板是一款适合网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/20852点html...
二、计算机组成原理与体系结构
(一)数据的表示 不同进制之间的转换 R 进制转十进制使用按权展开法,其具体操作方式为:将 R 进制数的每一位数值用 Rk 形式表示,即幂的底数是 R ,指数为 k ,k 与该位和小数点之间的距离有关。当…...
MySQL-sql的优化
表的设计优化索引优化SQL语句优化主从复制、读写分离分库分表 表的设计优化(参考阿里开发手册) 比如设置合适的数值(tinyint int bigint),要根据实际情况选择 比如设置合适的字符串类型(char和varchar) char定长效率高,varchar可变长度,效…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
