news 2026/4/23 9:58:44

【数据结构】败者树、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/17 21:17:11

Agentic AI提示工程的商业价值:如何应对AI技术的快速迭代?

Agentic AI提示工程&#xff1a;破解AI快速迭代困局的商业密钥 一、引言&#xff1a;AI时代的“迭代焦虑”&#xff0c;你中招了吗&#xff1f; 凌晨3点&#xff0c;某电商公司AI产品经理小李还在办公室加班。上周刚上线的智能客服Agent&#xff0c;今天突然收到大量用户投诉—…

作者头像 李华
网站建设 2026/4/23 9:53:29

什么是基于大模型的智能体构建?

在人工智能迅速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已经从单纯的文本生成工具演变为推动新一代智能系统的核心引擎。基于大模型的智能体构建&#xff0c;正是这一技术浪潮中最具前景的方向之一。它不仅仅是让机器“说话”或“…

作者头像 李华
网站建设 2026/4/23 7:17:48

Java毕业设计-基于springboot开发的医院信管系统,从零到一构建项目,收藏这篇足够了

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示 1.开发说明2.需求分析3、系统功能结构 三、系统实现展示 1、系统功能模块2、管理员功能模块3、 医生功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的医院信管…

作者头像 李华
网站建设 2026/4/16 21:45:43

多线程核心:互斥与同步

在多线程开发中&#xff0c;互斥和同步是解决 “资源竞争” 与 “执行顺序” 问题的核心技术&#xff0c;本文结合原理 代码 图示详细解析。一、互斥&#xff08;Mutex&#xff09;&#xff1a;临界资源的排他性访问1. 基本概念临界资源&#xff1a;多线程中会被 “读写操作”…

作者头像 李华
网站建设 2026/4/19 11:48:17

选对老师,一次过!高项备考别再自己硬扛了!

选对老师&#xff0c;真的能改变备考的轨迹&#xff01;作为一个过来人&#xff0c;我太懂那种面对厚厚教材和抽象论文的无助感了。自己埋头苦学了大半年&#xff0c;知识点像一盘散沙&#xff0c;案例分析找不到逻辑&#xff0c;论文更是无从下手&#xff0c;差点就想放弃今年…

作者头像 李华
网站建设 2026/4/21 14:28:58

一文精通大数据行式存储的性能优化

一文精通大数据行式存储的性能优化&#xff1a;从原理到实战的全链路拆解 1. 引入与连接&#xff1a;为什么行式存储还需要优化&#xff1f; 1.1 一个真实的痛点场景 某电商平台的订单系统遇到了棘手问题&#xff1a; 运营同学要查用户「小A」最近30天的所有订单记录&#xff0…

作者头像 李华