news 2026/4/16 15:01:24

【数据结构】败者树、B树、排序、查找

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【数据结构】败者树、B树、排序、查找

目录

败者树(Loser Tree)

B树(B-Tree)

排序算法总结

查找算法总结


败者树(Loser Tree)

多路平衡归并排序(胜者树、败者树)算法详解 - C语言中文网

多路归并、败者树、置换-选择排序、最佳归并树 - guanyubo - 博客园

【数据结构】败者树的建树与比较过程-CSDN博客

(99+ 封私信 / 82 条消息) 多路归并排序的时候,为什么要采用败者树? - 知乎

项目内容
定义一种完全二叉树,用于在多路归并排序中快速选出最小(或最大)元素,减少比较次数。
核心思想每个非叶子节点记录“失败者”(即比较中较大的值),而胜者向上继续比较,最终根节点记录冠军(最小者)。
结构特点- 叶子节点:存放各归并段的当前元素
- 内部节点:记录失败者索引
- 根节点的父节点:记录冠军(最小者)
建树过程从最后一个叶子节点开始向上调整,依次比较兄弟叶子节点,失败者存入父节点,胜者继续向上。
调整过程当冠军输出后,从对应归并段读入新元素,沿路径向上与父节点比较,更新失败者和胜者。
优点比直接比较各归并段首元素更高效,每次调整只需log₂k次比较(k为归并路数)。
应用场景外部排序(多路归并)
408考点- 建树与调整过程
- 比较次数计算
- 与胜者树的区别(败者树无需记录胜者到中间节点)

B树(B-Tree)

项目内容
定义多路平衡查找树,常用于磁盘等外存数据存储。
性质1. 每个节点最多有 m 棵子树(m阶B树)
2. 根节点至少有两棵子树(除非为叶子)
3. 非根非叶节点至少有 ⌈m/2⌉ 棵子树
4. 所有叶子出现在同一层,不带信息(实际B+树叶子含信息)
节点结构(n, P₀, K₁, P₁, K₂, …, Kₙ, Pₙ)
n:关键字数;Kᵢ:关键字;Pᵢ:指向子树的指针
查找类似二叉查找树,在每个节点内顺序或二分查找,沿指针向下。
插入先查找插入位置,插入后若节点关键字数 > m-1,则分裂:中间关键字上移,左右分成两个节点。
删除1. 若在非叶节点,用后继覆盖再删后继
2. 删除后若关键字数 < ⌈m/2⌉-1,则向兄弟借或与兄弟合并
高度与性能高度 h ≤ logₘ((n+1)/2) + 1,查找、插入、删除磁盘I/O次数为 O(logₘn)
应用场景文件系统、数据库索引
408考点- B树定义与性质
- 插入、删除过程及分裂/合并
- 高度计算与磁盘I/O次数分析
- B树与B+树区别(B+树所有关键字在叶子,叶子链表连接)

(99+ 封私信 / 82 条消息) 图解:什么是B树?(心中有 B 树,做人要虚心)一文读懂B-树 - 知乎

数据结构:B树、B+树、B*树-CSDN博客

b树,b+树,b-树,红黑树详解一锅端 - 你的雷哥 - 博客园

排序算法总结

【总结】【数据结构】排序-CSDN博客

排序方法平均时间复杂度最坏时间复杂度空间复杂度稳定性适用场景
直接插入O(n²)O(n²)O(1)稳定小规模或基本有序
折半插入O(n²)O(n²)O(1)稳定减少比较次数,移动次数不变
希尔排序O(n¹·³)O(n²)O(1)不稳定中等规模,插入排序改进
冒泡排序O(n²)O(n²)O(1)稳定教学用,效率低
快速排序O(n log n)O(n²)O(log n)~O(n)不稳定大规模,内部排序,基于分治
简单选择O(n²)O(n²)O(1)不稳定教学用
堆排序O(n log n)O(n log n)O(1)不稳定大规模,适合取前k个
归并排序O(n log n)O(n log n)O(n)稳定外部排序、链表排序
基数排序O(d(n+r))O(d(n+r))O(n+r)稳定多关键字,位数固定
外部排序多路归并+败者树依赖磁盘I/OO(1)缓冲区稳定大文件排序
  • 时间/空间复杂度分析

  • 稳定性判断

  • 排序过程模拟(尤其是快排、堆排、归并)

  • 外部排序流程(生成初始归并段、多路归并、败者树优化)

查找算法总结

查找方法平均时间复杂度最坏时间复杂度空间复杂度特点
顺序查找O(n)O(n)O(1)无序或有序表,简单
折半查找O(log n)O(log n)O(1)有序顺序表,需随机存取
分块查找O(√n) ~ O(log n)O(n)O(1)块内无序、块间有序
二叉查找树O(log n)O(n)O(n)可能退化
平衡二叉树(AVL)O(log n)O(log n)O(n)插入删除需旋转
B树/B+树O(logₘ n)O(logₘ n)O(n)外存查找,m阶B树
哈希查找O(1)O(n)O(n)冲突影响性能

哈希表重点

  • 构造方法:直接定址、除留余数、平方取中等

  • 冲突处理:开放定址(线性探测、二次探测)、链地址法

  • 性能分析:ASL成功/失败、装填因子 α = n/m

  • 顺序/折半/分块查找的过程与ASL计算

  • BST/AVL的查找、插入、删除及旋转

  • B树查找、插入删除过程

  • 哈希函数设计、冲突处理、ASL计算

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/8 8:05:55

Python语言编程导论第八章 文件处理

内容提要概述文件的常见操作目录的常见操作一、概述数据的存储可以使用数据库&#xff0c;也可以使用文件。数据库保持了数据的完整性和关联性&#xff0c;且使用数据更安全、可靠。使用文件存储数据则非常简单、易用&#xff0c;不必安装数据库管理系统等运行环境。文件通常用…

作者头像 李华
网站建设 2026/4/15 9:43:48

力扣题目1创作思路

一.题目描述给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。你可以假设每种输入只会对应一个答案&#xff0c;并且你不能使用两次相同的元素。你可以按任意顺序返回答案。…

作者头像 李华
网站建设 2026/4/15 1:42:53

向 VictoriaMetrics 写入过去或未来时间戳指标的测试

公司使用推模式上传指标&#xff0c;有必要对“乱序问题进行”测试&#xff1a; 1. 使用推模式写入过去数据&#xff1a;只要在“保留周期”内即可写入成功&#xff0c;能够读取&#xff1b;&#xff08;写入1个月前的指标&#xff0c;保留周期41天&#xff09; 2. 使用推模式…

作者头像 李华
网站建设 2026/4/16 11:06:41

基于深度学习的水果检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)

视频演示 基于深度学习的水果检测系统1. 前言​ 随着计算机视觉技术的快速发展&#xff0c;基于深度学习的目标检测方法在农业、食品工业及日常生活中的应用不断拓展。水果检测作为其中的重要场景&#xff0c;不仅能为采摘、分拣、销售等环节提供自动化支持&#xff0c;也在智…

作者头像 李华
网站建设 2026/4/9 21:32:33

Android-Camera-为啥不移到packages/module

Camera 为何没有完全迁移到 packages/modules Camera 和 Audio 类似&#xff0c;是 Android 系统中最复杂、最集成的子系统之一&#xff0c;其未完全模块化的原因更为深刻。 一、Camera 系统的现状分布 当前架构层次 1. 应用层 (packages/apps/Camera2/) 2. 框架层 (frameworks…

作者头像 李华