当前位置: 首页 > news >正文

探索B-树系列

🌈前言🌈

        本文将讲解B树系列,包含 B-树,B+树,B*树,其中主要讲解B树底层原理,为什么用B树作为外查询的数据结构,以及B-树插入操作并用代码实现;介绍B+树、B*树。

📁常见的搜索结构

种类数据格式时间复杂度
顺序查找无要求O(N)
二分查找有序O(logN)
二叉搜索树无要求O(N)
二叉平衡树无要求O(logN)
哈希无要求O(1)

        以上数据结构适用于数据量不大的情况下,能够一次性存放在内存中,进行数据查找的场景。

        对内存进行访问是很快的,纳秒级别(10^-9)。但是同样时间内,访问磁盘的时间是很慢的,毫秒级别(10^-3)。

        从表格可以看出,高效的查找结构是二叉平衡树和哈希表,但是他们都有一定的缺点。

        对于二叉平衡树,时间复杂度还是很高,例如10亿的数据可能需要30次磁盘访问,这是难以接受的结果。        

        哈希表时间复杂度很低,但是哈希存在哈希冲突的问题,在某些极端场景下,某个位置冲突很多,导致访问次数剧增,也难以接受。

        因此,就有了B-树系列,通过压缩树的高度,来减少磁盘访问次数,提高对数据的访问速度。

📁 B树

 📂概念

        1970年,R.Bayer和E.mccreight提出了一种适合外查找的树,它是一种平衡的多叉树,称为B树。

一棵m阶(m>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:

 1. 根节点至少有两个孩子

 2. 每个分支节点都包含k-1个关键字和k个孩子,其中 ceil(m/2) ≤ k ≤ m ceil是向上取整函数

 3. 每个叶子节点都包含k-1个关键字,其中 ceil(m/2) ≤ k ≤ m

 4.  所有的叶子节点都在同一层

 5.  每个节点中的关键字从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域划分 

 6. 每个结点的结构为:(n,A0,K1,A1,K2,A2,… ,Kn,An)其中,Ki(1≤i≤n)为关键字,且Ki<Ki+1(1≤i≤n-1)。Ai(0≤i≤n)为指向子树根结点的指针。且Ai所指子树所有结点中的关键字均小于Ki+1。n为结点中关键字的个数,满足ceil(m/2)-1≤n≤m-1。

 📂 插入

插入流程:

        1. 如果树为空,直接插入新节点,作为根节点。

        2. 树非空,找到待插入元素在树的插入位置(维护B树的性质,一定要在叶子节点中插入)

        3.  找到元素要插入的节点cur后,插入元素,注意元素一定是从小到大排序的。

        4. 检测该节点cur是否满足B树性质:即节点中元素个数是否等于M,如果小于则满足

        5. 如果不满足,就进行分裂:

                a. 申请新节点brother。

                b. 找到cur节点中间位置mid,mid之后的元素和孩子节点移到brother中。

                c. mid元素及brother节点插入到上层节点parent,重复上述操作,指导节点满足B树性质。

        一下代码是为了更好理解 B-树插入流程,并不是为了造更好的轮子,但是整体结构上大致是一样的。

template<class K, int M>
struct BTreeNode
{typedef BTreeNode<K, M> Node;K _keys[M];Node* _subs[M + 1];size_t _n = 0;Node* _parent = nullptr;BTreeNode(){for (int i = 0; i < M; ++i){_keys[i] = K();_subs[i] = nullptr;}_subs[M] = nullptr;}
};template<class K,int M = 3>
class BTree
{typedef BTreeNode<K, M> Node;
public:pair<Node*, int> Find(const K& key){Node* parent = nullptr;Node* cur = _root;while (cur){size_t i = 0;while(i < cur->_n){if (key < cur->_keys[i]){break;}else if (key > cur->_keys[i]){++i;}else{return make_pair(cur, i);}}parent = cur;cur = cur->_subs[i];}return make_pair(parent, -1);}void insertKey(Node* node , const K& key , Node* child){int end = node->_n - 1;while (end >= 0){if (node->_keys[end] >= key){node->_keys[end + 1] = node->_keys[end];node->_subs[end + 2] = node->_subs[end + 1];--end;}else{break;}}node->_keys[end + 1] = key;node->_subs[end + 2] = child;if (child)child->_parent = node;++node->_n;}bool insert(const K& key){if (_root == nullptr){_root = new Node();_root->_keys[0] = key;_root->_n = 1;return true;}//去重pair<Node*, int> it = Find(key);if (it.second != -1){return false;}Node* cur = it.first;insertKey(cur, key, nullptr);//节点未满,可以继续存放关键码 , 不需要分裂直接返回if (cur->_n != M){return true;}//节点满了,向左 向上分裂//1. 找到节点数据域中间位置//2. 给一个新节点,将中间位置以后数据移动到brother //3. 中间位置数据移动到父节点//4. 节点连接while (cur->_n == M){Node* brother = new Node;size_t mid = cur->_n >> 1;int i = mid + 1, j = 0;while (i < M){//cur 把关键字及其左孩子给brotherbrother->_keys[j] = cur->_keys[i];brother->_subs[j++] = cur->_subs[i];cur->_keys[i] = K();cur->_subs[i] = nullptr;++i;}//最后处理一下最右位置的孩子brother->_subs[j] = cur->_subs[i];cur->_subs[i] = nullptr;K midKey = cur->_keys[mid];cur->_keys[mid] = K();brother->_n = j;cur->_n = cur->_n - j - 1;Node* parent = cur->_parent;if (parent == nullptr){//分裂的是根节点_root = new Node;_root->_keys[0] = midKey;_root->_subs[0] = cur;_root->_subs[1] = brother;_root->_n = 1;cur->_parent = _root;brother->_parent = _root;}else{//不是根节点 处理完当前层后,继续往上处理insertKey(parent, midKey, brother);cur = parent;parent = cur->_parent;}}return true;}private:Node* _root = nullptr;
};

        B-树效率是很高的,大多数场景下,M设为1024,因此对于10亿的数据量,我们只需要3次磁盘访问即可,对比二叉平衡树的十几次的磁盘访问是很快的,大大减少了读取磁盘的次数。

📁 B+树

        B+树是B树的变形,是在B树基础上优化的多路平衡搜索树,B+树的规则跟B树基本类似,但是又在B树的基础上做了以下几点改进优化:

        1. 分支节点的子树指针与关键字个数相同
        2. 分支节点的子树指针p[i]指向关键字值大小在[k[i],k[i+1])区间之间
        3. 所有叶子节点增加一个链接指针链接在一起
        4. 所有关键字及其映射数据都在叶子节点出现

B+树的特性:
        1. 所有关键字都出现在叶子节点的链表中,且链表中的节点都是有序的。
        2. 不可能在分支节点中命中。
        3. 分支节点相当于是叶子节点的索引,叶子节点才是存储数据的数据层。

B+树的分裂:
        当一个结点满时,分配一个新的结点,并将原结点中1/2的数据复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂只影响原结点和父结点,而不会影响兄弟结点,所以它不需要指向兄弟的指针。

📁 B*树

        B*树是B+树的变形,在B+树的非根和非叶子节点再增加指向兄弟节点的指针。

B*树的分裂:
        当一个结点满时,如果它的下一个兄弟结点未满,那么将一部分数据移到兄弟结点中,再在原结点插入关键字,最后修改父结点中兄弟结点的关键字(因为兄弟结点的关键字范围改变了);如果兄弟也满了,则在原结点与兄弟结点之间增加新结点,并各复制1/3的数据到新结点,最后在父结点增加新结点的指针。
        所以,B*树分配新结点的概率比B+树要低,空间使用率更高;

📁 总结

        B树:有序数组+平衡多叉树;
        B+树:有序数组链表+平衡多叉树;
        B*树:一棵更丰满的,空间利用率更高的B+树。

        此外,B-树最常见的应用就是用来做索引。MySQL官方对索引的定义为:索引(index)是帮助MySQL高效获取数据的数据结构,简单来说:索引就是数据结构。

相关文章:

探索B-树系列

&#x1f308;前言&#x1f308; 本文将讲解B树系列&#xff0c;包含 B-树&#xff0c;B树&#xff0c;B*树&#xff0c;其中主要讲解B树底层原理&#xff0c;为什么用B树作为外查询的数据结构&#xff0c;以及B-树插入操作并用代码实现&#xff1b;介绍B树、B*树。 &#x1f4…...

【SpringBoot实现全局API限频】 最佳实践

在 Spring Boot 中实现全局 API 限频&#xff08;Rate Limiting&#xff09;可以通过多种方式实现&#xff0c;这里推荐一个结合 拦截器 Redis 的分布式解决方案&#xff0c;适用于生产环境且具备良好的扩展性。 方案设计思路 核心目标&#xff1a;基于客户端标识&#xff08…...

esxi添加内存条因为资源不足虚拟机无法开机——避坑

exsi8.0我加了6根内存条&#xff0c;然后将里面的ubuntu的内存增加 haTask-2-vim.VirtualMachine.powerOn-919 描述 打开该虚拟机电源 虚拟机 ub22 状况 失败 - 模块“MonitorLoop”打开电源失败。 错误 模块“MonitorLoop”打开电源失败。无法将交换文件 /vmfs/volumes…...

实验8 配置标准访问控制列表IPv4 ACL

实验8 配置标准访问控制列表IPv4 ACL 一&#xff0e;实验目的 1、掌握IPv4 ACL工作方式和工作过程。 2、掌握定义编号和命名的标准 IPv4 ACL 的方法。 3、掌握接口和VTY下应用标准IPv4 ACL的方法。 二&#xff0e;实验内容 配置IPv4 ACL的实验拓扑如下图所示。 图1 实验拓扑…...

5.7.2 进度管理

文章目录 进度管理Gantt图PERT图 进度管理 进度安排&#xff1a;通过将项目分解成多个活动&#xff0c;分析活动间的依赖关系&#xff0c;估算工作量&#xff0c;分配资源&#xff0c;制定活动时序。 Gantt图 Gantt图横坐标表示时间&#xff0c;纵坐标表示不同任务。使用一条条…...

Android新版高斯模糊(毛玻璃)官方实现,Kotlin

Android新版高斯模糊(毛玻璃)官方实现&#xff0c;Kotlin 从Android 12开始&#xff0c;Android官方API支持高斯模糊(毛玻璃)效果。关键是通过RenderEffect实现。 https://developer.android.com/reference/android/graphics/RenderEffecthttps://developer.android.com/refer…...

b站——《【强化学习】一小时完全入门》学习笔记及代码(1-3 多臂老虎机)

问题陈述 我们有两个多臂老虎机&#xff08;Multi-Armed Bandit&#xff09;&#xff0c;分别称为左边的老虎机和右边的老虎机。每个老虎机的奖励服从不同的正态分布&#xff1a; 左边的老虎机&#xff1a;奖励服从均值为 500&#xff0c;标准差为 50 的正态分布&#xff0c;即…...

使用开源项目xxl-cache构建多级缓存

xxl-cache简介 官网地址&#xff1a;https://www.xuxueli.com/xxl-cache/ 概述 XXL-CACHE 是一个 多级缓存框架&#xff0c;高效组合本地缓存和分布式缓存(RedisCaffeine)&#xff0c;支持“多级缓存、一致性保障、TTL、Category隔离、防穿透”等能力&#xff1b;拥有“高性…...

分层解耦-三层架构

controller: 控制层&#xff0c;接收前端发送的请求&#xff0c;对请求进行处理&#xff0c;并响应数据。 service: 业务逻辑层&#xff0c;处理具体的业务逻辑。 dao: 数据访问层(Data Access Object)(持久层)&#xff0c;负责数据访问操作&#xff0c;包括数据的增、删、改…...

简化的动态稀疏视觉Transformer的PyTorch代码

存一串代码&#xff08;简化的动态稀疏视觉Transformer的PyTorch代码&#xff09; import torch import torch.nn as nn import torch.nn.functional as F class DynamicSparseAttention(nn.Module): def __init__(self, dim, num_heads8, dropout0.1): super().__init__()…...

掌握 PHP 单例模式:构建更高效的应用

在 PHP 应用开发中&#xff0c;资源的高效管理至关重要。单例模式是一种能够帮助我们实现这一目标的设计模式。本文将深入探讨单例模式的概念、工作原理以及在 PHP 项目中何时应该&#xff08;或不应该&#xff09;使用它。 什么是单例模式&#xff1f; 单例模式是一种设计模…...

今日AI和商界事件(2025-02-11)

今日AI大事件主要包括以下几个方面&#xff1a; 一、行业竞购与合作变动 马斯克组团竞购OpenAI 据《华尔街日报》报道&#xff0c;马斯克率投资者财团出价974亿美元竞购OpenAI&#xff0c;欲使其回归开源公益使命。xAI支持此次竞购&#xff0c;若成功&#xff0c;xAI或与OpenA…...

ArcGIS Pro批量创建离线服务sd包

背景&#xff1a; 主要针对一个工程内有多个地图框项&#xff1a; 处理方法&#xff1a;通过Python脚本处理打包。 运行环境 在Pro的Python环境中去运行编写的Python脚本。 Python 脚本参考 import arcpy import os# Set output file names outdir r"d:\data\out&…...

R语言 文本分析 天龙八部

起因, 目的: 前面有人对 “倚天屠龙记” 进行分析,我这里只是进行模仿而已。 完整的文件, 已经绑定了,反正读者可以找一下。 案例背景 小说《天龙八部》是金庸先生所著的武侠小说,也是“射雕三部曲”的前传。全书共50章,字数超过一百万字。故事发生在北宋末年,以大理…...

【AI论文】Visual Instruction Tuning

文献核心目标 作者的目标是通过多模态指令微调(Visual Instruction Tuning)来训练一个通用的视觉助手,使其能够理解用户的语言指令并与视觉内容结合完成任务。例如,用户可以上传图片并提出问题,模型根据图片内容作出回答。 1. 引言 什么是多模态交互?为什么重要? 人类…...

产品详情页中 品牌官网详情 对应后端的字段是 detail

文章目录 1、在这个Vue代码中&#xff0c;品牌官网详情 对应后端的字段是 detail2、品牌官网详情 功能相关的代码片段3、export const productSave (data: any) >4、ProductController5、ProductDto 类6、ProductApiService 1、在这个Vue代码中&#xff0c;品牌官网详情 对…...

vue知识点2

1.methods和mounted的区别 methods是定义方法&#xff0c;不涉及到调用 mounted涉及到操作 所以methods后面是&#xff1a;&#xff0c;mounted后面是&#xff08;&#xff09; 2.介绍一下emit的用法 如果子控件要调用父页面的方法&#xff0c;在父页面的子控件引用处&…...

使用 mkcert 本地部署启动了 TLS/SSL 加密通讯的 MongoDB 副本集和分片集群

MongoDB 是支持客户端与 MongoDB 服务器之间启用 TLS/SSL 进行加密通讯的, 对于 MongoDB 副本集和分片集群内部的通讯, 也可以开启 TLS/SSL 认证. 本文会使用 mkcert 创建 TLS/SSL 证书, 基于创建的证书, 介绍 MongoDB 副本集、分片集群中启动 TLS/SSL 通讯的方法. 我们将会在…...

荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测

目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测&#xff1a; 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…...

利用HTML和css技术编写学校官网页面

目录 一&#xff0c;图例展示 二&#xff0c;代码说明 1&#xff0c;html部分&#xff1a; 【第一张图片】 【第二张图片】 【第三张图片】 2&#xff0c;css部分&#xff1a; 【第一张图片】 【第二张图片】 【第三张图片】 三&#xff0c;程序代码 一&#xff0c;…...

易语言Easy Programming Language

E易语言 EF 易语言.飞场 EPL EF 我心易飞扬! Elogo 易乐谷我的程序我来写&#xff01; Easy Programming Language Elogo 未来的小程序员&#xff01;易语言运行时环境检验报告 自有编辑器、自带数据库、本土化支持 易语言系统全部自行设计开发。自有编译器。所编译目的程序运…...

支付宝安全发全套解决方案

产品价值 ● 通过支付宝的资金能力&#xff0c;让服务商机构通过信息流驱动资金流&#xff0c;在不碰触客户企业资金的同时&#xff0c;为客户企业完成转账。账目清晰&#xff0c;无合规和资质风险。 ● 为服务商提供全链路的资金流动明细信息&#xff0c;服务商可以将这些信息…...

如何通过腾讯 ima.copilot 训练自己的知识库

如何通过腾讯 ima.copilot 训练自己的知识库 在信息爆炸的时代&#xff0c;拥有一个专属的知识库&#xff0c;能让我们在学习、工作中快速获取所需信息&#xff0c;极大地提升效率。腾讯推出的 AI 智能工作台 ima.copilot&#xff0c;为我们打造个人知识库提供了便利。今天&am…...

本地部署DeepSeek-R1(Mac版)

本地部署DeepSeek-R1&#xff08;Mac版&#xff09; 前言&#xff1a;过年这段时间&#xff0c;DeepSeek火遍全球&#xff0c;但遭受黑客攻击&#xff0c;10次对话基本9次都是服务器繁忙&#xff0c;请稍后重试。那么&#xff0c;本地部署整起来 总体来说&#xff0c;本地部署…...

uniapp 编译生成鸿蒙正式app步骤

1&#xff0c;在最新版本DevEco-Studio工具新建一个空项目并生成p12和csr文件&#xff08;构建-生成私钥和证书请求文件&#xff09; 2&#xff0c;华为开发者平台 根据上面生成的csr文件新增cer和p7b文件&#xff0c;分发布和测试 3&#xff0c;在最新版本DevEco-Studio工具 文…...

C++STL与内存管理总结

1&#xff1a;内存管理方面&#xff1a;涉及分配&#xff08;请求&#xff09;与释放&#xff0c;主要分为 静态内存&#xff0c;自动存储期&#xff08;栈内存&#xff09;、动态内存分配&#xff08;堆内存&#xff09;以及智 能指针系列&#xff0c;之所以重要&#xff0c;因…...

【文本处理】如何在批量WORD和txt文本提取手机号码,固话号码,提取邮箱,删除中文,删除英文,提取车牌号等等一些文本提取固定格式的操作,基于WPF的解决方案

企业的应用场景 数据清洗&#xff1a;在进行数据导入或分析之前&#xff0c;往往需要对大量文本数据进行预处理&#xff0c;比如去除文本中的无关字符&#xff08;中文、英文&#xff09;&#xff0c;只保留需要的联系信息&#xff08;手机号码、固话号码、邮箱&#xff09;。…...

算法跟练第十弹——栈与队列

文章目录 part01 逆波兰表达式求值part02 滑动窗口最大值part03 前 K 个高频元素归纳&#xff1a;将字符串转转换成整数&#xff1a;LinkedListMap遍历优先级队列的比较器 跟着代码随想录刷题的第十天。 代码随想录链接&#xff1a;代码随想录 part01 逆波兰表达式求值 题目链接…...

计算机毕业设计——Springboot的校园新闻网站

&#x1f389;**欢迎来到琛哥的技术世界&#xff01;**&#x1f389; &#x1f4d8; 博主小档案&#xff1a; 琛哥&#xff0c;一名来自世界500强的资深程序猿&#xff0c;毕业于国内知名985高校。 &#x1f527; 技术专长&#xff1a; 琛哥在深度学习任务中展现出卓越的能力&a…...

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…...

C# ASP.NET 介绍

.NET学习资料 .NET学习资料 .NET学习资料 一、概述 ASP.NET是由微软创建的一个开源 Web 框架&#xff0c;用于使用.NET 构建现代化的 Web 应用程序和服务。它为开发者提供了一套丰富的工具、库和编程模型&#xff0c;使得创建功能强大、高效且安全的 Web 应用变得更加容易。…...

Django中select_related 的作用

Django中这句代码Dynamic.objects.select_related(song)是什么意思&#xff1f; 在 Django 中&#xff0c;这句代码&#xff1a; Dynamic.objects.select_related(song) 的作用是 在查询 Dynamic 模型的同时&#xff0c;预加载 song 关联的外键对象&#xff0c;从而减少数据…...

MyBatis常见知识点

#{} 和 ${} 的区别是什么&#xff1f; 答&#xff1a; ${}是 Properties 文件中的变量占位符&#xff0c;它可以用于标签属性值和 sql 内部&#xff0c;属于原样文本替换&#xff0c;可以替换任意内容&#xff0c;比如${driver}会被原样替换为com.mysql.jdbc. Driver。 一个…...

CentOS 安装 Docker

一、使用官方安装脚本自动安装 安装命令如下&#xff1a; curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 也可以使用国内 daocloud 一键安装命令&#xff1a; curl -sSL https://get.daocloud.io/docker | sh 二、手动安装 卸载旧版本 较旧的 Do…...

【sqlite】python操作sqlite3(含测试)

个人小项目或者小团队&#xff0c;sqllite很适用&#xff0c;数据库封装操作如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-08 13:57 # Author : duxiaowei # File : connect_sqllite.py # Software: PyCharm """ sqllite操作, …...

PTC Windchill介绍

以下内容摘自PTC的Windchill介绍材料&#xff0c;确有其用&#xff0c;摘录一些&#xff1a; 存储和搜索产品信息 所有产品信息的中央存储库。同样的&#xff0c;对于产品相关内容&#xff0c;例如 CAD 模型、文档、技术插图、嵌入式软件、计算和要求规范&#xff0c;都有一个…...

3.矩阵分解技术在推荐系统中的应用

接下来我们将深入探讨矩阵分解技术在推荐系统中的应用。矩阵分解是一种强大的技术&#xff0c;可以有效地处理数据稀疏性问题&#xff0c;并提高推荐系统的性能。在这一课中&#xff0c;我们将介绍以下内容&#xff1a; 矩阵分解的基本概念奇异值分解&#xff08;SVD&#xff…...

visual studio 在kylin v10上跨平台编译时c++标准库提示缺少无法打开的问题解决

情况1&#xff1a;提示无法打开 源文件 "string"之类导致无法编译 情况2:能编译&#xff0c;但无法打开这些库文件或标准库使用提示下划红色问题 解决方案&#xff1a; 一、通过工具->选项->跨平台里&#xff0c;在“远程标头IntelliSense管理器”更新下载一下…...

TextWebSocketHandler 和 @ServerEndpoint 各自实现 WebSocket 服务器

TextWebSocketHandler 和 ServerEndpoint 都可以用于实现 WebSocket 服务器&#xff0c;但它们属于不同的技术栈&#xff0c;使用方式和功能有一些区别。以下是它们的对比&#xff1a; 1. 技术栈对比 特性TextWebSocketHandler (Spring)ServerEndpoint (Java EE/JSR-356)所属框…...

一种非完全图下的TSP求解算法

序 旅行商问题(Traveling Salesman Problem,简称TSP)是组合优化中的一个经典问题,就是给定一组城市和城市之间的距离,找到一条最短路径使得每个城市只被访问一次后返回到起点。 一些传统的解法都是基于完全图的,我在网上也很少找到非完全图的解法,非完全图应该在实际应…...

文件操作(1.文件资源上传到MinIO 2.文件资源保存在数据库中)

目录 本文提供文件操作接口的实现(上传下载) 附件资源表实体类 具体代码实现 上传到MinIO服务器 pom依赖 yml配置 MinIO配置 服务实现类 保存到数据库 本文提供文件操作接口的实现(上传下载) 附件资源表实体类 Data AllArgsConstructor NoArgsConstructor EqualsAndHa…...

deepseek模型技术优势研究

1.1 混合专家模型&#xff08;MoE&#xff09;架构 DeepSeek 模型采用了混合专家模型&#xff08;Mixture-of-Experts&#xff0c;MoE&#xff09;架构&#xff0c;这一架构在大规模预训练与下游应用中展现了显著的计算资源利用效率优势。MoE 架构的基本思想是在传统 Transfor…...

项目6:基于大数据校园一卡通数据分析和可视化

1、项目简介 本项目是基于大数据的清华校园卡数据分析系统&#xff0c;通过Hadoop&#xff0c;spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析&#xff0c;并通过Web后端和可视化前端展示结果。项目运行便捷&…...

搭建Spark集群(CentOS Stream 9)

零、资源准备 虚拟机相关: VMware workstation 16:虚拟机/vmware_16.zip(建议选择vmware_17版本)CentOS Stream 9:虚拟机/CentOS-Stream-9-latest-x86_64-boot.iso(安装包小,安装时需要联网下载)/ 虚拟机/CentOS-Stream-9-latest-x86_64-dvd1.iso(安装包大)JDK jdk1.8:…...

leetcode 2466. 统计构造好字符串的方案数

题目如下 数据范围 本题就是加了马甲的跳格子问题即一次能选择跳zero格或者one格(注意这两个不是定值&#xff0c;不是翻译成0和1它们只是代表能跳几格)我们令f(i)为从第0格跳到i格的路径数(也就是好串有几个)显然如果存在的话&#xff1a; f(i) f(i - zero) f(i - one)。…...

Jupyter Notebook自动保存失败等问题的解决

一、未生成配置文件 需要在命令行中&#xff0c;执行下面的命令自动生成配置文件 jupyter notebook --generate-config 执行后会在 C:\Users\用户名\.jupyter目录中生成文件 jupyter_notebook_config.py 二、在网页端打开Jupyter Notebook后文件保存失败&#xff1b;运行代码…...

局域网内别的电脑怎么连接到对方的mysql数据库

要让局域网内的其他电脑连接到一台主机上的 MySQL 数据库,你需要进行一些配置,包括 MySQL 服务器的设置、权限调整,以及客户端连接的步骤。以下是详细的步骤说明: 1. 确保 MySQL 服务器允许远程连接 默认情况下,MySQL 服务器可能只允许本地连接(localhost)。你需要修改…...

flask和django的对比

Flask 和 Django 都是流行的 Python Web 框架&#xff0c;尽管它们都用于构建 Web 应用&#xff0c;但它们的设计理念和使用场景有所不同。以下是它们之间的一些对比&#xff1a; 1. 框架类型 Flask&#xff1a;微框架&#xff08;Micro-framework&#xff09;&#xff0c;意…...

基于 GEE 批量下载陆地植被净初级生产力 NPP 产品

目录 1 陆地植被净初级生产力&#xff08;NPP&#xff09; 2 完整代码 3 运行结果 1 陆地植被净初级生产力&#xff08;NPP&#xff09; 陆地植被净初级生产力&#xff08;NPP&#xff09;是指植物在单位时间单位面积上由光合作用产生的有机物质总量中扣除自养呼吸后的剩余…...

使用Deepseek ,怎么很好的与Deepseek 进行精准问答

与 DeepSeek 进行高效问答的关键在于 清晰表达需求、合理使用功能、灵活调整提问方式。以下是一些实用建议&#xff1a; 一、基础原则 明确问题 ✅ 清晰描述背景、目标和具体需求。 ❌ 避免模糊提问&#xff1a;“帮我写点东西”→ ✅“我需要一篇关于AI在医疗领域应用的500字…...