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

几何数据结构之四叉树与八叉树

几何数据结构之四叉树与八叉树

    • 四叉树的定义
    • 四叉树深度的计算公式推导
      • 假设:
      • 计算过程:
        • 1. 划分空间:
        • 2. 节点容纳的最小距离:
        • 3. 解出深度:
        • 4. 考虑常数项:
      • 总结:
    • 八叉树

四叉树的定义

四叉树(Quadtree):是一颗包含树根(Root)的树,每个节点包含四个子节点。我们常见用于描述四叉树的形式如下图:

在这里插入图片描述
它一个节点可以存储四个子节点的数据。当然,我们还可以采用其他形式来描述四叉树。

如下图所示:

在这里插入图片描述
树中每个节点有四个子节点,我们可以把每个节点看作一个正方形,最外围的正方形,包含四个第二大的正方形,同样的,第二大的也包含四个第三大正方形。
当然,我们可以以象限来描述它,一个正方形,被十字叉分为了四个象限,一个象限就代表了一个节点,我们可以不断的递归的去取正方形的边长中点,直到正方形中只存在一个点的。

四叉树是一种空间划分数据结构,通常用于存储二维平面中的点。四叉树将空间递归地划分为四个象限(子区域),并将点插入到对应的子区域中。

插入过程:
每个节点表示一个矩形区域,如果该区域可以容纳更多的点,它就会插入点;如果已经达到阈值(例如最多只能容纳 4 个点),则会进行分割,将区域划分为 4 个子区域。
子区域的插入:每当点超出当前节点的边界时,应该递归到下一个合适的子区域中。如果某个点仍然位于当前节点的范围内,则将其插入到当前节点。
子节点的划分:当节点满了(即点数量超过设定阈值),它将自己分割成 4 个子节点,每个子节点管理一个象限的区域。

四叉树深度的计算公式推导

假设:

  1. 初始区域的边长是 ( S )。
  2. 每个节点容纳的最小距离是 ( C ),即空间中任意两个点之间的最小距离为 ( C ),所以每个子区域将尽可能容纳这种最小距离的点。

计算过程:

1. 划分空间:

四叉树的每一层将空间分为四个象限(子区域)。如果在深度为 ( d ) 的层次,空间被划分为 ( 4^d ) 个子区域,那么每个子区域的大小将是:

子区域边长 = S 2 d \text{子区域边长} = \frac{S}{2^d} 子区域边长=2dS

2. 节点容纳的最小距离:

每个子区域容纳的最小点间距是 ( C ),所以在每个子区域中,至少应该有足够的空间容纳这种最小距离的点。为了确保每个子区域中有两个点之间的最小距离不小于 ( C ),我们有以下条件:

S 2 d ≥ C \frac{S}{2^d} \geq C 2dSC

这意味着每个子区域的边长必须大于等于最小点距离 ( C ),否则就需要进一步划分。

3. 解出深度:

根据上面的不等式,求得最小深度 ( d ):

S 2 d ≥ C ⇒ 2 d ≤ S C ⇒ d ≤ log ⁡ 2 ( S C ) \frac{S}{2^d} \geq C \quad \Rightarrow \quad 2^d \leq \frac{S}{C} \quad \Rightarrow \quad d \leq \log_2 \left( \frac{S}{C} \right) 2dSC2dCSdlog2(CS)

4. 考虑常数项:

实际应用中,可能还需要考虑额外的调整常数项,通常为 3 2 \frac{3}{2} 23,用于补偿一些实现中的空间管理开销或其他实际细节。因此,四叉树的深度可以表示为:

深度 = log ⁡ 2 ( S C ) + 3 2 \text{深度} = \log_2 \left( \frac{S}{C} \right) + \frac{3}{2} 深度=log2(CS)+23

总结:

  • ( S ) 是初始区域的边长。
  • ( C ) 是任意两个点之间的最小距离,即每个子区域内元素间的最小间距。
  • 最终的四叉树深度大致为:

深度 = log ⁡ 2 ( S C ) + 3 2 \text{深度} = \log_2 \left( \frac{S}{C} \right) + \frac{3}{2} 深度=log2(CS)+23

四叉树大量使用与碰撞检测上面。

下面是简单实现四叉树的代码:

#include <iostream>
#include <vector>
#include <memory>using namespace std;// 定义一个点(Point)类,表示一个二维空间中的点
class Point
{
public:int x, y;  // 点的 x 和 y 坐标// 构造函数,初始化 x 和 y 坐标Point(int x, int y) : x(x), y(y) {}
};// 定义一个边界(Boundary)类,表示一个矩形区域
class Boundary
{
public:int x, y, width, height;  // 矩形的中心坐标 (x, y),宽度和高度// 构造函数,初始化矩形的中心坐标、宽度和高度Boundary(int x, int y, int width, int height): x(x), y(y), width(width), height(height) {}// 判断一个点是否在矩形区域内bool contains(const Point& point) const{return point.x >= x - width / 2 && point.x <= x + width / 2 &&point.y >= y - height / 2 && point.y <= y + height / 2;}// 判断一个矩形区域是否与当前矩形区域相交bool intersects(const Boundary& range) const{return !(range.x - range.width / 2 > x + width / 2 ||range.x + range.width / 2 < x - width / 2 ||range.y - range.height / 2 > y + height / 2 ||range.y + range.height / 2 < y - height / 2);}
};// 定义四叉树(QuadTree)类,用于存储二维空间中的点
class QuadTree
{
private:Boundary boundary;  // 当前节点的矩形区域int capacity;  // 当前节点的最大容量(每个节点最多存储多少个点)vector<Point> points;  // 当前节点存储的点unique_ptr<QuadTree> northeast;  // 东北子节点unique_ptr<QuadTree> northwest;  // 西北子节点unique_ptr<QuadTree> southeast;  // 东南子节点unique_ptr<QuadTree> southwest;  // 西南子节点public:// 构造函数,初始化边界和容量QuadTree(const Boundary& boundary, int capacity): boundary(boundary), capacity(capacity) {}// 将当前节点划分为四个子节点void subdivide(){int subWidth = boundary.width / 2;  // 子节点的宽度int subHeight = boundary.height / 2;  // 子节点的高度int x = boundary.x;  // 父节点的 x 坐标int y = boundary.y;  // 父节点的 y 坐标// 创建四个子节点,分别对应东北、西北、东南、西南northeast = make_unique<QuadTree>(Boundary(x + subWidth / 2, y - subHeight / 2, subWidth, subHeight), capacity);northwest = make_unique<QuadTree>(Boundary(x - subWidth / 2, y - subHeight / 2, subWidth, subHeight), capacity);southeast = make_unique<QuadTree>(Boundary(x + subWidth / 2, y + subHeight / 2, subWidth, subHeight), capacity);southwest = make_unique<QuadTree>(Boundary(x - subWidth / 2, y + subHeight / 2, subWidth, subHeight), capacity);}// 插入一个点到四叉树中bool insert(const Point& point){// 如果点超出了当前节点的边界,返回 falseif (!boundary.contains(point)){cout << "Point (" << point.x << ", " << point.y << ") is out of bounds." << endl;return false;}// 如果当前节点的点数未超出容量,则直接插入点if (points.size() < capacity){points.push_back(point);  // 将点加入当前节点的点集合中cout << "Point (" << point.x << ", " << point.y << ") inserted in current node." << endl;return true;}// 如果当前节点已超出容量,进行分割if (northeast == nullptr){cout << "Subdividing node at (" << boundary.x << ", " << boundary.y << ")" << endl;subdivide();  // 划分子节点}// 递归地将点插入到四个子节点中if (northeast->insert(point)) return true;if (northwest->insert(point)) return true;if (southeast->insert(point)) return true;if (southwest->insert(point)) return true;return false;}// 打印当前节点及其所有子节点中的点void printPoints() const{// 打印当前节点存储的点for (const auto& point : points){cout << "(" << point.x << ", " << point.y << ")" << endl;}// 递归地打印四个子节点中的点if (northeast != nullptr) northeast->printPoints();if (northwest != nullptr) northwest->printPoints();if (southeast != nullptr) southeast->printPoints();if (southwest != nullptr) southwest->printPoints();}
};int main()
{// 扩大根节点的边界为 20x20Boundary boundary(0, 0, 20, 20); // 创建一个四叉树,根节点的容量为 4QuadTree qt(boundary, 4);// 插入一些点到四叉树qt.insert(Point(2, 3));qt.insert(Point(3, 5));qt.insert(Point(6, 7));qt.insert(Point(8, 1));qt.insert(Point(1, 1));qt.insert(Point(4, 4));// 打印树中的所有点cout << "Points in the tree:" << endl;qt.printPoints();return 0;
}

八叉树

八叉树原理与四叉树类似,它可以理解为一个下图:
在这里插入图片描述
一个立方体被三个平面分成了八块,它的实现与原理与四叉树类似,在此不过多赘述。

相关文章:

几何数据结构之四叉树与八叉树

几何数据结构之四叉树与八叉树 四叉树的定义四叉树深度的计算公式推导假设&#xff1a;计算过程&#xff1a;1. 划分空间&#xff1a;2. 节点容纳的最小距离&#xff1a;3. 解出深度&#xff1a;4. 考虑常数项&#xff1a; 总结&#xff1a; 八叉树 四叉树的定义 四叉树&#…...

postman请求参数化

postman界面介绍 一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理…...

java实现word转html(支持docx及doc文件)

private final static String tempPath "C:\\Users\\xxx\\Desktop\\Word2Html\\src\\test\\";//图片及相关文件保存的路径public static void main(String argv[]) {try {JFileChooser fileChooser new JFileChooser();fileChooser.setDialogTitle("Select a …...

<电子幽灵>开发笔记:BAT基础笔记(一)

BAT脚本基础笔记(一) 介绍 费曼学习法最重要的部分&#xff0c;即把知识教给一个完全不懂的孩子——或者小白。 为了更好的自我学习&#xff0c;也为了让第一次接触某个知识范畴的同学快速入门&#xff0c;我会把我的学习笔记整理成电子幽灵系列。 提示&#xff1a;作为低代码…...

Leetcode::3427.变长子数组求和

给你一个长度为 n 的整数数组 nums 。对于 每个 下标 i&#xff08;0 < i < n&#xff09;&#xff0c;定义对应的子数组 nums[start ... i]&#xff08;start max(0, i - nums[i])&#xff09;。 返回为数组中每个下标定义的子数组中所有元素的总和。 子数组 是数组中…...

通过以太网加载linux内核、设备树、根文件系统方法(以stm32MP135为例)

0 硬件平台 正点原子stm32MP135开发板 1 通过以太网加载linux内核、设备树、根文件系统方法&#xff08;以stm32MP135为例&#xff09; 在产品正式发布前&#xff0c;为了调试方便&#xff0c;我们可以使用以太网加载linux内核、设备树、根文件系统以加快调试速度。本文以stm3…...

mac配置stable diffusion以及模型出图优化

1. 基础stable diffusion webui安装 使用的工程是stable-diffusion-webui&#xff0c;直接clone下来即可。 然后创建一个conda环境&#xff0c;python为3.9 激活conda环境后&#xff0c;执行./webui.sh即可。脚本会自动安装必要的包&#xff0c;然后启动网页。 默认有一个sd…...

LeetCode热题100(子串篇)

LeetCode热题100 说是子串&#xff0c;其实是子区间~ 560. 和为 K 的子数组 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 思路 思路&#xff1a; 和为k的子数组&#xff0c;看到…...

从密码学原理与应用新方向到移动身份认证与实践

相关学习资料放下面啦&#xff01; 记得关注❤️&#xff5e;后续分享更多资料 通过百度网盘分享的文件&#xff1a;从密码学原理与应... 链接https://pan.baidu.com/s/1mHpHkvPuf8DUwReQkoYQlw?pwdGza7 提取码&#xff1a;Gza7 复制这段内容打开「百度网盘APP 即可获取」 记…...

【Flink系列】9. Flink容错机制

9. 容错机制 在Flink中&#xff0c;有一套完整的容错机制来保证故障后的恢复&#xff0c;其中最重要的就是检查点。 9.1 检查点&#xff08;Checkpoint&#xff09; 9.1.1 检查点的保存 1&#xff09;周期性的触发保存 “随时存档”确实恢复起来方便&#xff0c;可是需要我…...

【物联网】ARM核介绍

文章目录 一、芯片产业链1. CPU核(1)ARM(2)MIPS(3)PowerPc(4)Intel(5)RISC-V 2. SOC芯片(1)主流厂家(2)产品解决方案 3. 产品 二、ARM核发展1. 不同架构的特点分析(1)VFP(2)Jazelle(3)Thumb(4)TrustZone(5)SIMD(6)NEON 三、ARM核(ARMv7)工作模式1. 权限级别(privilege level)2.…...

spring的事物管理的认知

事物 它是一个原子操作要么全部不执行&#xff0c;要么全部执行成功&#xff0c;如果有一个失败也会撤销&#xff0c;它保证用户每一次的操作都是可靠的&#xff0c;即使时出现了错误也不至于破坏数据的完整性 它包含了四种特性&#xff1a; 原子性&#xff1a;保证事物要么…...

QT跨平台应用程序开发框架(3)—— 信号和槽

目录 一&#xff0c;基本概念 二&#xff0c;connect函数使用 2.1 connect 2.2 Qt内置信号和槽 2.3 一些细节 三&#xff0c;自定义信号和槽 3.1 自定义槽函数 3.2 自定义信号 3.3 带参数的信号槽 四&#xff0c;信号和槽的意义 五&#xff0c;信号和槽断开连接 六&…...

技术面试中的软素质技巧性答复集锦

1、请你自我介绍一下你自己&#xff1f; 回答提示&#xff1a;一般人回答这个问题过于平常&#xff0c;只说姓名、年龄、爱好、工作经验&#xff0c;这些在简历上都有。其实&#xff0c;企业最希望知道的是求职者能否胜任工作&#xff0c;包括&#xff1a;最强的技能、最深入研…...

JavaWeb项目——如何处理管理员登录和退出——笔记

一、知识点 1、WebServlet注解的使用 WebServlet注解是Servlet 3.0引入的一个特性&#xff0c;它允许开发者在Servlet类上使用注解来声明Servlet的一些属性&#xff0c;从而避免在web.xml文件中进行配置。这种方式简化了Servlet的配置过程&#xff0c;使得代码更加简洁&#…...

函数递归的介绍

1.递归的定义 在C语言中&#xff0c;递归就是函数自己调用自己 上面的代码就是 main 函数在函数主体内 自己调用自己 但是&#xff0c;上面的代码存在问题&#xff1a;main 函数反复地 自己调用自己 &#xff0c;不受限制&#xff0c;停不下来。 最终形成死递归&#xff0c;…...

昇腾环境ppstreuct部署问题记录

测试代码 我是在华为昇腾910B3上测试的PPStructure。 import os import cv2 from PIL import Image #from paddleocr import PPStructure,draw_structure_result,save_structure_res from paddleocr_asyncio import PPStructuretable_engine PPStructure(show_logTrue, imag…...

《知识图谱:鸿蒙NEXT中人工智能的智慧基石》

在鸿蒙NEXT系统的人工智能应用中&#xff0c;知识图谱技术犹如一座智慧基石&#xff0c;为系统的智能化提供了强大的知识支撑&#xff0c;开启了更智能、更高效、更个性化的交互新时代。 提升语义理解能力 知识图谱以其结构化的知识表示方式&#xff0c;将各种实体和它们之间…...

Springboot项目Jackson支持多种接收多种时间格式

前言 在springboot项目中经常会使用Jackson框架,当前端给后端传输时间类型时,我们一般需要先配置好时间格式,否则后端无法接收。以下是一些配置方法 统一配置 spring:jackson:time-zone: GMT+8date-format: yyyy-MM-dd HH:mm:ss这种配置就是要求前端统一传输的格式是yyyy-…...

go语言zero框架通过chromedp实现网页在线截图的设计与功能实现

在 GoZero 框架中实现网页在线截图的功能&#xff0c;可以通过集成 chromedp 库来控制 Chrome 浏览器进行截图。chromedp 是一个基于 Chrome DevTools 协议的 Go 包&#xff0c;可以用来在 Go 程序中模拟浏览器操作&#xff0c;如页面截图、DOM 操作、表单提交等。 下面是一个…...

基于深度学习的视觉检测小项目(十四) 用SQLite数据库进行用户管理

在开始做用户管理之前&#xff0c;先要了解一下SQLite数据库的基础知识&#xff1a;https://blog.csdn.net/xulibo5828/category_12785993.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12785993&sharereferPC&sharesourcexulibo5828&sharefrom…...

【2024年华为OD机试】 (B卷,100分)- 敏感字段加密(Java JS PythonC/C++)

一、问题描述 题目描述 给定一个由多个命令字组成的命令字符串: 字符串长度小于等于 127 字节,只包含大小写字母、数字、下划线和偶数个双引号;命令字之间以一个或多个下划线 _ 进行分割;可以通过两个双引号 "" 来标识包含下划线 _ 的命令字或空命令字(仅包含…...

图像去雾数据集的下载和预处理操作

前言 目前&#xff0c;因为要做对比实验&#xff0c;收集了一下去雾数据集&#xff0c;并且建立了一个数据集的预处理工程。 这是以前我写的一个小仓库&#xff0c;我决定还是把它用起来&#xff0c;下面将展示下载的路径和数据处理的方法。 下面的代码均可以在此找到。Auo…...

Vue3数据响应式原理

什么是数据响应式 当数据变化时&#xff0c;引用数据的函数&#xff08;副作用函数&#xff09;自动重新执行。 即数据触发了函数的响应&#xff0c;如&#xff1a;视图渲染中使用了某数据&#xff0c;数据改变后&#xff0c;视图跟着自动更新。 触发者&#xff1a;数据 响应者…...

5.最长回文子串--力扣

给你一个字符串 s&#xff0c;找到 s 中最长的 回文子串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 示例 2&#xff1a; 输入&#xff1a;s “cbbd” 输出&#xff1a;“bb” 原题如上&…...

ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT

文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史&#xff1a;从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …...

python学opencv|读取图像(三十九 )阈值处理Otsu方法

【1】引言 前序学习了5种阈值处理方法&#xff0c;包括(反)阈值处理、(反)零值处理和截断处理&#xff0c;还学习了一种自适应处理方法&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;三十三&#xff09;阈值处理-灰度图像-CSDN博客 python学o…...

统信V20 1070e X86系统编译安装mysql-5.7.44版本以及主从构建

设备信息 操作系统版本架构CPU内存备注统信UOS V20 1070eX864C8G此配置仅做编译安装验证&#xff0c;持续运行或数据量增长大请自行评估资源配置。统信UOS V20 1070eX864C8G 资源包 该包包含mysql-5.7.44源码包、boost资源包、统信编译mysql-5.7.44安装包 通过网盘分享的文件…...

麒麟LINUX V10SP3 2401安装ORACLE 12.2.1 runInstaller直接报UNZIP格式不对

好久没有安装ORACLE了&#xff0c;一般都是RHEL上安装得比较多&#xff0c;这不&#xff0c;现在大家都是选择国产操作系统来安装数据库了&#xff0c;以前在龙蜥&#xff0c;欧拉&#xff0c;麒麟上也安装过&#xff0c;都没有问题&#xff0c;想来在麒麟LINUX v10sp3 2401上面…...

10 为什么系统需要引入分布式、微服务架构

java技术的发展 在java开始流行起来之后&#xff0c;主要服务于企业家应用&#xff0c;例如ERP,CRM等等&#xff0c;这些项目是为企业内部员工使用&#xff0c;我们的思维是怎么用设计模式&#xff0c;如何封装代码。让开发人员关注到业务上去&#xff0c;系统也就那么几十几百…...

【Web】2025西湖论剑·中国杭州网络安全安全技能大赛题解(全)

目录 Rank-l Rank-U sqli or not Rank-l username存在报错回显&#xff0c;发现可以打SSTI 本地起一个服务&#xff0c;折半查找fuzz黑名单&#xff0c;不断扔给fenjing去迭代改payload from flask import Flask, request, render_template_stringapp Flask(__name__)app…...

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用&#xff08;如下图所示&#xff09;&#xff0c;快速了解工程目录的主要文件&#xff0c;熟悉OpenHarmony应用开发流程。 在开始之前&#xff0c;您需要了解有关OpenHarmon…...

解决npm install安装出现packages are looking for funding run `npm fund` for details问题

当我们运行npm install时&#xff0c;可能会收到类似以下的提示信息&#xff1a;“x packages are looking for funding.” 这并不是错误提示&#xff0c;也不会影响项目的正常运行。其实实在提醒有一些软件包正在寻求资金支持。 根据提示输入npm fund可以查看详细的信息&#…...

python助力WRF自动化运行

对大部分人而言&#xff0c;特别是新用户&#xff0c;WRF模式的安装繁琐且不必要&#xff0c;可以作为后续进阶掌握的技能&#xff0c;本学习跳过繁琐的安装步骤&#xff0c;直接聚焦模式的运行部分&#xff0c;通过短平快的教学&#xff0c;快速掌握模式运行。进一步将python语…...

Go-知识 版本演进

Go-知识 版本演进 Go release notesr56(2011/03/16)r57(2011/05/03)Gofix 工具语言包工具小修订 r58(2011/06/29)语言包工具小修订 r59(2011/08/01)语言包工具 r60(2011/09/07)语言包工具 [go1 2012-03-28](https://golang.google.cn/doc/devel/release#go1)[go1.1 2013-05-13]…...

企业级NoSQL数据库Redis

1.浏览器缓存过期机制 1.1 最后修改时间 last-modified 浏览器缓存机制是优化网页加载速度和减少服务器负载的重要手段。以下是关于浏览器缓存过期机制、Last-Modified 和 ETag 的详细讲解&#xff1a; 一、Last-Modified 头部 定义&#xff1a;Last-Modified 表示服务器上资源…...

Android渲染Latex公式的开源框架比较

对比主流框架&#xff0c;介绍如下几款 1、AndroidMath 官网&#xff1a;https://github.com/gregcockroft/AndroidMath/tree/master 基于android原生view方式渲染 优点&#xff1a;速度快&#xff0c;开源协议 MIT license 缺点&#xff1a;不支持文字公式混合渲染 2、Ma…...

ARM学习(42)CortexM3/M4 MPU配置

笔者之前学习过CortexR5的MPU配置,现在学习一下CortexM3/M4 MPU配置 1、背景介绍 笔者在工作中遇到NXP MPU在访问异常地址时,就会出现总线挂死,所以需要MPU抓住异常,就需要配置MPU。具体背景情况可以参考ARM学习(41)NXP MCU总线挂死,CPU could not be halted以及无法连…...

Sam Altman亲自确认:o3-mini即将上线!GPT和o系列模型合并!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;专注于分享AI全维度知识&#xff0c;包括但不限于AI科普&#xff0c;AI工…...

数据结构-队列

目录 前言一、队列及其抽象数据类型1.1 队列的基本概念1.2 队列的抽象数据类型 二、队列的实现2.1 顺序表示2.1.1 结构定义2.1.2 基本操作的实现 2.2 链式表示2.2.1 结构定义2.2.2 基本操作的实现 总结 前言 本篇文章介绍队列的基础知识&#xff0c;包括队列的抽象数据类型以及…...

Go Map 源码分析(一)

Go语言中的map是通过哈希表实现的&#xff0c;其底层结构和实现机制如下&#xff1a; 一、hash 结构 hmap结构体&#xff1a;是map的头部结构&#xff0c;主要字段及含义如下&#xff1a; count&#xff1a;表示当前哈希表中的元素数量&#xff0c;与len()函数相对应。flags…...

天机学堂5-XxlJobRedis

文章目录 梳理前面的实现&#xff1a;Feign点赞改进 day07-积分系统bitmap相关命令签到增加签到记录计算本月已连续签到的天数查询签到记录 积分表设计签到-->发送RabbitMQ消息&#xff0c;保存积分对应的消费者&#xff1a;**消费消息 用于保存积分**增加积分查询个人今日积…...

SpringBoot整合junit

SpringBoot 整合 junit 特别简单&#xff0c;分为以下三步完成: 1在测试类上添加 SpringBootTest 注解2使用 Autowired 注入要测试的资源3定义测试方法进行测试 1.实验准备&#xff1a; 创建一个名为 springboot_junit_test 的 SpringBoot 工程&#xff0c;工程目录结构如下…...

Jenkins-pipeline Jenkinsfile说明

一. 简介&#xff1a; Jenkinsfile 是一个文本文件&#xff0c;通常保存在项目的源代码仓库中&#xff0c;用于定义 Jenkins Pipeline 的行为。使用 Jenkinsfile 可以使 CI/CD 流程版本化&#xff0c;并且易于共享和审核。 二. 关于jenkinsfile&#xff1a; jenkins的pipeline…...

SpringMVC 实战指南:打造高效 Web 应用的秘籍

第一章&#xff1a;三层架构和MVC 三层架构&#xff1a; 开发服务器端&#xff0c;一般基于两种形式&#xff0c;一种 C/S 架构程序&#xff0c;一种 B/S 架构程序使用 Java 语言基本上都是开发 B/S 架构的程序&#xff0c;B/S 架构又分成了三层架构三层架构&#xff1a; 表现…...

结合帧级边界检测和深度伪造检测,定位部分伪造音频攻击中的篡改区域

Integrating frame-level boundary detection and deepfake detection for locating manipulated regions in partially spoofed audio forgery 摘要&#xff1a; 部分伪造音频是一种深度伪造的变体&#xff0c;它通过引入伪造或外部来源的善意音频片段来操纵音频语句&#xf…...

人工智能之深度学习_[2]-PyTorch入门

文章目录 PyTorch1.PyTorch简介1.1 什么是PyTorch1.2 PyTorch特点1.3 PyTorch发展历史 2 张量创建2.1 什么是张量2.2 基本创建方式2.3 线性和随机张量2.4 0、1、指定值张量2.5 指定元素类型张量 3 张量类型转换3.1 张量转换为NumPy数组3.2 NumPy数组转换为张量3.3 提取标量张量…...

vue2与vue3的区别

目录 1. 性能 2. 组合式 API 3. 生命周期钩子 4. 片段&#xff08;Fragments&#xff09; 5. 递归组件 6. 自定义渲染器 7. 全局 API 8. 组件内部的 this 9. 模板语法 10. 兼容性 总结 Vue 2 和 Vue 3 是 Vue.js 框架的两个主要版本&#xff0c;它们在多个方面有所不…...

八股学习 Mysql

八股学习 Mysql 常见面试问题优化其他 定位慢查询方案一&#xff1a;开源工具方案二&#xff1a;MySQL自带慢日志 SQL执行计划示例场景名词解释 索引概念底层数据结构聚簇索引、二级索引&#xff08;非聚簇索引&#xff09;覆盖索引覆盖索引应用场景创建原则索引失效 SQL优化表…...

主从复制

简述mysql 主从复制原理及其工作过程&#xff0c;配置一主两从并验证。 主从原理&#xff1a;MySQL 主从同步是一种数据库复制技术&#xff0c;它通过将主服务器上的数据更改复制到一个或多个从服务器&#xff0c;实现数据的自动同步。 主从同步的核心原理是将主服务器上的二…...