B树与B+树全面解析
B树与B+树全面解析
- 前言
- 一、B 树的基本概念与结构特性
- 1.1 B 树的定义
- 1.2 B 树的结构特性
- 1.3 B 树的节点结构示例
- 二、B 树的基本操作
- 2.1 查找操作
- 2.2 插入操作
- 2.3 删除操作
- 三、B + 树的基本概念与结构特性
- 3.1 B + 树的定义
- 3.2 B + 树的结构特性
- 3.3 B + 树的节点结构示例
- 四、B 树与 B + 树的对比
- 五、B 树与 B + 树的应用场景
- 5.1 数据库索引
- 5.2 文件系统
- 5.3 其他场景
- 总结
前言
在数据存储与检索的领域中,B 树和 B + 树凭借出色的性能表现,成为数据库索引、文件系统等场景的核心数据结构。它们通过独特的多叉树结构和节点设计,有效减少了磁盘 I/O 操作次数,极大提升了数据查询效率。本文将深入剖析 B 树和 B + 树的结构特点、操作原理、性能差异及实际应用场景,结合丰富的图示与代码示例,帮助读者全面掌握这两种重要的数据结构。
一、B 树的基本概念与结构特性
1.1 B 树的定义
B 树是一种自平衡的多路搜索树,它允许每个节点拥有多个子节点和多个关键字。B 树的设计目标是为了高效地存储和检索数据,尤其是在磁盘等存储设备上,通过减少磁盘 I/O 操作来提高数据访问效率。
1.2 B 树的结构特性
-
节点关键字数量限制:B 树对每个节点的关键字数量有严格限制。假设 B 树的阶数为 m m m( m ≥ 2 m \geq 2 m≥2),除根节点外,每个非叶子节点至少包含 ⌈ m / 2 ⌉ − 1 \lceil m/2 \rceil - 1 ⌈m/2⌉−1个关键字,最多包含 m − 1 m - 1 m−1个关键字;根节点至少有 1 个关键字,最多有 m − 1 m - 1 m−1个关键字。
-
子节点数量关系:每个节点的子节点数量等于其关键字数量加 1。例如,若一个节点有 n n n个关键字,那么它就有 n + 1 n + 1 n+1个子节点。
-
关键字有序性:节点内的关键字按升序排列,且左子树所有节点的关键字小于该节点的关键字,右子树所有节点的关键字大于该节点的关键字。这种有序性保证了 B 树的搜索效率。
-
树的平衡性:B 树通过插入和删除操作时的节点分裂与合并,保持树的平衡,确保从根节点到任意叶子节点的路径长度大致相同,从而避免树结构退化,保证操作的高效性。
1.3 B 树的节点结构示例
以 C++ 代码定义 B 树节点结构如下:
// 定义B树节点结构
template <typename KeyType, int m>
struct BTreeNode {int n; // 节点中关键字的数量KeyType keys[m - 1]; // 存储关键字的数组BTreeNode* children[m]; // 存储子节点指针的数组bool leaf; // 标记是否为叶子节点BTreeNode() : n(0), leaf(true) {for (int i = 0; i < m; ++i) {children[i] = nullptr;}}
};
二、B 树的基本操作
2.1 查找操作
在 B 树中查找关键字时,从根节点开始,将待查找的关键字与节点内的关键字进行比较:
-
若找到相等的关键字,则查找成功。
-
若关键字小于节点内某个关键字,则进入对应的左子树继续查找。
-
若关键字大于节点内所有关键字,则进入最右侧的子树继续查找。
-
若遍历到叶子节点仍未找到,则查找失败。
2.2 插入操作
B 树的插入操作需要保证插入后树的结构特性。插入过程如下:
-
从根节点开始,找到合适的叶子节点插入关键字。
-
若插入后叶子节点的关键字数量未超过 m − 1 m - 1 m−1,则插入完成。
-
若插入后叶子节点关键字数量达到 m m m,则进行节点分裂:将节点中间的关键字上移到父节点,该节点分裂为两个节点,分别包含原节点的前半部分和后半部分关键字与子节点。若父节点也满了,则递归地对父节点进行分裂操作,直至根节点。若根节点分裂,则树的高度增加 1。
2.3 删除操作
B 树的删除操作较为复杂,需根据不同情况进行处理:
-
若待删除关键字在叶子节点且节点内关键字数量大于等于 ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉,直接删除该关键字。
-
若待删除关键字在叶子节点且节点内关键字数量等于 ⌈ m / 2 ⌉ − 1 \lceil m/2 \rceil - 1 ⌈m/2⌉−1,需
检查兄弟节点
:- 若兄弟节点关键字数量大于 ⌈ m / 2 ⌉ − 1 \lceil m/2 \rceil - 1 ⌈m/2⌉−1,则从兄弟节点借一个关键字,并调整父节点的关键字。
- 若兄弟节点关键字数量也等于 ⌈ m / 2 ⌉ − 1 \lceil m/2 \rceil - 1 ⌈m/2⌉−1,则将兄弟节点与当前节点合并,并删除父节点中对应的关键字。若父节点因此关键字数量不足,则递归向上处理。
-
若待删除关键字在非叶子节点,可将其替换为该节点左子树的最大关键字或右子树的最小关键字,然后在相应子树中删除该关键字。
三、B + 树的基本概念与结构特性
3.1 B + 树的定义
B + 树是 B 树的一种变形,它进一步优化了数据查询性能,特别适用于范围查询和数据库索引。
3.2 B + 树的结构特性
-
关键字分布:所有关键字都存储在叶子节点,非叶子节点仅存储用于索引的关键字,这些关键字是其对应子树中关键字的最大值(或最小值)。
-
叶子节点链表:叶子节点通过指针连接成一个有序链表,方便进行范围查询。从第一个叶子节点开始,依次遍历链表,可获取所有数据。
-
节点关键字数量限制:与 B 树类似,B + 树对节点关键字数量也有要求。除根节点外,每个非叶子节点至少包含 ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉个关键字,最多包含 m m m个关键字;根节点至少有 1 个关键字,最多有 m m m个关键字。叶子节点至少包含 ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉个关键字,最多包含 m m m个关键字。
-
查询特性:在 B + 树中进行查询时,若查找的关键字在非叶子节点,查询会继续向下,直到叶子节点。这保证了任何查询都需要从根节点到叶子节点的相同路径长度,查询性能更加稳定。
3.3 B + 树的节点结构示例
用 C++ 定义 B + 树节点结构如下:
// 定义B+树叶子节点结构
template <typename KeyType, int m>
struct BPlusTreeLeafNode {int n; // 节点中关键字的数量KeyType keys[m]; // 存储关键字的数组BPlusTreeLeafNode* next; // 指向下一个叶子节点的指针// 可添加指向数据记录的指针或其他相关数据BPlusTreeLeafNode() : n(0), next(nullptr) {}
};// 定义B+树非叶子节点结构
template <typename KeyType, int m>
struct BPlusTreeInternalNode {int n; // 节点中关键字的数量KeyType keys[m]; // 存储关键字的数组BPlusTreeInternalNode* children[m + 1]; // 存储子节点指针的数组BPlusTreeInternalNode() : n(0) {for (int i = 0; i < m + 1; ++i) {children[i] = nullptr;}}
};
四、B 树与 B + 树的对比
特性 | B 树 | B + 树 |
---|---|---|
关键字存储位置 | 非叶子节点和叶子节点都存储关键字 | 仅叶子节点存储关键字,非叶子节点用于索引 |
范围查询性能 | 需多次回溯,效率较低 | 可通过叶子节点链表快速遍历,效率高 |
插入删除复杂度 | 平均复杂度较低,极端情况可能导致较多调整 | 平均复杂度与 B 树相近,但调整更有规律 |
磁盘 I/O 次数 | 可能较多 | 相对较少,因为叶子节点存储所有数据 |
适用场景 | 适用于一般的文件系统和部分数据库索引 | 更适合数据库索引,尤其是范围查询频繁的场景 |
五、B 树与 B + 树的应用场景
5.1 数据库索引
B + 树是数据库索引的主流选择。在关系型数据库中,B + 树索引能够快速定位数据记录,无论是等值查询还是范围查询,都能提供高效的性能。例如,在 SQL 查询语句SELECT * FROM users WHERE age BETWEEN 18 AND 30
中,B + 树索引可以通过叶子节点链表快速找到满足条件的数据。
5.2 文件系统
B 树常用于文件系统的目录结构和元数据管理。通过 B 树的结构,文件系统可以快速查找文件和目录,并且在文件创建、删除和修改时,保持良好的性能和结构稳定性。
5.3 其他场景
在数据仓库、搜索引擎的倒排索引等场景中,B 树和 B + 树也有广泛应用,用于优化数据的存储和检索效率。
总结
B 树和 B + 树作为高效的数据结构,通过独特的设计在数据存储与检索领域发挥着重要作用。B 树凭借平衡的多叉树结构,在多种场景下提供稳定的性能;B + 树则针对范围查询进行优化,成为数据库索引的首选。理解它们的结构原理、操作特性和应用场景,对于开发高性能的存储系统、优化数据库查询等工作具有重要意义。
That’s all, thanks for reading!
图片均来自于网络, 感谢无私分享
觉得有用就点个赞、收进收藏夹吧!关注我,获取更多干货~
相关文章:
B树与B+树全面解析
B树与B树全面解析 前言一、B 树的基本概念与结构特性1.1 B 树的定义1.2 B 树的结构特性1.3 B 树的节点结构示例 二、B 树的基本操作2.1 查找操作2.2 插入操作2.3 删除操作 三、B 树的基本概念与结构特性3.1 B 树的定义3.2 B 树的结构特性3.3 B 树的节点结构示例 四、B 树与…...
代码随想录60期day41
完全背包 #include<iostream> #include<vector>int main() {int n,bagWeight;int w,v;cin>>n>>bagWeight;vector<int>weight(n);vector<int>value(n);for(int i 0;i <n;i){cin>>weight[i]>>value[i];}vector<vecotr&l…...
语言幻觉测试用例及相关策略总结
文章目录 语言幻觉测试用例及相关策略总结如何判断内容是否存在语言幻觉? 一、语言幻觉测试用例类型1.1 事实性错误测试用例 1:时效性强的事实用例 2:跨领域常识用例 3:动态变化的规则 **1.2 逻辑矛盾测试**用例 1:同一…...
云原生攻防1(基础介绍)
什么是云原生 云原生是一套技术体系和方法论。 云:表示应用程序位于云中 原生:表示应用程序从设计之初就考虑到云的环境,原生为云而设计,在云上以最佳状态运行。 CNCF(Cloud Native Compute Foundation) 是 Linux 基金会旗下的一个组织,主要作用是在推动以容器为中心的…...
云原生环境下的事件驱动架构:理念、优势与落地实践
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:从服务调用到事件流动的转变 随着云原生技术的兴起,软件架构正经历一场深刻变革。传统以请求响应为主的服务通信方式,在高度动态、分布式的云原生环境下暴露出诸多挑战:强同步耦合、高延迟链路…...
InternLM 论文分类微调实践(XTuner 版)
1.环境安装 我创建开发机选择镜像为Cuda12.2-conda,选择GPU为100%A100的资源配置 Conda 管理环境 conda create -n xtuner_101 python3.10 -y conda activate xtuner_101 pip install torch2.4.0cu121 torchvision torchaudio --extra-index-url https://downloa…...
kotlin Flow的技术范畴
Flow 是 Kotlin 中的技术,准确地说,它是 Kotlin 协程(Kotlin Coroutines)库的一部分,属于 Kotlin 的 异步编程范畴。 ✅ Flow 的归属与背景: 所属技术:Kotlin(由 JetBrains 开发&am…...
PyTorch图像建模(图像识别、分割和分类案例)
文章目录 图像分类技术:改变生活的智能之眼图形识别技术图像识别过程图像预处理图像特征提取 图像分割技术练习案例:图像分类项目源码地址实现代码(简化版)训练结果(简化版)实现代码(优化版&…...
系统安全应用
文章目录 一.账号安全控制1.基本安全措施①系统账号清理②密码安全控制 2.用户切换与提权①su命令用法②PAM认证 3.sudo命令-提升执行权限①在配置文件/etc/sudoers中添加授权 二.系统引导和登录控制1.开关机安全控制①调整bios引导设置②限制更改grub引导参数 三.弱口令检测.端…...
day53—二分法—搜索旋转排序数组(LeetCode-81)
题目描述 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转 ,使数组变为 [nums[k], nums[k1], ..., nu…...
力扣面试150题--从前序与中序遍历序列构造二叉树
Day 43 题目描述 思路(这题第一次没做出来,看了题解后理解) 做法:哈希表递归 首先复习一下前序遍历和中序遍历, 前序遍历:中左右,这个不仅是遍历树的路线,同时对一个对于一个前序遍…...
win10 上删除文件夹失败的一个原因:sqlYog 备份/导出关联了该文件夹
在尝试删除路径为.../bak/sql的文件时,系统提示无权限操作。然而,关闭SQLyog后,删除操作成功完成。这表明SQLyog可能正在占用该文件,导致删除权限受限。关闭SQLyog后,文件被释放,删除操作得以顺利进行。建议…...
卷java、基础2
内部类 了解 1. 成员内部类(了解) 2. 静态内部类(了解) 实例化的写法 局部内部类(看看就好) 局部内部类是定义在在方法中、代码块中、构造器等执行体中。 匿名内部类(重要) 1.先…...
从 “龟速” 到流畅,英国 - 中国 SD-WAN 专线让分公司直连总部系统
对于在英国设立总部、国内开设分公司的企业而言,分公司访问总部内网系统常面临网络延迟高、连接不稳定等问题。传统网络方案难以满足跨国数据传输需求,而英国 - 中国 SD-WAN 国际组网专线凭借创新技术,为企业搭建起高效稳定的网络桥梁。 SD-W…...
C++--综合应用-演讲比赛项目
需求 分析 1、初始化,生成演讲学生数组,打乱数组以便随机分组 2、每轮比赛后需要统计每个学生的胜场,以便决定进入下一轮和最终胜利的学生 代码实现 #pragma once#include<iostream> #include<string> #include<algorithm…...
简单实现网页加载进度条
一、监听静态资源加载情况 可以通过window.performance 对象来监听⻚⾯资源加载进度。该对象提供了各种⽅法来获取资源加载的详细信息。 可以使⽤performance.getEntries() ⽅法获取⻚⾯上所有的资源加载信息。可以使⽤该⽅法来监测每个资源的加载状态,计算加载时间…...
C语言——深入理解指针(一)
C语言——指针(一) 进入指针后,C语言就有了一定的难度,我们需要认真理解 指针(一) 1 .内存和地址 内存:程序运行起来后,要加载到内存中,数据的存储也是在内存中。 我…...
计算机组织原理第一章
1、 2、 3、 4、 5、 从源程序到可执行文件: 6、 7、 8、 8、...
upload-labs通关笔记-第12关 文件上传之白名单GET法
目录 一、白名单过滤 二、%00截断 1、%00截断原理 2、空字符 3、截断条件 (1)PHP版本 < 5.3.4 (2)magic_quotes_gpc配置为Off (3)代码逻辑存在缺陷 三、源码分析 1、代码审计 (1&…...
网络学习-epoll(四)
一、为什么使用epoll? 1、poll实质是对select的优化,解决了其参数限制的问题,但是其本质还是一个轮询机制。 2、poll是系统调用,当客户端连接数量较多时,会将大量的pollfd从用户态拷贝到内核态,开销较大。…...
uWSGI、IIS、Tomcat有啥区别?
uWSGI、IIS 和 Tomcat对比 以下是 uWSGI、IIS 和 Tomcat 的对比分析,包括它们的核心特性、适用场景和典型用例: 1. uWSGI 核心特性 • 定位:专为 Python 应用设计的应用服务器(支持 WSGI/ASGI 协议)。 • 协议支持&a…...
AI本地化服务的战略机遇与发展路径
一、市场机遇:线下商业的AI赋能真空 1. 需求侧痛点明确 实体商家面临线上平台25%-30%的高额抽成挤压利润,传统地推转化率不足5%,而AI驱动的精准营销可将获客成本降低60%以上。区域性服务商凭借对本地消费习惯的深度理解,能构建更精…...
游戏盾的功有哪些?
游戏盾的功能主要包括以下几方面: 一、网络攻击防护 DDoS攻击防护: T级防御能力:游戏盾提供分布式云节点防御集群,可跨地区、跨机房动态扩展防御能力和负载容量,轻松达到T级别防御,有效抵御SYN Flood、UD…...
C++开源库argh使用教程
概述 argh 是一个轻量级的 C 命令行参数解析库,只需要包含一个头文件即可使用。 github页面: https://github.com/adishavit/argh 基本用法 #include "argh.h" 创建argh::parser对象 使用parse方法解析命令行 argh::parser重载了括号运…...
万用表如何区分零线、火线、地线
普通验电笔只能区分火线,零线和地线是区分不出来的,那么,我们就需要使用万用表来进行区分!轻松搞定! 万用表操作步骤: 1、黑表笔插Com,红表笔接电压和电阻档,万用表打到交流电压750V档。 2、黑表…...
java配置webSocket、前端使用uniapp连接
一、这个管理系统是基于若依框架,配置webSocKet的maven依赖 <!--websocket--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 二、配…...
01、java方法
前面与c都很相似,于是我决定从这一章开始复盘java的学习 一、方法 方法的好处主要体现在使用方便,可以在多处调用,不必反复造轮子 1、方法的使用 这就是一个简单的方法创建: public class java0517 {public static int ret(int …...
springboot实现幂等性
一 增加注解 import java.lang.annotation.*;Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface ApiIdempotent { } 二 aop实现切面 import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSONObject; import…...
Flink 快速入门
本文涉及到大量的底层原理知识,包括运行机制图解都非常详细,还有一些实战案例,所以导致本篇文章会比较长,内容比较多,由于内容太多,很多目录可能展示不出来,需要去细心的查看,非常适…...
MySQL 8.0 OCP 英文题库解析(五)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题31~40 试题31:…...
lovart design 设计类agent的系统提示词解读
文章目录 lovart 设计agent介绍角色定义工作规范工具调用任务复杂度指南任务移交指南其他ref lovart 设计agent介绍 lovart作为设计agent,产品功能包括: 全链路设计能力:可以快速生成完整的品牌视觉方案,包括标志、配色、品牌规范…...
C++11特性
一.C的发展历史 C11是C的第二个主要版本,从C98起的重要更新,引入了大量更改,从C11起C规律的进行每3年更新一次。 二.列表初始化 2.1 C98和C11中的 { } 传统的C98中使用 { } 来进行列表初始化,结构体函数体都使用此类方法&…...
鸿蒙PC操作系统:从Linux到自研微内核的蜕变
鸿蒙PC操作系统是否基于Linux内核,需要结合其技术架构、发展阶段和官方声明综合分析。以下从多个角度展开论述: 一、鸿蒙操作系统的多内核架构设计 多内核混合架构 根据资料,鸿蒙操作系统(HarmonyOS)采用分层多内核架构,内核层包含Linux内核、LiteOS-m内核、LiteOS-a内核…...
用 RefCounted + WeakPtr 构建线程安全的异步模块
在 Chromium 的多线程异步编程中,合理管理对象生命周期非常关键。本文深入介绍 base::RefCountedThreadSafe 和 base::WeakPtr 的组合使用方法,并通过示例分析其使用要点及易踩的坑。 🌱 基础概念回顾 1. RefCountedThreadSafe<T> 是 …...
ElasticSearch 8.x 快速上手并了解核心概念
目录 核心概念概念总结 常见操作索引的常见操作常见的数据类型指定索引库字段类型mapping查看索引库的字段类型最高频使用的数据类型 核心概念 在新版Elasticsearch中,文档document就是一行记录(json),而这些记录存在于索引库(index)中, 索引名称必须是…...
2025.5.19总结
工作:今天回归了3个问题单,测需求提交两个问题。然后再工作中慢慢有了自己的一些成就感,觉得工作越来越有干劲,因为感觉自己在工作上能做得越来越好,无论是在沟通方面,还是与同事的关系上,感觉都…...
C++(25): 标准库 <deque>
目录 1、 核心概念 2. 基本语法 3. 特点 4. 特有成员函数 5. 内存与性能 6. 示例代码 7. 成员函数列表 8. 使用场景 9. 注意事项 1、 核心概念 双端队列(Double-Ended Queue,deque) 是一种允许在队列头部和尾部高效插入和删除元素的线性数据结构,同时支持随机访问。…...
[ 计算机网络 ] | 宏观谈谈计算机网络
(目录占位) 网络间通信,本质是不同的两个用户通信;本质是两个不同主机上的两个进程间通信。 因为物理距离的提升,就衍生出了很多问题。TCP/IP协议栈 / OSI七层模型,将协议分层,每一层都是为了…...
会议动态|第十五届亚太燃烧学术年会精彩探析
ASPACC 2025第十五届亚太燃烧学术年会5月19日在新加坡隆重召开,本届盛会,以“构建零碳和可持续未来”为主题,汇聚了来自亚太的2000余位专家学者进行学术交流。会议聚焦燃烧反应动力学、火焰传播、燃烧效率等方向。 千眼狼在会议上展示了高速摄…...
Dify-3:系统架构
系统架构 概述了 Dify 的系统架构,解释主要组件如何协同工作以提供大语言模型(LLM)应用开发平台。内容涵盖高层架构、部署选项、核心子系统和外部集成。 1. 整体架构 Dify 采用基于微服务的架构,将前端 Web 应用与后端 API 服务…...
使用 docker-volume-backup 备份 Docker 卷
docker-volume-backup 是一个用于备份 Docker 卷的工具,在 Windows 10 上使用它,你可以按照以下步骤操作: 1. 确保 Docker 环境已安装并正常运行 在 Windows 10 上,你需要安装 Docker Desktop for Windows。可以从 Docker 官方网…...
分布式与集群:概念、区别与协同
分布式与集群:概念、区别与协同 在分布式系统与云计算领域,分布式(Distributed)和集群(Cluster)是两个高频出现的核心概念。它们常被混淆,但本质上属于不同维度的设计思想。本文将从定义、分类、实际应用及协同关系四个层面,结合 Dubbo、Git、Hadoop 等典型案例,系统…...
Matlab简单优化模型应用
一、目的 掌握优化模型的建立方法,能够借助Matlab工具对建立的优化模型进行求解。 二、内容与设计思想 1、分析:某石油设备制造厂每月需要100套压缩机用于维护和运营石油开采设备。这些零件由工厂内部生产,每月生产500套,每批压缩机的生产…...
板凳-------Mysql cookbook学习 (四)
综合对比与选择建议 维度 PHP Java Python Ruby Perl 学习门槛 低(适合新手) 高(语法复杂) 低(语法简洁) 中(需理解 Rails 理念) 中(特殊语法…...
C语言学习笔记之条件编译
编译器根据条件的真假决定是否编译相关的代码 常见的条件编译有两种方法: 一、根据宏是否定义,其语法如下: #ifdef <macro> …… #else …… #endif例子: #include <stdio.h>//def _DEBUG_ //定义_DEBUG_ int main(…...
网络安全-等级保护(等保) 2-7 GB/T 25058—2019 《信息安全技术 网络安全等级保护实施指南》-2019-08-30发布【现行】
################################################################################ GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》包含安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管理制度、安全管理机构、安全管理人员、安…...
Android设备 显示充电速度流程
整体逻辑:设备充电速度的判断 系统通过读取充电器的最大电流(Current)与最大电压(Voltage),计算最大充电功率(Wattage),以此判断当前是慢充、普通充还是快充:…...
megatron——EP并行
1、专家并行(Expert Parallelism, EP)适用场景 定义: 专家并行是指在混合专家模型(Mixture of Experts, MoE)中,将不同的专家(即子模型)分配到不同的设备上,每个设备只负…...
如何轻松删除电脑上的文件(无法恢复文件)
如果您想清理电脑上的存储空间,您可能需要轻松删除电脑上的文件以释放空间。此外,如果您打算出售或捐赠您的旧电脑,永久删除您的文件至关重要,这可以保护您的隐私。无论如何,您需要一种有效且可靠的方法来从计算机中删…...
搭建一个永久免费的博客
搭建永久免费的博客(1)基本介绍 HugoStackGitHub GitHub GitHub GitHub Build and ship software on a single, collaborative platform GitHub 下载安装git Git - Downloads Edge插件authenticator 2fa client Settings->Password and auth…...