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

B树详解及其C语言实现

目录

一、B树的基本原理

二、B树操作过程图形化演示

三、B树的应用场景

四、C语言实现B树及示例

 五、代码执行结果说明

六、应用实例:文件系统目录索引

七、总结


一、B树的基本原理

B树(B-Tree) 是一种自平衡的树数据结构,专为高效处理磁盘或数据库中的大量数据而设计。它的核心特性是每个节点可以包含多个键和子节点指针,通过控制每个节点的最小/最大键数量,确保树的高度始终为对数级别。

B树的定义(以m阶B树为例)

     B树是一种多路搜索树,也被称为平衡多路查找树。与二叉搜索树不同,B树的每个节点可以拥有多个子节点和键值。B树的每个节点包含键值集合、子节点指针集合和一个平衡因子。键值集合按照从小到大的顺序排列,子节点指针集合按照左子节点、右子节点的顺序排列。平衡因子用于衡量节点的平衡性。

  1. 节点容量:B树的阶(Order)或分支因子(Branch Factor)通常用字母m表示,它定义了节点可以拥有的最大子节点数(即m个子节点)。因此,一个节点最多可以有m-1个键值。最少包含 m/2−1 个键(根节点除外)
  2. 子节点数:每个非叶子节点最多有 m个子节点,最少有 m/2个子节点
  3. 有序性:所有键在节点内按升序排列

  4. 平衡性

    • B树通过保持树的平衡性,确保所有叶子节点都在同一层,从而实现了高效的查找、插入和删除操作。
    • 这种平衡性确保了所有查找、插入和删除操作的时间复杂度都是O(log n),其中n是树中元素的数量。
  5. 操作原理

    • 查找操作:从根节点开始,通过比较要查找的键与节点中的键,决定是继续在左子树还是右子树中搜索,直到找到目标键或到达叶子节点为止。
    • 插入操作:找到合适的叶子节点,然后将新键插入该节点。如果插入后节点中的键的数量超过了m-1,则节点会分裂成两个节点,并将中间的键提升到父节点。如果父节点也满了,则继续向上分裂,直到根节点。如果根节点也分裂,则创建一个新的根节点,并包含分裂出的中间键。
    • 删除操作:找到包含要删除键的节点,并从节点中移除该键。如果删除后节点中的键的数量少于要求的最小数量(⌈m/2⌉-1),则需要重新分配或合并节点。重新分配通常是从兄弟节点借键,合并则是将当前节点与兄弟节点合并,并可能将父节点中的键下移。

二、B树操作过程图形化演示

示例:构建一个3阶B树(每个节点最多2个键,3个子节点)

插入序列:[10, 20, 5, 6, 12, 30, 7, 17]

1. 插入10(根节点):
[10]2. 插入20(直接填充根节点):
[10, 20]3. 插入5(根节点已满,触发分裂):[10]/   \[5]   [20]4. 插入6(插入到左子节点):[10]/   \[5,6] [20]5. 插入12(插入右子节点,无需分裂):[10]/   \[5,6] [12,20]6. 插入30(右子节点分裂):[10,20]/   |   \[5,6] [12] [30]7. 插入7(左子节点分裂,触发根节点更新):[6,10,20]/   |   |   \[5] [7] [12] [30]

三、B树的应用场景

场景应用原理
数据库索引

B树保持数据有序,支持高效范围查询(如MySQL的InnoDB引擎使用B+树变种)

  • B树在数据库中被广泛用于索引结构,以加速数据的检索速度。由于B树能够保持平衡性,使得所有叶子节点到根节点的路径长度相近,从而保证了搜索的效率。
  • 在数据库中,索引是帮助快速查找数据的数据结构。通过B树,数据库系统可以快速定位数据的存储位置,提高数据访问的速度。
文件系统

NTFS、ReiserFS等文件系统用B树管理文件和目录的元数据

  • B树也被广泛应用于文件系统中,用于实现目录结构和文件分配表,以管理文件的存储和访问。
  • 文件系统通常需要频繁地进行查找和检索文件,而B树的平衡性和高度平衡特性使得这一过程更为高效。
  • B树能够减少磁盘I/O操作的次数,从而显著提高数据存取的效率。这对于大型文件系统来说尤为重要。
内存受限环境通过减少树高度降低内存访问次数
网络路由表快速查找IP地址对应的路由信息
外部排序

在外部排序中,由于数据量太大,无法一次性装入内存,因此需要使用磁盘等外部存储设备。B树可以作为外部排序过程中的一个关键数据结构,帮助实现多路归并排序,提高排序的效率。

四、C语言实现B树及示例

#include <stdio.h>
#include <stdlib.h>
#define M 3  // B树阶数
#define MAX_KEYS (M-1)
#define MIN_KEYS (M/2 - 1)typedef struct BTreeNode {int keys[MAX_KEYS];struct BTreeNode *children[M];int num_keys;int is_leaf;
} BTreeNode;BTreeNode* create_node(int is_leaf) {BTreeNode* node = (BTreeNode*)malloc(sizeof(BTreeNode));node->num_keys = 0;node->is_leaf = is_leaf;for (int i = 0; i < M; i++) node->children[i] = NULL;return node;
}void split_child(BTreeNode *parent, int index) {BTreeNode *child = parent->children[index];BTreeNode *new_node = create_node(child->is_leaf);// 新节点获取后半部分键new_node->num_keys = MIN_KEYS;for (int i = 0; i < MIN_KEYS; i++) new_node->keys[i] = child->keys[i + MIN_KEYS + 1];// 移动子节点指针(若非叶子节点)if (!child->is_leaf) {for (int i = 0; i <= MIN_KEYS; i++)new_node->children[i] = child->children[i + MIN_KEYS + 1];}child->num_keys = MIN_KEYS;// 将中间键提升到父节点for (int i = parent->num_keys; i > index; i--)parent->children[i + 1] = parent->children[i];parent->children[index + 1] = new_node;for (int i = parent->num_keys - 1; i >= index; i--)parent->keys[i + 1] = parent->keys[i];parent->keys[index] = child->keys[MIN_KEYS];parent->num_keys++;
}void insert_non_full(BTreeNode *node, int key) {int i = node->num_keys - 1;if (node->is_leaf) {while (i >= 0 && key < node->keys[i]) {node->keys[i + 1] = node->keys[i];i--;}node->keys[i + 1] = key;node->num_keys++;} else {while (i >= 0 && key < node->keys[i]) i--;i++;if (node->children[i]->num_keys == MAX_KEYS) {split_child(node, i);if (key > node->keys[i]) i++;}insert_non_full(node->children[i], key);}
}void insert(BTreeNode **root, int key) {if ((*root)->num_keys == MAX_KEYS) {BTreeNode *new_root = create_node(0);new_root->children[0] = *root;*root = new_root;split_child(new_root, 0);insert_non_full(new_root, key);} else {insert_non_full(*root, key);}
}// 打印B树(中序遍历)
void print_tree(BTreeNode *node, int level) {printf("Level %d: ", level);for (int i = 0; i < node->num_keys; i++)printf("%d ", node->keys[i]);printf("\n");if (!node->is_leaf) {for (int i = 0; i <= node->num_keys; i++)if (node->children[i]) print_tree(node->children[i], level + 1);}
}int main() {BTreeNode *root = create_node(1); // 初始为叶子节点int keys[] = {10, 20, 5, 6, 12, 30, 7, 17};for (int i = 0; i < sizeof(keys)/sizeof(int); i++) {insert(&root, keys[i]);printf("After inserting %d:\n", keys[i]);print_tree(root, 0);printf("----------------\n");}return 0;
}

 五、代码执行结果说明

输出示例(部分):

After inserting 10:
Level 0: 10 
----------------
After inserting 20:
Level 0: 10 20 
----------------
After inserting 5:
Level 0: 10 
Level 1: 5 
Level 1: 20 
----------------
...

代码特性:

  1. 动态分裂:当节点满时自动分裂

  2. 递归插入:通过insert_non_full函数确保插入路径上的节点都有空间

  3. 层级打印:可视化展示B树结构

六、应用实例:文件系统目录索引

typedef struct {char filename[256];long offset;
} FileRecord;// 在B树节点中存储文件记录
BTreeNode* create_file_index() {return create_node(1); // 创建叶子节点
}void index_file(BTreeNode **root, const char *filename, long offset) {int hash_key = 0;for (int i = 0; filename[i]; i++) hash_key += filename[i];insert(root, hash_key); // 实际应存储FileRecord结构
}

该实现可用于构建文件系统索引,通过文件名哈希快速定位文件物理位置。

七、总结

综上所述,B树作为一种高效的数据结构,在数据库系统、文件系统以及外部排序等领域具有广泛的应用前景。其平衡性和高度平衡的特性使得B树在处理大量数据时能够保持稳定的性能,从而满足了各种复杂和多样化的数据存储和检索需求。

相关文章:

B树详解及其C语言实现

目录 一、B树的基本原理 二、B树操作过程图形化演示 三、B树的应用场景 四、C语言实现B树及示例 五、代码执行结果说明 六、应用实例&#xff1a;文件系统目录索引 七、总结 一、B树的基本原理 B树&#xff08;B-Tree&#xff09; 是一种自平衡的树数据结构&#xff0c;…...

3.1 学习UVM中的uvm_component类分为几步?

文章目录 前言一、定义1.1 角色和功能&#xff1a;1.2 与其他UVM类的区别&#xff1a;1.3 主要属性和方法&#xff1a; 二、使用方法2.1 定义和实例化&#xff1a;2.2 生命周期管理&#xff1a;2.3 组件间通信&#xff1a; 三、何时使用3.1 使用场景3.2 适用组件3.3 与uvm_obje…...

python:面向对象之魔法方法

概念&#xff1a;主要是提供一些特殊的功能。 1.__init__方法&#xff1a; 一.不带参数&#xff1a; python中类似__xx__() __init__():初始化对象class Car():def __init__(self):self.color blueself.type suvdef info(self):print(f车的颜色是&#xff1a;{self.color})p…...

postgresql 游标(cursor)的使用

概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标&#xff0c;因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量&#xff0c;这是函数返回大数据集的有效方式&#xff0c;函数调用者…...

vivado 7 系列器件时钟

7 系列器件时钟 注释&#xff1a; 本章节以 Virtex -7 时钟源为例。 Virtex-6 的时钟资源与此类似。如果使用不同的架构&#xff0c;请参阅有关器件的 《时 钟资源指南》 [ 参照 40] 。 Virtex-6 和 Virtex-7 器件内含 32 个称为 BUFG 的全局时钟缓存。 BUFG 可满…...

Vue 3 部分新特性解析

1. 引言 Vue 3 引入了许多新特性和改进&#xff0c;使得开发更加高效和灵活。本文将深入探讨 Vue 3 的高阶部分&#xff0c;包括 Composition API、自定义指令、插件开发、状态管理和性能优化。 2. Composition API 2.1 引入 Composition API Composition API 是 Vue 3 中引…...

ubuntu24.04安装布置ros

最近换电脑布置机器人环境&#xff0c;下了24.04&#xff0c;但是网上的都不太合适&#xff0c;于是自己试着布置好了&#xff0c;留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…...

数据结构与算法-链表

单向链表&#xff08;带哨兵&#xff09; public class SinglyLinkedList {private Node head new Node(Integer.MIN_VALUE, null); // 定义一个哨兵节点作为头部节点&#xff0c;避免对头节点进行特殊处理// 节点类&#xff0c;包含值和指向下一个节点的引用private static …...

【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现

医院在为患者进行诊断和治疗过程中&#xff0c;会产生大量的医学影像图片&#xff0c;如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存&#xff0c;需要将每个患者文件夹下的图片合并成…...

协议-ACLLite-ffmpeg

是什么&#xff1f; FFmpeg是一个开源的多媒体处理工具包&#xff0c;它集成了多种功能&#xff0c;包括音视频的录制、转换和流式传输处理。FFmpeg由一系列的库和工具组成&#xff0c;其中最核心的是libavcodec和libavformat库。 libavcodec是一个领先的音频/视频编解码器库&…...

flask开发的网站,后端服务关闭后,可以找回之前的数据的吗

如果使用 Flask 开发的网页&#xff0c;后端服务关闭后&#xff0c;是否还能找回数据取决于数据的存储方式&#xff1a; 可能找回数据的情况&#xff1a; 数据库存储&#xff08;MySQL、PostgreSQL、SQLite 等&#xff09; 如果 Flask 连接的是持久化数据库&#xff0c;即使后…...

deepseek API开发简介

1、申请deepseek api key&#xff1a; https://platform.deepseek.com/api_keys创建API Key&#xff0c;并复制Key 2、安装python、pip&#xff0c;然后安装requests pip install requests3、.示例代码 import requests import json# DeepSeek API 地址 API_URL "ht…...

【AI】在Ubuntu中使用docker对DeepSeek的部署与使用

这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中&#xff0c;有效地利用机器学习工具来解决问题变得越来越重要。今天&#xff0c;我将引入一个名为DeepSeek 的工具&#xff0c;它作为一种强大的搜索引擎&a…...

Baklib推进内容中台智能推荐系统的技术创新与执行方案

内容概要 在当前数字化快速发展的背景下&#xff0c;内容中台的智能化推荐系统显得尤为重要。通过技术创新&#xff0c;Baklib致力于提升平台的用户体验&#xff0c;实现精准的个性化推荐&#xff0c;满足多样化的用户需求。内容中台不仅能够高效管理和组织大量的信息与知识&a…...

MySQL8.0实现MHA高可用

一、简介 MHA&#xff08;Master HA&#xff09;是一款开源的 MySQL 的高可用程序&#xff0c;它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时&#xff0c;会提升其中拥有最新数据的 slave 节点成为新的master 节点&#xf…...

ip地址是手机号地址还是手机地址

在数字化生活的浪潮中&#xff0c;IP地址、手机号和手机地址这三个概念如影随形&#xff0c;它们各自承载着网络世界的独特功能&#xff0c;却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语&#xff0c;经常被错误地与手机号地址或手机地址划上等号。本文旨在…...

多光谱成像技术在华为Mate70系列的应用

华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头&#xff0c;这是一款150万像素的多光谱摄像头。 相较于普通摄像头&#xff0c;它具有以下优势&#xff1a; 色彩还原度高&#xff1a;色彩还原准确度提升约 120%&#xff0c;能捕捉更多光谱信息&#xff0c;使拍摄照片色…...

21.2.6 字体和边框

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体&#xff0c;设置Range.Borders就可以修改边框样式。 【例 21.6】【项目&#xff…...

详解命令模式

引言 当遇到发送者和接受者之间不是直接连接关系&#xff0c;而是间接连接关系&#xff0c;即发送者和接受者之间需要解耦&#xff0c;我们通常需要命令模式。比如电灯和开关&#xff0c;开关设计时并不知道自己是控制电灯的&#xff0c;也可能控制排气扇、电力设备等等&#x…...

Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM

前言 之前通过 docker在ubuntu上安装Nextcloud&#xff0c;但是现在我使用PVE安装Debian虚拟机&#xff0c;不想通过docker安装了。下面开始折腾。 安装过程 步骤 1&#xff1a;更新系统并安装必要的软件 sudo apt update && sudo apt upgrade -y sudo apt install…...

string 与 wstring 的字符编码

测试代码: #include<stdio.h> #include<stdlib.h> #include<windows.h> #include <locale.h> #include <string> #include <iostream>// 函数用于计算UTF-8字符串中的字符数 int utf8_strlen(const char* str) {int len = 0;for (; *s…...

golang 开启HTTP代理认证

内部网路不能直接访问外网接口&#xff0c;可以通过代理发送HTTP请求。 HTTP代理服务需要进行认证。 package cmdimport ("fmt""io/ioutil""log""net/http""net/url""strings" )// 推送CBC07功能 func main() {l…...

第九届华为ICT大赛实践赛中国总决赛举行通知及考试地址

经大赛组委会决定&#xff0c;第九届华为ICT大赛实践赛中国总决赛将于2025年3月8日-9日举行具体赛事安排如下&#xff0c;期待与您顶峰相见! 理论考试:线上答题&#xff0c;团队3名成员共同完成1套试题&#xff0c;统一提交一份答案【60分钟&#xff0c;20道试题(含判断、单选…...

FFmpeg 与 FFplay 参数详解:-f、-pix_fmt、-pixel_format 和 -video_size 的区别与用法

FFmpeg 与 FFplay 参数详解:-f、-pix_fmt、-pixel_format 和 -video_size 的区别与用法 在使用 FFmpeg 和 FFplay 进行视频处理和播放时,-f、-pix_fmt、-pixel_format 和 -video_size 是常用的参数。这些参数的作用和使用场景略有不同,理解它们的区别和用法对于正确处理和播…...

深入理解 C++17 std::is_swappable

文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中&#xff0c;交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…...

直接插入排序

一&#xff1a;直接插入排序是什么。 二&#xff1a;如何实现直接插入排序 三&#xff1a;直接插入排序时间复杂度 一&#xff1a;直接插入排序它是排序得一种&#xff0c;其目的无非是将乱序通过排序排成有序的。 我们可以通过动画直观看什么是直接插入排序 这是我找的直接…...

基于可信数据空间的企业数据要素与流通体系建设(附ppt 下载)

近期&#xff0c;可信数据空间会议召开。大数据系统软件国家工程研究中心总工程师王晨发表了题为《基于可信数据空间的企业数据要素与流通体系建设》主旨演讲。 WeChat Subscription Account【智慧城市指北】&#xff0c;可搜索相关关键字“20250107”&#xff0c;可获取具体获…...

处理 this

this指向改变this this指向 构造函数和原型对象都指向 实例 改变this指向的三个方法&#xff1a; call()apply()bind() call() apply() 与call的区别就是call中参数任意&#xff0c;但是apply中参数必须是数组 bind&#xff08;&#xff09;&#xff08;最重要&#xff09; 与…...

kafka服务端之日志存储

文章目录 日志布局日志索引日志清理日志删除基于时间基千日志大小基于日志起始偏移量 日志压缩总结 日志布局 Ka饮a 中的消息是以主题为基本单位进行归类的&#xff0c; 各个主题在逻辑 上相互独立。 每个主题又可以分为一个或多个分区&#xff0c; 分区的数量可以在主题创建的…...

【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据

利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…...

正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A

在正则表达式中&#xff0c;零宽断言是一种非常强大的工具&#xff0c;能够在不消费字符的情况下对匹配位置进行约束。除了环视&#xff08;lookahead 和 lookbehind&#xff09;以外&#xff0c;还有一些常用的零宽断言&#xff0c;它们用于处理边界、字符串的开头和结尾等特殊…...

java poi Excel 文件导入导出常见错误及解决方案

在使用 Apache POI 进行 Excel 文件的导入导出操作时&#xff0c;可能会遇到各种问题。以下是一些常见的错误及其解决方案&#xff1a; 一、文件格式相关问题 1. 文件格式不兼容 问题描述&#xff1a;尝试使用 HSSFWorkbook 读取 .xlsx 文件&#xff0c;或者使用 XSSFWorkbo…...

批量提取word表格数据到一个excel

新建一个excel到word同级目录altf11打开vba窗口并新建模块粘贴下方代码&#xff08;修改一些必要参数&#xff09;回到excel表格界面&#xff0c;altf8选择执行该宏注意要在信任中心开启运行vba宏 Sub 批量提取word表格数据到excel()Dim wdApp As Object, wdDoc As ObjectDim …...

快速建立私有化知识库(私有化训练DeepSeek,通过ollama方式)

简介 什么&#xff1f;&#xff01;老是有人问你需求&#xff0c;不同版本的需求你记不清还得去扒拉过程文档、设计文档&#xff1f; 什么&#xff1f;&#xff01;领导会询问功能使用情况、用户相关数据&#xff0c;你每次还得手动查询反馈&#xff1f; 什么&#xff1f;&…...

python 一句话打印行号

在C语言中&#xff0c;打印行号可以直接用预定义的宏__LINE__&#xff0c;打印当前行号&#xff0c;方便调试。 printf("%d", __LINE__); // C语言打印当前行号 python中没有这样的预定义宏。 但可以用这种方式&#xff0c;实现一句话打印行号&#xff1a; impor…...

设计模式-生产者消费者模型

阻塞队列&#xff1a; 在介绍生产消费者模型之前&#xff0c;我们先认识一下阻塞队列。 阻塞队列是一种支持阻塞操作的队列&#xff0c;常用于生产者消费者模型&#xff0c;它提供了线程安全的队列操作&#xff0c;并且在队列为空或满时&#xff0c;能够阻塞等待&#xff0c;…...

Kubernetes是什么?为什么它是云原生的基石

从“手工时代”到“自动化工厂” 想象一下&#xff0c;你正在经营一家工厂。在传统模式下&#xff0c;每个工人&#xff08;服务器&#xff09;需要手动组装产品&#xff08;应用&#xff09;&#xff0c;效率低下且容易出错。而Kubernetes&#xff08;k8s&#xff09;就像一个…...

全国计算机等级考试(NCRE)四级计算机网络考试大纲(2025年版)

文章目录 基本要求1. 理解计算机网络的基本概念。2. 掌握局域网的基本工作原理。局域网&#xff08;LAN&#xff09;基本工作原理 3. 掌握TCP/IP及其相关协议。 TCP/IP协议及其相关协议1. TCP/IP协议的分层结构2. 主要协议详解&#xff08;1&#xff09;IP协议&#xff08;2&am…...

扩展知识--缓存和分时复用cpu

在多核CPU中&#xff0c;缓存和分时复用CPU是两个重要的概念&#xff0c;它们分别涉及硬件架构和资源管理策略。以下将从缓存的层次结构、工作原理以及分时复用CPU的概念进行详细解释。 一、多核CPU中的缓存 缓存的定义与作用 缓存&#xff08;Cache&#xff09;是位于CPU与主…...

6.Centos7上部署flask+SQLAlchemy+python+达梦数据库

情况说明 前面已经介绍了window上使用pycharm工具开发项目时,window版的python连接达梦数据库需要的第三方包。 这篇文章讲述,centos7上的python版本连接达梦数据库需要的第三方包。 之前是在windows上安装达梦数据库的客户端,将驱动包安装到windows版本的python中。(开…...

如何将3DMAX中的3D文件转换为AutoCAD中的2D图形?

大家好,今天我们来探讨一下如何将3DMAX中的3D文件转换为AutoCAD中的2D图形。无论是出于设计交流、施工准备还是其他实际需求,这种转换在工程设计领域都是一项非常实用的技能。接下来,我将为大家详细介绍几种实现这一转换的方法,帮助大家轻松跨越3D与2D设计之间的鸿沟。让我…...

使用LLaMA Factory踩坑记录

前置条件&#xff1a;电脑显卡RTX 4080 问题&#xff1a;LLaMA-Factory在运行的时候&#xff0c;弹出未检测到CUDA的报错信息 结论&#xff1a;出现了以上的报错&#xff0c;主要可以归结于以下两个方面&#xff1a; 1、没有安装GPU版本的pytorch&#xff0c;下载的是CPU版本…...

四柱预测学

图表 后天八卦 十二地支不仅代表了时间,还代表了方位。具体来说: ‌子‌:代表正北方‌丑寅‌:合起来代表东北方‌卯‌:代表正东方‌辰巳‌:合起来代表东南方‌午‌:代表正南方‌未申‌:合起来代表西南方‌酉‌:代表正西方‌戌亥‌:合起来代表西北方‌四季-五行-六神…...

使用 JFreeChart 创建动态图表:从入门到实战

文章目录 前言一、JFreeChart 简介二、环境准备三、 创建第一个折线图四、自定义图表样式4.1 设置背景色4.2 设置折线颜色4.3 设置字体&#xff08;解决中文乱码&#xff09;4.4 设置横坐标的标签宽度和方向 五、导出图表六、实战&#xff1a;动态生成日报图表总结 前言 在数据…...

【自学笔记】文言一心的基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文心一言知识点总览一、文心一言简介二、文心一言的核心功能三、文心一言的技术特点四、文心一言的应用场景五、文心一言的使用技巧六、文心一言的未来发展 总结 文…...

解锁AI语音魅力——yoyo鹿鸣在线语音合成器,让创意声音即刻绽放!

yoyo鹿鸣-在线语音合成 人工智能语音克隆生成&#xff0c;二次元&#xff5e; AI工具 | AI探金 可以在AI探金社区来找我&#xff5e; yoyo鹿鸣 - 在线语音生成器 需求人群&#xff1a; 有语音合成需求的用户。 使用场景示例&#xff1a; 合成yoyo鹿鸣语音 等等 产品特色&a…...

【无标题】堆

[TOC](优先级队列&#xff08;堆&#xff09;) 【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 # 1. 优先级队列 ## 1.1 概念 前面介绍过队列&#xff0c;**队列是一种先进先出(FIFO)的数据结构**&#xff0c;但有些情况下&#xff0c;**操作的数据可…...

【工具变量】上市公司企业绿色新闻数据(2013-2023年)

测算方式&#xff1a; 参考《中国工业经济》周泽将(2023)老师的做法&#xff0c;首先通过网络爬虫的方法检索并爬取上市公司相关新闻&#xff0c;并辅以人工检索补充校对&#xff1b;新闻文本清理&#xff0c;并通过公司相关性判定以及主题模型识别该新闻是否为上市公司环保主…...

【vue】高德地图AMap.Polyline动态更新画折线,逐步绘制

可以使用 setTimeout 或 setInterval 来逐个点绘制折线&#xff0c;确保每次添加新的点到 path 并更新 Polyline&#xff0c;如下所示&#xff1a; localPolyline(path) {console.log(逐点绘制 polyline...);let drawnPath []; // 用于存储当前绘制的点let index 0;let poly…...

Lecture8 | LPV VXGI SSAO SSDO

Review: Lecture 7 | Lecture 8 LPV (Light Propagation Volumes) Light Propagation Volumes(LPV)-孤岛惊魂CryEngine引进的技术 LPV做GI快|好 大体步骤&#xff1a; Step1.Generation of Radiance Point Set Scene Representation 生成辐射点集的场景表示&#xff1a;辐射…...