数据结构-树与二叉树
一、树的定义与基本术语
1.1 树的定义
树(Tree)是一种非线性的数据结构,它是由 n(n ≥ 0)个有限节点组成的集合。如果 n = 0,称为空树;如果 n > 0,则:
-
有一个特定的节点称为根(Root)。
-
除根节点外,其余节点被分成 m(m ≥ 0)个互不相交的集合 T₁, T₂, ..., Tₘ,其中每个集合本身又是一棵树,称为根的子树(Subtree)。
1.2 树的基本术语
-
节点(Node):树中的一个独立单元。
-
度(Degree):一个节点的子树个数称为该节点的度。
-
叶子节点(Leaf Node):度为0的节点。
-
分支节点:度不为0的节点。
-
树的度:树中所有节点的最大度数。
-
层次(Level):根节点在第1层,其子节点在第2层,依次类推。
-
树的高度(Height):树中节点的最大层次数。
-
森林(Forest):m棵互不相交的树的集合。
二、二叉树
2.1 二叉树的定义
二叉树(Binary Tree)是一种特殊的树,每个节点最多有两个子树,分别称为左子树和右子树。二叉树的子树有左右之分,且不能交换。
2.2 二叉树的基本操作
二叉树的基本操作包括:
-
创建二叉树
-
遍历二叉树(前序、中序、后序、层序)
-
查找节点
-
插入节点
-
删除节点
2.3 二叉树的性质
-
性质1:二叉树的第 i 层最多有 2^(i-1) 个节点(i ≥ 1)。
-
性质2:深度为 k 的二叉树最多有 2^k - 1 个节点(k ≥ 1)。
-
性质3:对于任何一棵二叉树,如果叶子节点数为 n₀,度为2的节点数为 n₂,则 n₀ = n₂ + 1。
-
性质4:具有 n 个节点的完全二叉树的深度为 ⌊log₂n⌋ + 1。
-
性质5:如果对完全二叉树的节点按层序编号(从1开始),则对于编号为 i 的节点:
-
如果 i = 1,则该节点是根节点。
-
如果 i > 1,则其父节点编号为 ⌊i/2⌋。
-
如果 2i ≤ n,则其左子节点编号为 2i;否则无左子节点。
-
如果 2i + 1 ≤ n,则其右子节点编号为 2i + 1;否则无右子节点。
-
2.4 二叉树的存储结构
二叉树的存储结构主要有两种:
-
顺序存储:用一组连续的存储单元存储二叉树的节点,通常用于完全二叉树。
-
链式存储:用链表存储二叉树的节点,每个节点包含数据域和左右子树指针。
2.5 二叉树的图解
以下是一个简单的二叉树结构图解:
A/ \B C/ \ /D E F
三、二叉树的遍历与线索化
3.1 二叉树的遍历
遍历是指按照某种顺序访问二叉树中的每个节点,且每个节点只访问一次。常见的遍历方法有:
-
前序遍历:根节点 → 左子树 → 右子树
-
中序遍历:左子树 → 根节点 → 右子树
-
后序遍历:左子树 → 右子树 → 根节点
-
层序遍历:按层次从上到下、从左到右访问节点
3.2 遍历算法应用
遍历算法可以应用于:
-
复制二叉树
-
计算二叉树的高度
-
统计叶子节点的数量
3.3 基于栈的递归消除
递归遍历可以转换为基于栈的非递归遍历,以避免递归带来的栈溢出问题。
3.4 线索二叉树
线索二叉树是在二叉树的链式存储中,利用空指针域存储节点的前驱和后继信息,以提高遍历效率。
3.5 由遍历序列确定二叉树
通过前序和中序遍历序列,或者后序和中序遍历序列,可以唯一确定一棵二叉树。
3.6 遍历的图解
以下是一个二叉树的前序遍历图解:
前序遍历:A → B → D → E → C → F
四、树、森林和二叉树的关系
4.1 树的存储结构
树的存储结构主要有:
-
双亲表示法:每个节点存储其父节点的指针。
-
孩子表示法:每个节点存储其子节点的指针列表。
-
孩子兄弟表示法:每个节点存储第一个孩子和右兄弟的指针。
4.2 树、森林和二叉树的相互转换
-
树转换为二叉树:将树的每个节点的子节点链表转换为二叉树的左子树,兄弟节点转换为右子树。
-
森林转换为二叉树:将森林中的每棵树依次转换为二叉树,并将它们链接起来。
-
二叉树转换为树或森林:将二叉树的右子树转换为兄弟节点,左子树转换为子节点。
4.3 树与森林的遍历
-
树的遍历:前序遍历和后序遍历。
-
森林的遍历:前序遍历和后序遍历。
五、哈夫曼树及其应用
5.1 哈夫曼树
哈夫曼树(Huffman Tree)是一种带权路径长度最小的二叉树,也称为最优二叉树。构造哈夫曼树的算法如下:
-
根据给定的 n 个权值 {w₁, w₂, ..., wₙ} 构成 n 棵二叉树的集合 F = {T₁, T₂, ..., Tₙ},其中每棵二叉树只有一个带权值的根节点。
-
在 F 中选取两棵根节点权值最小的树作为左右子树,构造一棵新的二叉树,新树的根节点权值为左右子树根节点权值之和。
-
删除 F 中的这两棵树,并将新树加入 F。
-
重复步骤2和3,直到 F 中只剩下一棵树,这棵树就是哈夫曼树。
5.2 哈夫曼编码
哈夫曼编码是一种基于哈夫曼树的编码方法,左子树表示0,右子树表示1。每个叶子节点的编码是从根节点到该叶子节点路径上的0和1组成的字符串。
5.3 哈夫曼树的图解
以下是一个哈夫曼树的构造过程图解:
初始权值:1, 2, 3, 4步骤1:选择1和2,构造新树,权值为3
步骤2:选择3和3,构造新树,权值为6
步骤3:选择4和6,构造新树,权值为10最终哈夫曼树:10/ \4 6/ \3 3/ \ / \1 2 ... ...
六、总结核心知识点
6.1 时间性能分析
数据结构 | 查找 | 插入 | 删除 |
---|---|---|---|
二叉树 | O(n) | O(n) | O(n) |
平衡二叉树 | O(log n) | O(log n) | O(log n) |
6.2 空间性能分析
数据结构 | 空间复杂度 |
---|---|
二叉树 | O(n) |
6.3 应用场景
数据结构 | 适用场景 |
---|---|
二叉树 | 表达式求值、查找算法等 |
哈夫曼树 | 数据压缩、编码等 |
七、代码实现
7.1 二叉树的实现
7.1.1 C语言实现
#include <stdio.h>
#include <stdlib.h>// 定义二叉树节点
typedef struct TreeNode {char data;struct TreeNode *left;struct TreeNode *right;
} TreeNode;// 创建新节点
TreeNode* createNode(char data) {TreeNode *newNode = (TreeNode*)malloc(sizeof(TreeNode));newNode->data = data;newNode->left = NULL;newNode->right = NULL;return newNode;
}// 前序遍历
void preOrder(TreeNode *root) {if (root != NULL) {printf("%c ", root->data); // 访问根节点preOrder(root->left); // 递归遍历左子树preOrder(root->right); // 递归遍历右子树}
}// 中序遍历
void inOrder(TreeNode *root) {if (root != NULL) {inOrder(root->left); // 递归遍历左子树printf("%c ", root->data); // 访问根节点inOrder(root->right); // 递归遍历右子树}
}// 后序遍历
void postOrder(TreeNode *root) {if (root != NULL) {postOrder(root->left); // 递归遍历左子树postOrder(root->right); // 递归遍历右子树printf("%c ", root->data); // 访问根节点}
}int main() {// 创建二叉树TreeNode *root = createNode('A');root->left = createNode('B');root->right = createNode('C');root->left->left = createNode('D');root->left->right = createNode('E');root->right->left = createNode('F');// 遍历二叉树printf("前序遍历: ");preOrder(root);printf("\n");printf("中序遍历: ");inOrder(root);printf("\n");printf("后序遍历: ");postOrder(root);printf("\n");return 0;
}
7.1.2 C++实现
#include <iostream>
using namespace std;// 定义二叉树节点
struct TreeNode {char data;TreeNode *left;TreeNode *right;TreeNode(char val) : data(val), left(nullptr), right(nullptr) {}
};// 前序遍历
void preOrder(TreeNode *root) {if (root != nullptr) {cout << root->data << " "; // 访问根节点preOrder(root->left); // 递归遍历左子树preOrder(root->right); // 递归遍历右子树}
}// 中序遍历
void inOrder(TreeNode *root) {if (root != nullptr) {inOrder(root->left); // 递归遍历左子树cout << root->data << " "; // 访问根节点inOrder(root->right); // 递归遍历右子树}
}// 后序遍历
void postOrder(TreeNode *root) {if (root != nullptr) {postOrder(root->left); // 递归遍历左子树postOrder(root->right); // 递归遍历右子树cout << root->data << " "; // 访问根节点}
}int main() {// 创建二叉树TreeNode *root = new TreeNode('A');root->left = new TreeNode('B');root->right = new TreeNode('C');root->left->left = new TreeNode('D');root->left->right = new TreeNode('E');root->right->left = new TreeNode('F');// 遍历二叉树cout << "前序遍历: ";preOrder(root);cout << endl;cout << "中序遍历: ";inOrder(root);cout << endl;cout << "后序遍历: ";postOrder(root);cout << endl;return 0;
}
7.1.3 Java实现
public class BinaryTree {// 定义二叉树节点static class TreeNode {char data;TreeNode left;TreeNode right;TreeNode(char data) {this.data = data;left = null;right = null;}}// 前序遍历void preOrder(TreeNode root) {if (root != null) {System.out.print(root.data + " "); // 访问根节点preOrder(root.left); // 递归遍历左子树preOrder(root.right); // 递归遍历右子树}}// 中序遍历void inOrder(TreeNode root) {if (root != null) {inOrder(root.left); // 递归遍历左子树System.out.print(root.data + " "); // 访问根节点inOrder(root.right); // 递归遍历右子树}}// 后序遍历void postOrder(TreeNode root) {if (root != null) {postOrder(root.left); // 递归遍历左子树postOrder(root.right); // 递归遍历右子树System.out.print(root.data + " "); // 访问根节点}}public static void main(String[] args) {BinaryTree tree = new BinaryTree();TreeNode root = new TreeNode('A');root.left = new TreeNode('B');root.right = new TreeNode('C');root.left.left = new TreeNode('D');root.left.right = new TreeNode('E');root.right.left = new TreeNode('F');System.out.print("前序遍历: ");tree.preOrder(root);System.out.println();System.out.print("中序遍历: ");tree.inOrder(root);System.out.println();System.out.print("后序遍历: ");tree.postOrder(root);System.out.println();}
}
7.1.4 Python实现
class TreeNode:def __init__(self, data):self.data = dataself.left = Noneself.right = None# 前序遍历
def pre_order(root):if root is not None:print(root.data, end=" ") # 访问根节点pre_order(root.left) # 递归遍历左子树pre_order(root.right) # 递归遍历右子树# 中序遍历
def in_order(root):if root is not None:in_order(root.left) # 递归遍历左子树print(root.data, end=" ") # 访问根节点in_order(root.right) # 递归遍历右子树# 后序遍历
def post_order(root):if root is not None:post_order(root.left) # 递归遍历左子树post_order(root.right) # 递归遍历右子树print(root.data, end=" ") # 访问根节点if __name__ == "__main__":# 创建二叉树root = TreeNode('A')root.left = TreeNode('B')root.right = TreeNode('C')root.left.left = TreeNode('D')root.left.right = TreeNode('E')root.right.left = TreeNode('F')# 遍历二叉树print("前序遍历:", end=" ")pre_order(root)print()print("中序遍历:", end=" ")in_order(root)print()print("后序遍历:", end=" ")post_order(root)print()
八、总结
通过以上内容,我们详细讲解了树和二叉树的定义、性质、存储结构、遍历方法以及哈夫曼树的应用。希望这些内容能够帮助你更好地理解和使用树和二叉树这种数据结构。每种数据结构的代码实现都附有详细的注释,便于读者理解和动手操作。
相关文章:
数据结构-树与二叉树
一、树的定义与基本术语 1.1 树的定义 树(Tree)是一种非线性的数据结构,它是由 n(n ≥ 0)个有限节点组成的集合。如果 n 0,称为空树;如果 n > 0,则: 有一个特定的节…...
STL_unordered_map_01_基本用法
👋 Hi, I’m liubo👀 I’m interested in harmony🌱 I’m currently learning harmony💞️ I’m looking to collaborate on …📫 How to reach me …📇 sssssdsdsdsdsdsdasd🎃 dsdsdsdsdsddfsg…...
ARCGIS国土超级工具集1.5更新说明
ARCGIS国土超级工具集V1.5版本更新说明:因作者近段时间工作比较忙及正在编写ARCGISPro国土超级工具集(截图附后)的原因,故本次更新为小更新(没有增加新功能,只更新了已有的工具)。本次更新主要修…...
主流物理仿真引擎和机器人/强化学习仿真平台对比
以下是当前主流的物理仿真引擎和机器人/强化学习仿真平台的特点和适用场景,方便根据需求选择: 🧠 NVIDIA 系列 ✅ Isaac Lab v1.4 / v2 特点: 基于 Omniverse Isaac Sim,属于高端视觉机器人仿真框架v2 更加模块化&a…...
STM32 HAL库内部 Flash 读写实现
一、STM32F407 内部 Flash 概述 1.1 Flash 存储器的基本概念 Flash 存储器是一种非易失性存储器,它可以在掉电的情况下保持数据。STM32F407 系列微控制器内部集成了一定容量的 Flash 存储器,用于存储程序代码和数据。Flash 存储器具有擦除和编程次数的…...
C++学习:六个月从基础到就业——面向对象编程:构造函数与析构函数
C学习:六个月从基础到就业——面向对象编程:构造函数与析构函数 本文是我C学习之旅系列的第十篇技术文章,主要讨论C中构造函数与析构函数的概念、特点和使用技巧。这些是C对象生命周期管理的关键组成部分。查看完整系列目录了解更多内容。 引…...
dfs二叉树中的深搜(回溯、剪枝)--力扣129、814、230、257
目录 1.1题目链接:129.求根节点到叶结点数字之和 1.2题目描述:给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。 1.3解法(dfs-前序遍历): 2.1题目链接:814.二叉树剪枝 2.2题目描述&…...
Python Selenium 一小时速通教程
Python Selenium 一小时速通教程 实战案例 一、环境配置(10分钟) 安装Python 确保已安装Python 3.x(官网下载)。 安装Selenium 在终端运行: pip install selenium下载浏览器驱动 Chrome:访问 ChromeDriv…...
通过GO后端项目实践理解DDD架构
最近在工作过程中重构的项目要求使用DDD架构,在网上查询资料发现教程五花八门,并且大部分内容都是长篇的概念讲解,晦涩难懂,笔者看了一些github上入门的使用DDD的GO项目,并结合自己开发中的经验,谈谈自己对…...
MybatisPlus最新版分页无法使用
在使用分页的时候发现分页拦截器关键API会报错,其实根本原因是在之前只需要导入一个mybatisplus依赖,而现在分页似乎被单独分离出来了,需要额外导入新依赖使其支持 <dependency><groupId>com.baomidou</groupId><art…...
【Android学习记录】工具使用
文章目录 一. 精准找视图资源ID1. 准备工作2. 使用 uiautomator 工具2.1. 获取设备的窗口内容2.2. Pull XML 文件2.3. 查看 XML 文件 3. 直接使用 ADB 命令4. 使用 Android Studio 的 Layout Inspector总结 二. adb shell dumpsys activity1. 如何使用 ADB 命令2. 输出内容解析…...
youtube视频和telegram视频加载原理差异分析
1. 客户侧缓存与流式播放机制 流式视频应用(如 Netflix、YouTube)通过边下载边播放实现流畅体验,其核心依赖以下技术: 缓存预加载:客户端在后台持续下载视频片段(如 DASH/HLS 协议的…...
在机器视觉检测中为何选择线阵工业相机?
线阵工业相机,顾名思义是成像传感器呈“线”状的。虽然也是二维图像,但极宽,几千个像素的宽度,而高度却只有几个像素的而已。一般在两种情况下使用这种相机: 1. 被测视野为细长的带状,多用于滚筒上检测的问…...
lwip记录
Index of /releases/lwip/ (gnu.org) 以太网(Ethernet)是互联网技术的一种,由于它是在组网技术中占的比例最高,很多人 直接把以太网理解为互联网。 以太网是指遵守 IEEE 802.3 标准组成的局域网,由 IEEE 802.3 标准规定的主要是位于 参考模…...
Redis清空缓存
尽管redis可以设置ttl过期时间进行指定key的定时删除,但是在某些场景下,比如: 测试时需要批量删除指定库下所有库下所有的数据,则会涉及到缓存清除的话题。 如下为具体的操作及说明: 场景类型操作指令清空当前库下所有…...
WPF 依赖注入启动的问题
原因是在App.xaml 设置了 StartupUri“MainWindow.xaml” 1.依赖注入后启动的主窗体存在无参构造 程序正常启动,但是主窗体界面会弹出2个窗体。 2.依赖注入后启动的主窗体存在有参构造 报错...
Arcgis经纬线标注设置(英文、刻度显示)
在arcgis软件中绘制地图边框,添加经纬度度时常常面临经纬度出现中文,如下图所示: 解决方法,设置一下Arcgis的语言 点击高级--确认 这样Arcgis就转为英文版了,此时在来看经纬线刻度的标注,自动变成英文...
【电子通识】案例:电缆的安装方式也会影响设备的可靠性?
背景 在日常生活中,我们常常会忽略一些看似微不足道的细节,但这些细节有时却能决定设备的寿命和安全性。比如,你知道吗?一根电缆的布置方式,可能会决定你的设备是否会因为冷凝水而损坏。 今天,我们就来聊聊…...
房屋装修费用预算表:45594 =未付14509 + 付清31085【时间:20250416】
文章目录 引言I 房屋装修费用预算表II 市场价参考防水搬运3000III 装修计划整体流程进度细节国补IV 付款凭证(销售单)伟星 PPR +PVC+太阳线+地漏=6500入户门设计通铺大板瓷砖 | 湿贴 3408(地)+3600(加)+5209(墙)=12217元门头铁空调引言 关注我,发送【装修记账】获取预…...
Python文件操作完全指南:从基础到高级应用
目录 一、文件基础概念 1.1 什么是文件? 1.2 文件的存储方式 文本文件 二进制文件 二、Python文件操作基础 2.1 文件操作三步曲 2.2 核心函数与方法 2.3 文件读取详解 基本读取示例 文件指针机制 2.4 文件打开模式 写入文件示例 2.5 高效读取大文件 三…...
03(总)-docker篇 Dockerfile镜像制作(jdk,jar)与jar包制作成docker容器方式
全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.2 上文传送门 2. docker镜像制作一: jdk2.1 制作jdk镜像2.1.1 准备工作2.1.2 jdk镜像的Dockerfile2.1.3 基于Dockerfile构建镜像2.1.4 docker使用镜像运行容器2.1.5 进入jdk1.8容器内测试 3. docker镜像制作二: java镜像(jar包)…...
CUDA的安装
打开nvidia控制面板 找到组件 打开 CUDA Toolkit Archive | NVIDIA Developer 下载CUDA...
四六级听力调频广播有线传输无线覆盖系统:弥补单一发射系统安全缺陷,构建稳定可靠听力系统平台
四六级听力调频广播有线传输无线覆盖系统:弥补单一发射系统安全缺陷,构建稳定可靠听力系统平台 北京海特伟业科技有限公司任洪卓发布于2025年4月16日 随着英语四六级考试的规模不断扩大,听力考试部分的设备可靠性问题日益凸显。传统的无线发射系统存在…...
信创服务器-大国崛起,信创当道!
信创产业是数据安全、网络安全的基础,也是新基建的重要组成部分。在政策的推动下,2020-2022 年,中国信创服务器出货量整体呈现出快速增长的趋势,其中党政、电信、金融等领域采购频次高,单次采购量大,是中国…...
【仿Mudou库one thread per loop式并发服务器实现】SERVER服务器模块实现
SERVER服务器模块实现 1. Buffer模块2. Socket模块3. Channel模块4. Poller模块5. EventLoop模块5.1 TimerQueue模块5.2 TimeWheel整合到EventLoop5.1 EventLoop与线程结合5.2 EventLoop线程池 6. Connection模块7. Acceptor模块8. TcpServer模块 1. Buffer模块 Buffer模块&…...
冒泡与 qsort 排序策略集
今天我们要学习两种排序方法,分别是冒泡排序和qsort函数排序,冒泡排序相对qsort函数排序要简单一点,更易于理解。 1.冒泡排序 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复遍历元素列并比较相邻元素来实现排…...
【Linux】第七章 控制对文件的访问
目录 1. 什么是文件系统权限?它是如何工作的?如何查看文件的权限? 2. 解释‘-rw-r--r--’这个字符串。 3. 使用什么命令可以更改文件和目录的权限?写出分别使用符号法和数值法将权限从 754 修改为 775 的命令。 4. 如何修改文…...
网站301搬家后谷歌一直不收录新页面怎么办?
当网站因更换域名或架构调整启用301重定向后,许多站长发现谷歌迟迟不收录新页面,甚至流量大幅下滑。 例如,301跳转设置错误可能导致权重传递失效,而新站内容与原站高度重复则可能被谷歌判定为“低价值页面”。 即使技术层面无误&a…...
socket 客户端和服务器通信
服务器 using BarrageGrab; using System; using System.Collections.Concurrent; using System.Linq; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading;namespace Lyx {class Server{private TcpListener listener;private Concurre…...
C实现md5功能
md5在线验证: 在线MD5计算_ip33.com 代码如下: #include "md5.h" #include <string.h> #include "stdio.h"/** 32-bit integer manipulation macros (little endian)*/ #ifndef GET_ULONG_LE #define GET_ULONG_LE(n,b,i) …...
【项目】CherrySudio配置MCP服务器
CherrySudio配置MCP服务器 (一)Cherry Studio介绍(二)MCP服务环境搭建(1)环境准备(2)依赖组件安装<1> Bun和UV安装 (3)MCP服务器使用<1> 搜索MCP…...
第五节:React Hooks进阶篇-如何用useMemo/useCallback优化性能
反模式:滥用导致的内存开销React 19编译器自动Memoization原理 React Hooks 性能优化进阶:从手动到自动 Memoization (基于 React 18 及以下版本,结合 React 19 新特性分析) 一、useMemo/useCallback 的正确使用场景…...
【Qt】QWidget 核⼼属性详解
🍑个人主页:Jupiter. 🚀 所属专栏:QT 欢迎大家点赞收藏评论😊 目录 🏝 一.相关概念🎨二. 核⼼属性概览🍄2.1 enabled🥭2.2geometry🌸 2.3 windowTitle&#…...
如何知道raid 有问题了
在 Rocky Linux 8 上,你的服务器使用了 RAID5(根据 lsblk 输出,/dev/sda3、/dev/sdb1 和 /dev/sdc1 组成 md127 RAID5 阵列)。为了监控 RAID5 阵列中磁盘的健康状态,并及时发现某块磁盘损坏,可以通过以下方…...
操作系统之shell实现(上)
🌟 各位看官好,我是maomi_9526! 🌍 种一棵树最好是十年前,其次是现在! 🚀 今天来学习C语言的相关知识。 👍 如果觉得这篇文章有帮助,欢迎您一键三连,分享给更…...
精益数据分析(3/126):用数据驱动企业发展的深度解析
精益数据分析(3/126):用数据驱动企业发展的深度解析 大家好!一直以来,我都坚信在当今竞争激烈的商业环境中,数据是企业获得竞争优势的关键。最近深入研究《精益数据分析》这本书,收获颇丰&…...
React 18/19 使用Ant Design全局弹窗message
react 18 及以上,拥有并发模式,不允许在渲染过程中直接触发副作用(如弹窗、网络请求等),应将其放至 useEffect 中,确保其在渲染完成后调用 useEffect(() > {message.success(操作成功!);}, …...
【spark3.2.4】--完全分布式集群搭建
一、spark-env.sh 文件配置(操作路径:$SPARK_HOME/conf/spark-env.sh) 如果还没创建: cp $SPARK_HOME/conf/spark-env.sh.template $SPARK_HOME/conf/spark-env.sh然后编辑(比如用 vim): vim…...
Web3技术下数字资产数据保护的实践探索
在这个信息爆炸的时代,数字资产已经成为我们生活中不可或缺的一部分。随着Web3技术的兴起,它以其去中心化、透明性和安全性的特点,为数字资产的管理和保护提供了新的解决方案。本文将探讨Web3技术在数字资产数据保护方面的实践探索࿰…...
灰度共生矩阵(GLCM)简介
灰度共生矩阵(GLCM)简介 1. 基本概念 灰度共生矩阵(Gray-level Co-occurrence Matrix, GLCM)是一种用于分析图像纹理特征的统计方法。它通过计算图像中特定空间关系的像素对出现的频率,来描述纹理的规律性1。 核心思想:统计图像中相距为d、方向为θ的两个像素点,分别具…...
基于javaEE+jqueryEasyUi+eclipseLink+MySQL的课程设计客房管理信息系统
1. 系统概述 1.1 系统功能概述 1)客户管理。能够增加一个客户,包括:身份证号、客户名称、出生年月、性别、联系电话、邮箱、会员类别等信息,默认会员类别为空;能够修改和删除客户信息;能够根据客户名称、联系电话查询…...
3款本周高潜力开源AI工具(多模态集成_隐私本地化)
本周聚焦 AI 技术领域,为开发者精选 3 款兼具创新性与实用性的开源项目。这些项目覆盖图像生成、智能助手、大语言模型框架等方向,通过技术突破解决开发痛点,助力开发者高效构建智能应用。 更多精彩科技推荐请点击->:更多精彩科…...
第一期第10讲
Linux常用的压缩文件扩展名有 .tar, .tar.bz2, .tar.gz 使用gzip压缩和解压缩 对单个文件压缩: gzip a.c //压缩a.c为a.c.gz gzip -d a.c.gz //解压缩为a.c 对文件夹压缩: gzip -r test //对test文件夹里的文件进行压缩,不对test进行压缩…...
计算方法在单细胞数据分析中的应用及AI拓展
单细胞技术的出现彻底革新了我们对生物系统的理解,揭示了看似同质的细胞群体内部复杂的异质性。为了从这些技术产生的大量复杂数据中提取有意义的见解,精密的计算方法是不可或缺的。 AI拓展 单细胞数据分析的核心在于处理和解释高维度数据的能力&#…...
如何配置环境变量HADOOP_HOMEM、AVEN_HOME?不配置会怎么样
以下是在不同操作系统中配置 HADOOP_HOME 和 JAVA_HOME 环境变量的方法,以及不配置可能产生的后果: 配置 HADOOP_HOME - Windows系统:下载并解压Hadoop安装包,然后右键“此电脑”,选择“属性”,点击“高级…...
【现代深度学习技术】循环神经网络03:语言模型和数据集
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重…...
【学习笔记】Taming 3DGS泛读
原文链接:https://arxiv.org/abs/2406.15643 代码链接:https://github.com/nullptr81/3dgs-accel 一、学习内容 1.研究背景 3DGS在新视角合成(NVS)中表现优异,但优化过程低效: 存在 1)资源需…...
SAP系统交货已完成标识
问题:交货已完成标识 现象:采购订单一直处于未完成交货状态,及交货完成标识处于非勾选状态 原因:采购订单交货完成标识勾会在两种情况下勾选, a.交货数量在容差范围内; b.手动勾选。 某些特殊情况…...
【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——音频测试 #ES8388 #录音测试
1)实验平台:正点原子ATK-DLMP257B开发板 2)浏览产品:https://www.alientek.com/Product_Details/135.html 3)全套实验源码手册视频下载:正点原子资料下载中心 文章目录 第四章 ATK-DLMP257B功能测试——音频…...
WPF 使用 DI EF CORE SQLITE
WPF 使用 DI EF CORE SQLITE 1.安装 nuget包 <PackageReference Include"Microsoft.EntityFrameworkCore.Sqlite" Version"9.0.4" />2.创建DbContext的实现类,创建有参构造函数 public XXContext(DbContextOptions<XXXContext> o…...