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

【机器学习】决策树

一、什么是决策树?

想象一下你玩“二十个问题”游戏的场景,你通过问一系列“是”或“否”的问题来猜测对方心中的物体。决策树的工作方式与此非常相似。它本质上是一个流程图结构,其中:

  • 每个内部节点(Internal Node)代表对一个特征(属性)的测试
  • 每个分支(Branch)代表测试的结果
  • 每个叶节点(Leaf Node)代表最终的决策结果或类别标签
  • 最顶端的节点称为根节点(Root Node)

数据从根节点开始,根据特征测试的结果,沿着树的分支向下移动,最终到达一个叶节点,这个叶节点就给出了数据的预测分类。

目标: 决策树学习的目标是创建一棵能够高效、准确地对数据进行分类或回归的树。理想情况下,我们希望每个叶节点都尽可能“纯净”,即包含的样本都属于同一个类别。

二、决策树如何“学习”?—— 核心:选择最佳分裂特征

决策树的学习过程,本质上是一个递归地选择最优特征,并根据该特征对数据集进行分割,使得各个子数据集获得最大“纯度”的过程。想象一下,我们站在树的某个节点,手里有一堆数据样本,我们需要决定问哪个“问题”(即选择哪个特征进行测试)最能有效地将不同类别的样本分开,引导它们走向正确的叶节点。

目标: 我们希望每次分裂后,生成的子节点(数据子集)内部的类别尽可能单一,也就是纯度(Purity)越来越高,或者说不确定性(Uncertainty/Impurity)越来越低。

挑战: 如何量化“最有效”?我们需要一个明确的数学指标来评估不同特征分裂带来的“纯度提升”或“不确定性降低”程度。这就是分裂标准(Splitting Criteria)发挥作用的地方。下面我们详细介绍三种最常用的分裂标准:

1. 信息增益(Information Gain) - ID3 算法的选择

信息增益是基于信息论中**熵(Entropy)的概念。

  • 熵(Entropy): 首先,我们需要衡量当前数据集合 D 的不确定性。熵就是这样一个度量,它表示了数据集 D 中样本类别分布的混乱程度。熵越大,表示数据集的类别越混合,不确定性越高,纯度越低。

    • 计算公式: Entropy(D) = - Σ_{k=1}^{|y|} (p_k * log2(p_k)) 其中,|y| 是类别的总数,p_k 是数据集中属于第 k 类样本的比例。如果某个子集完全属于同一类别,则其熵为 0(最纯净)。如果类别均匀分布,则熵达到最大值。
  • 条件熵(Conditional Entropy): 接下来,我们考虑如果使用某个特征 A 来分裂数据集 D,分裂后的数据不确定性会变成多少。假设特征 A 有 V 个可能的取值 {a¹, a², ..., aᵛ},它会将数据集 D 分裂成 V 个子集 {D¹, D², ..., Dᵛ}。条件熵 Entropy(D|A) 表示在已知特征 A 的取值后,数据集 D 的熵的期望值。

    • 计算公式: Entropy(D|A) = Σ_{v=1}^{V} (|Dᵛ| / |D|) * Entropy(Dᵛ) 这里,|Dᵛ| 是子集 Dᵛ 中样本的数量,|D| 是父节点 D 中样本的总数。它计算的是按特征 A 分裂后,所有子节点熵的加权平均值(权重是各子节点样本数占父节点样本数的比例)。
  • 信息增益(Information Gain): 现在我们可以定义信息增益了。它表示的是:使用特征 A 对数据集 D 进行划分所带来的不确定性减少量(即纯度提升量)

    • 计算公式: InfoGain(D, A) = Entropy(D) - Entropy(D|A) 信息增益越大,意味着选择特征 A 进行分裂后,数据集的不确定性降低得越多,纯度提升得越明显。因此,ID3 算法在选择分裂特征时,会选择那个使得信息增益最大的特征。
  • 信息增益的缺点: 一个需要注意的问题是,信息增益倾向于偏好那些具有大量不同取值的特征。例如,如果数据集中有一个“ID”列(每个样本都有唯一值),那么按 ID 分裂会得到最大的信息增益(每个子节点熵为0),但这显然是无意义的,因为它不能泛化到新数据。为了解决这个问题,C4.5 算法引入了信息增益率。

2. 信息增益率(Information Gain Ratio) - C4.5 算法的选择

信息增益率是对信息增益的一种修正,旨在减少其对多值特征的偏好。

  • 分裂信息(Split Information / Intrinsic Value): 首先,我们需要计算特征 A 本身的“固有值”或“分裂信息”,它衡量了使用特征 A 进行分裂的广度和均匀性。特征 A 的取值越多、越分散,其分裂信息通常越大。

    • 计算公式: SplitInfo(D, A) = - Σ_{v=1}^{V} (|Dᵛ| / |D|) * log2(|Dᵛ| / |D|) 注意这个公式形式上与熵很相似,但它衡量的是特征 A 取值的分布情况,而不是类别标签的分布情况。
  • 信息增益率(Gain Ratio): 信息增益率定义为信息增益与分裂信息的比值。

    • 计算公式: GainRatio(D, A) = InfoGain(D, A) / SplitInfo(D, A) 通过除以 SplitInfo(D, A),信息增益率惩罚了那些自身取值非常多的特征(因为它们的 SplitInfo 会很大)。这样,即使某个多值特征有较高的信息增益,但如果其分裂信息也很大,它的增益率就会被拉低,从而避免了 ID3 算法的偏好性。
  • 选择标准: C4.5 算法选择信息增益率最大的特征作为分裂特征。

    • 注意: 当 SplitInfo 非常小时(例如,特征只有一个取值,或几乎所有样本都在一个取值上),增益率可能会变得非常大或不稳定。因此,C4.5 算法通常采用一个启发式策略:先找出信息增益高于平均水平的特征,然后在这些候选特征中选择信息增益率最高的那个
3. 基尼指数(Gini Impurity) - CART 算法的选择

基尼指数是另一种衡量数据纯度的指标,由 CART(Classification And Regression Trees)算法使用。

  • 基尼值(Gini Value): 它衡量的是从数据集 D 中随机抽取两个样本,其类别标签不一致的概率。

    • 计算公式: Gini(D) = Σ_{k=1}^{|y|} p_k * (1 - p_k) = 1 - Σ_{k=1}^{|y|} (p_k)² 基尼值越,表示数据集的纯净度越。当所有样本属于同一类时,Gini(D) = 0。当样本均匀分布在所有类别时,基尼值最大。
  • 基尼指数(Gini Index): 对于一个使用特征 A 进行分裂的操作,基尼指数衡量的是分裂后子节点基尼值的加权平均。CART 通常进行二元分裂(即使特征有多个取值,也会找到一个最优的二分点或二分组)。假设特征 A 将数据集 D 分成 D₁ 和 D₂ 两部分:

    • 计算公式: Gini_split(D, A) = (|D₁| / |D|) * Gini(D₁) + (|D₂| / |D|) * Gini(D₂)
  • 选择标准: CART 算法在选择分裂特征(以及分裂点/分组)时,会选择那个使得分裂后基尼指数 Gini_split 最小的特征和分裂方式。 这同样意味着它在追求分裂后子节点的最高纯度。

  • 与熵的比较: 基尼指数的计算通常比熵略快一些,因为它不涉及对数运算。在实践中,两者产生的结果往往非常相似。

算法分裂标准核心思想特点/倾向性
ID3信息增益 (Gain)最大化熵的减少量倾向于选择取值多的特征
C4.5信息增益率 (Ratio)最大化 (信息增益 / 分裂信息)对信息增益进行修正,减少对多值特征的偏好
CART基尼指数 (Gini)最小化分裂后的不纯度(基尼指数)计算相对简单,通常用于二叉树构建

三、决策树的优缺点

优点:

  • 易于理解和解释: 树状结构非常直观,可以轻松可视化。
  • 数据预处理要求低: 不需要像某些模型那样进行严格的数据归一化。可以同时处理数值型和类别型数据。
  • 非参数模型: 对数据的分布没有太多假设。

缺点:

  • 容易过拟合(Overfitting): 决策树可能创建出过于复杂的树,完美拟合训练数据,但在新数据上表现不佳。需要进行剪枝(Pruning)等操作来缓解。
  • 对数据微小变化敏感: 数据微小的变动可能导致生成完全不同的树。
  • 可能产生偏见: 对于样本数量差异很大的类别,决策树可能偏向于样本多的类别。

四、实战案例:贷款申请分类

我们的目标是根据申请人的年龄段、是否有工作、是否有自己的房子、信贷情况这四个特征,来预测银行是否应该批准贷款(类别)

1. 数据准备:(数据集如下)

我们使用了以下编码来处理数据:

  • 年龄段: 0=青年, 1=中年, 2=老年
  • 有工作: 0=否, 1=是
  • 有自己的房子: 0=否, 1=是
  • 信贷情况: 0=一般, 1=好, 2=非常好
  • 类别 (是否给贷款): 0=否, 1=是

2. 模型构建与实现 (Python & Scikit-learn):

我们使用了 Python 的 scikit-learn 库来构建模型。

import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score# --- 1. 数据准备 ---
# 训练数据 (已根据规则编码)
X_train_list = [[0, 0, 0, 0], [0, 0, 0, 1], [0, 1, 0, 1], [0, 1, 1, 0], [0, 0, 1, 0],[1, 0, 0, 0], [1, 0, 0, 1], [1, 1, 1, 1], [1, 0, 1, 2], [1, 0, 1, 2],[2, 0, 1, 2], [2, 0, 1, 1], [2, 1, 0, 1], [2, 1, 0, 2], [2, 0, 0, 0],[2, 0, 0, 2]
]
y_train_list = [0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0]# 测试数据 (已根据规则编码)
X_test_list = [[0, 0, 0, 1], [0, 1, 0, 1], [1, 0, 1, 2], [1, 0, 0, 1],[2, 1, 0, 2], [2, 0, 0, 0], [2, 0, 0, 2]
]
y_test_list = [0, 1, 1, 0, 1, 0, 0]# 转换为 NumPy 数组
X_train = np.array(X_train_list)
y_train = np.array(y_train_list)
X_test = np.array(X_test_list)
y_test = np.array(y_test_list)# --- 2. 使用基尼指数 (Gini Impurity) 构建决策树 ---
# 初始化决策树分类器,criterion='gini' 指定使用基尼指数
gini_tree = DecisionTreeClassifier(criterion='gini', random_state=42)
gini_tree.fit(X_train, y_train) # 训练模型
gini_predictions = gini_tree.predict(X_test) # 预测测试集
gini_accuracy = accuracy_score(y_test, gini_predictions) # 计算精度# --- 3. 使用信息增益 (Entropy) 构建决策树 ---
# 初始化决策树分类器,criterion='entropy' 指定使用信息增益
entropy_tree = DecisionTreeClassifier(criterion='entropy', random_state=42)
entropy_tree.fit(X_train, y_train) # 训练模型
entropy_predictions = entropy_tree.predict(X_test) # 预测测试集
entropy_accuracy = accuracy_score(y_test, entropy_predictions) # 计算精度# --- 4. 输出结果 ---
print("--- 测试集预测结果与精度 ---")
print(f"真实标签: {y_test}")
print(f"基尼指数模型预测: {gini_predictions}, 精度: {gini_accuracy:.4f}")
print(f"信息增益模型预测: {entropy_predictions}, 精度: {entropy_accuracy:.4f}")

3. 结果分析:

代码运行输出结果为:

可以看到,在这个特定的案例中,无论是使用基尼指数还是信息增益作为分裂标准,构建出的决策树在我们的测试集上都达到了 100% 的预测精度!这意味着模型完美地预测了测试集中每一个申请人的贷款审批结果。

重要提示: 在实际项目中,尤其是在处理更大数据集时,达到100%的精度是比较少见的。这可能是因为我们使用的数据集非常小,并且特征可能恰好能够完美地将训练数据和测试数据分开。对于更复杂、更大型的数据集,通常需要更深入的模型评估(如交叉验证)和调优(如剪枝)来防止过拟合,并获得在未知数据上更可靠的性能。

五、总结

决策树是一种强大且易于理解的分类和回归工具。它通过模拟人类的决策过程,根据数据的特征进行递归划分。选择合适的分裂标准(如基尼指数或信息增益)是构建高效决策树的关键。虽然它有容易过拟合等缺点,但通过适当的技术(如剪枝、集成方法)可以有效缓解。

通过我们的小型贷款审批案例,我们看到了如何应用 scikit-learn 库快速构建和评估决策树模型。尽管结果很理想,但务必记住在真实场景中数据和模型的复杂性。

相关文章:

【机器学习】决策树

一、什么是决策树? 想象一下你玩“二十个问题”游戏的场景,你通过问一系列“是”或“否”的问题来猜测对方心中的物体。决策树的工作方式与此非常相似。它本质上是一个流程图结构,其中: 每个内部节点(Internal Node&…...

大模型格式化输出的几种方法

大模型格式化输出的几种方法 在开发一些和LLM相关的应用的时候,如何从大模型的反馈中拿到结构化的输出数据是非常重要的,那么本文就记录几种常用的方法。 OpenAI提供的新方法 在 OpenAI 的 Python 库中,client.beta.chat.completions.parse 是一个用于生成结构化输出的方法…...

250408_解决加载大量数据集速度过慢,耗时过长的问题

250408_解决加载Cifar10等大量数据集速度过慢,耗时过长的问题(加载数据时多线程的坑) 在做Cifar10图像分类任务时,发现每个step时间过长,且在资源管理器中查看显卡资源调用异常,主要表现为,显卡…...

Linux网络多进程并发服务器和多线程并发服务器

多进程 还是以大小写转换为例子 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> #include <sys/socket.h> #include <arpa/inet.h> #include "wrap.h" #include…...

LLMs基础学习(五)模型微调专题(中)

文章目录 LLMs基础学习&#xff08;五&#xff09;模型微调专题&#xff08;中&#xff09;Adapter 类的微调1 背景2 技术原理3 具体细节4 Adapter 类其他方法的微调 Prefix 类的微调1 Prefix Tuning2 Prompt Tuning3 P - tuning4 P - Tuning v25 总结 LoRA 篇a. 什么是 LoRA?…...

不同路由器网段之间的组建

实现PC1到PC7之间的通信 先将基础的ip都配置好 在AR6中将跳板配置好&#xff0c;ip route-static 192.168.5.0 24 64.1.1.2 在AR3中将跳板配置好&#xff0c;ip route-static 192.168.1.0 24 64.1.1.1 如此我们将可以实现通信了 还有第二种&#xff0c;实现PC1到…...

java设计模式-建造者模式

建造者模式(build) 建造者模式的四个角色 1、Product(产品角色)&#xff1a; 一个具体的产品对象。 2、Builder(抽象建造者)&#xff1a; 创建一个Product对象的各个部件指定的 接口或者抽象类。 3、ConcreteBuild(具体建造者)&#xff1a;实现接口&#xff0c;构建和装配各个部…...

【泛函分析】

E&#xff0e;Kreyszig, Introductory functional analysis with applications, Wiley, 1989 1.1 Metric space 满足下面四个性质的映射称为度量&#xff1a;正定、0、对称性和三角不等式 推论&#xff1a;广义的三角不等式 度量可以看成一个映射&#xff0c;验证欧式距离&am…...

【NLP 面经 6】

当上帝赐予你荒野时&#xff0c;就意味着&#xff0c;他要你成为高飞的鹰 —— 25.4.3 一、机器翻译任务&#xff0c;Transformer结构模型改进 在自然语言处理的机器翻译任务中&#xff0c;你采用基于 Transformer 架构的模型。在翻译一些具有丰富文化内涵、习语或隐喻的句子时…...

地质科研智能革命:当大语言模型“扎根”地质现场、大语言模型本地化部署与AI智能体协同创新实践

在地质学迈向“深时数字地球”&#xff08;Deep-time Digital Earth&#xff09;的进程中&#xff0c;传统研究方法正面临海量异构数据&#xff08;地质图件、遥感影像、地震波谱等&#xff09;的解析挑战。大语言模型&#xff08;LLM&#xff09;与AI智能体的本地化部署技术&a…...

蓝桥王国(Dijkstra优先队列)

问题描述 小明是蓝桥王国的王子&#xff0c;今天是他登基之日。 在即将成为国王之前&#xff0c;老国王给他出了道题&#xff0c;他想要考验小明是否有能力管理国家。 题目的内容如下&#xff1a; 蓝桥王国一共有 N 个建筑和 M 条单向道路&#xff0c;每条道路都连接着两个…...

美团mtgsig1.1 分析 mtgsig

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 mtgsig有问题的请求3次左右…...

基于STM32、HAL库的CH224Q快充协议芯片简介及驱动程序设计

一、简介&#xff1a; CH224Q是一款USB Type-C快充协议芯片&#xff0c;支持多种快充协议&#xff0c;包括&#xff1a; USB PD 3.0 QC4 QC3.0/2.0 AFC FCP SCP APPLE 2.4A BC1.2 该芯片通过I2C接口与主控MCU通信&#xff0c;可以灵活配置输出电压和获取充电状态信息…...

SvelteKit 最新中文文档教程(18)—— 浅层路由和 Packaging

前言 Svelte&#xff0c;一个语法简洁、入门容易&#xff0c;面向未来的前端框架。 从 Svelte 诞生之初&#xff0c;就备受开发者的喜爱&#xff0c;根据统计&#xff0c;从 2019 年到 2024 年&#xff0c;连续 6 年一直是开发者最感兴趣的前端框架 No.1&#xff1a; Svelte …...

蓝桥杯-数字诗意

问题描述 在诗人的眼中&#xff0c;数字是生活的韵律&#xff0c;也是诗意的表达。 小蓝&#xff0c;当代顶级诗人与数学家&#xff0c;被赋予了"数学诗人"的美誉。他擅长将冰冷的数字与抽象的诗意相融合&#xff0c;并用优雅的文字将数学之美展现于纸上。 某日&a…...

深入探索 Node.js 文件监听机制:从前端工程化到原理剖析

在现代化前端开发中&#xff0c;文件监听&#xff08;File Watching&#xff09;是实现高效开发体验的核心技术之一。从 webpack 的热模块替换到 Vite 的即时刷新&#xff0c;从 CSS 预处理到静态资源打包&#xff0c;背后都依赖于稳健的文件监听机制。本文将深入探讨基于 Node…...

2025 年河北交安安全员考试:巧用行业报告丰富知识储备​

河北交通行业发展迅速&#xff0c;各类行业报告蕴含大量有价值信息。考生可从河北省交通运输行业发展报告、安全专项检查报告等资料入手。在行业发展报告中&#xff0c;了解本省交通建设规模、重点项目规划等内容&#xff0c;这些信息与交安安全员工作紧密相关。比如&#xff0…...

Java9新特性

新的Jshell Java9引入了交互式编程工具jshell&#xff0c;可用于快速测试和学习Java。 特性 该工具可用于快速测试代码片段&#xff0c;无需创建java文件。支持自动补全和历史命令支持保存和加载会话 不可变集合工厂方法 Java9新增了List.of()、Set.of()、Map.of()和Map.o…...

CS内网渗透 - 如何通过冰蝎 Webshell 上线 Weblogic 服务器到 Cobalt Strike 并绕过杀软检测(360、火绒)?

目录 1. 冰蝎连接上 Weblogic 服务器如何上线到 Cobalt Strike 2. 服务器安装杀毒工具如何绕过杀软上线到 Cobalt Strike 2.1 杀软对 Webshell 命令执行的检测及绕过 2.2 杀软对 Cobalt Strike 上线木马的检测及绕过 2.3 杀软对这两方面的限制及综合绕过 3. 如何生成免杀…...

Linux开发过程中常用命令整理

docker ps -a查看所有(包括已经停止的) systemctl 功能&#xff1a;控制系统服务的启动关闭等 语法&#xff1a;systemctl start | stop | restart | disable | enable | status 服务名​ start&#xff0c;启动stop&#xff0c;停止status&#xff0c;查看状态disable&#xf…...

触想工业一体机助力打造安全智能的数字化配电系统

一、项目开发背景 现代社会运行依赖稳定的电力供应&#xff0c;尤其在工业生产、城市基础设施、商业建筑等关键领域&#xff0c;即便是0.1秒的电力中断也可能导致严重后果。同时&#xff0c;随着全球用电负荷加剧及能源结构转型&#xff0c;对电力系统的运维效率、能源利用和数…...

从代码学习深度学习 - 序列到序列学习 GRU编解码器 PyTorch 版

文章目录 前言一、数据加载与预处理1.1 读取数据1.2 预处理数据1.3 词元化1.4 词频统计1.5 构建词汇表1.6 截断与填充1.7 转换为张量1.8 创建数据迭代器1.9 整合数据加载二、训练辅助工具2.1 时间记录器2.2 累加器2.3 准确率计算2.4 GPU 上的准确率评估2.5 GPU 设备选择2.6 梯度…...

华为AI-agent新作:使用自然语言生成工作流

论文标题 WorkTeam: Constructing Workflows from Natural Language with Multi-Agents 论文地址 https://arxiv.org/pdf/2503.22473 作者背景 华为&#xff0c;北京大学 动机 当下AI-agent产品百花齐放&#xff0c;尽管有ReAct、MCP等框架帮助大模型调用工具&#xff0…...

基于PyTorch 实现一个基于 Transformer 架构的字符级语言模型

这篇教程将带你一步步在 JupyterLab 中实现一个简单的语言模型。我们将从零开始&#xff0c;使用 PyTorch 实现一个基于 Transformer 架构的字符级语言模型。尽管在实际应用中&#xff0c;大多数人更倾向于使用 Hugging Face 的预训练模型&#xff0c;但本文的目的是让你了解语…...

苹果签名的工具有哪些

嗯&#xff0c;用户问的是关于苹果企业签名的工具有哪些。首先&#xff0c;我需要确认用户的需求。苹果企业签名通常指的是使用苹果的企业开发者账号&#xff08;Apple Developer Enterprise Program&#xff09;来对应用进行签名&#xff0c;这样应用可以不通过App Store直接分…...

解决.net接口防暴力调用问题

在 .NET 中&#xff0c;为解决接口防暴力调用问题&#xff0c;可通过限制请求频率实现。下面给出几种不同实现方式。 基于内存的简单速率限制 此方法适用于单服务器环境&#xff0c;它借助内存字典来记录每个客户端的请求次数和时间。 MemoryRateLimitMiddleware.cs using …...

java设计模式-桥接模式

桥接模式(Bridge) 基本介绍 1、桥接模式(Bridge)是指&#xff1a;将实现与抽象放在两个不同的类层次中&#xff0c;是两个层次可以独立改变。 2、是一种结构设计模 3、Bridge模式给予类的最小单元设计原则&#xff0c;通过使用封装&#xff0c;聚合及继承等行为让不同的类承担不…...

cdw2: TypeScript

一、javascript的问题 二、初识typescript https://mp.weixin.qq.com/s/wnL1l-ERjTDykWM76l4Ajw 三、类型 二进制&#xff1a;ob开头&#xff0c;八进制&#xff1a;0o开头&#xff0c;十六进制&#xff1a;0x开头 开发中不这样写 这样写 匿名函数的参数最好不要…...

Linux驱动开发:SPI驱动开发原理

前言 本文章是根据韦东山老师的教学视频整理的学习笔记https://video.100ask.net/page/1712503 SPI 通信协议采用同步全双工传输机制&#xff0c;拓扑架构支持一主多从连接模式&#xff0c;这种模式在实际应用场景中颇为高效。其有效传输距离大致为 10m &#xff0c;传输速率…...

Java 通过 JNI 调用 C++ 动态库的完整流程

介绍使用 JNI 调用 C 编写的动态链接库的全过程。 示例环境 项目说明JDK8C 编译器Visual Studio 2019Java 开发工具IntelliJ IDEA 2021.3操作系统Windows 10 Java 项目结构概览 编写 Java 类 在 org.jni.nativejni 包下创建类 HelloWorldJni.java&#xff1a; package org…...

oracle 11g密码长度和复杂度查看与设置

一 查看当前的密码复杂度设置 SELECT * FROM dba_profiles WHERE resource_name PASSWORD_VERIFY_FUNCTION; LIMIT表示分配给该 PROFILE 的密码验证函数名称。如果为 NULL&#xff0c;表示未设置密码验证函数。 #查看是否有相关密码验证函数 select object_name from dba…...

1021 Deepest Root

1021 Deepest Root 分数 25 全屏浏览 切换布局 作者 CHEN, Yue 单位 浙江大学 A graph which is connected and acyclic can be considered a tree. The height of the tree depends on the selected root. Now you are supposed to find the root that results in a highest…...

1. 三带一

所谓“三带一”牌型&#xff0c;即四张手牌中&#xff0c;有三张牌一样&#xff0c;另外一张不与其他牌相同&#xff0c;换种说法&#xff0c;四张手牌经过重新排列后&#xff0c;可以组成 AAABAAAB 型。 输入格式 第一行输入一个整数 TT &#xff0c;代表斗地主的轮数。 接…...

pytorch计算图Computation_graph是什么

文章目录 一、AI系统中的计算图&#xff08;宏观&#xff09;二、动态计算图&#xff08;微观&#xff09;2.1 张量计算图2.2 计算图的定义2.3 节点类型2.4 计算图的动态性2.5 计算图的正向传播是立即执行的2.6 计算图在反向传播后立即销毁2.7 计算图中的Function2.8 计算图与反…...

HTML5元素

HTML5的<section>元素和<article>元素 <section>元素定义文档中的一部分&#xff0c;着重于对页面内容进行分块或者分段&#xff0c;通常可以分为引言、内容和联系人信息等几个部分。 <section><h1>WWF</h1><p>WWF 是世界自然基金…...

单reactor实战

前言&#xff1a;reactor作为一种高性能的范式&#xff0c;值得我们学习 本次目标 实现一个基于的reactor 具备echo功能的服务器 核心组件 Reactor本身是靠一个事件驱动的框架,无疑引出一个类似于moduo的"EventLoop "以及boost.asio中的context而言&#xff0c;不断…...

【C#知识点详解】LinkedList<T>储存结构详解

今天来介绍一下LinkedList<T>的内部结构&#xff0c;说不多说直接开始。 内部数据 LinkedList是一个双向链表结构的容器&#xff0c;其内部为非连续的内存空间。LinkedList包含的主要成员示例如下&#xff1a; //起始LinkedListNode节点 internal LinkedListNode<T&g…...

智能穿梭车在快消行业的融合升级:效率革命与数据智能的双重赋能

快消品牌&#xff08;FMCG&#xff09;的核心挑战在于高频周转、海量SKU、短时效性&#xff0c;而智能穿梭车的技术进化&#xff08;如AI调度、5G通信、柔性载具&#xff09;与快消行业的业务需求&#xff08;如全渠道订单履约、动态库存优化&#xff09;深度结合&#xff0c;正…...

(二)链表结构

备注&#xff1a;根据coderwhy数据结构与算法课程进行笔记总结 1.数组缺点&#xff1a; 数组创建通常需要申请一段连续的内存空间&#xff0c;且大小固定&#xff0c;因此当前数组不能满足容量需求时&#xff0c;就需要扩容。在数组开头或中间位置插入数据成本很高&#xff0…...

oracle json笔记

文章目录 json_valuejson_value示例json_value on error如何使用 TODO json_queryjson_query示例 json_tablejson_table 示例 json_existsjson_exists示例json_exists报错 ORA-40458: 在谓词外部使用了 JSON_EXISTS json_objectjson_arrayjson_mergepatchjson_objectaggjson_ar…...

c编译和c++编译有什么区别?

文章目录 c编译和c编译有什么区别多态函数重载虚函数表 vtable 输入输出同步类型检查模板和特化链接 C 标准库 C 能编译 C 的代码吗&#xff1f; c编译和c编译有什么区别 多态 函数重载 C 支持多个同名函数&#xff08;参数不同&#xff09;&#xff0c;这是编译期多态 编译…...

【Mysql】主从复制和读写分离

一、定义 1、什么是读写分离&#xff1f; 在主库master上负责处理事务性写入操作&#xff0c;在从库slave上负责处理查询操作&#xff0c;并通过主从复制将主库上的数据同步给从库。 2、为什么要读写分离&#xff1f; 从集中到分布&#xff0c;最基本的一个需求不是数据存储的…...

泛目录排名——深入理解与优化 SEO:提升网站可见性的关键策略

https://www.zhanqun.xin/ 在数字化时代&#xff0c;互联网上的信息呈爆炸式增长。对于企业和网站运营者而言&#xff0c;如何让自己的网站在海量的网络内容中脱颖而出&#xff0c;吸引目标受众的关注&#xff0c;成为了一项至关重要的挑战。搜索引擎优化&#xff08;SEO&#…...

汇丰eee2

聚合和继承有什么样的优点和区别&#xff0c;什么时候决定用&#xff0c;现实开发中&#xff0c;选择哪一种去使用&#xff1f; 聚合的优点&#xff1a; 灵活性&#xff1a; 聚合是一种弱耦合关系&#xff0c;被聚合对象可以独立存在&#xff0c;可以灵活地替换或修改被聚合对…...

C#网络编程(Socket编程)

文章目录 0、写在前面的话1、Socket 介绍1.1 Socket是什么1.2 Socket在网络中的位置 2、C# 中的Socket参数2.1 超时控制参数2.2 缓冲区参数2.3 UDP专用参数 3、C# 中的Socket API3.1 Socket&#xff08;构造函数&#xff09;3.1.1 SocketType3.1.2 ProtocolType3.1.3 AddressFa…...

使用Python的Schedule库实现定时任务,并传递参数给任务函数

哈喽,大家好,我是木头左! 本文将详细介绍如何使用schedule库来创建定时任务,并展示如何向任务函数传递参数。 安装Schedule库 需要安装schedule库。你可以使用以下命令通过pip进行安装: pip install schedule基本用法 schedule库的基本用法非常简单。你可以通过调用sch…...

Unity Input 2023 Release-Notes

&#x1f308;Input 2023 Release-Notes 版本更新内容2023.2.17Input: Crash on InputDeviceIOCTL when closing Unity editor(UUM-10774)2023.2.16Input: Crash on InputDeviceIOCTL when closing Unity editor(UUM-10774)2023.2.15Input: Crash on InputDeviceIOCTL when clo…...

IP查询能够帮助企业进行数字化转型

企业如今正面临着用户行为碎片化、市场竞争白热化的挑战。那么企业要如何从海量网络数据中精准捕捉用户需求就十分重要了。而IP查询技术也正帮助越来越多的企业在精准营销、风险防控、合规运营等领域开辟新的增长空间。 https://www.ipdatacloud.com/?utm-sourceLMN&utm-…...

Nginx漏洞复现

vulhub起靶场 Nginx 文件名逻辑漏洞&#xff08;CVE-2013-4547&#xff09; 上传1.gif&#xff0c;内容为 <?php phpinfo();?> http://your-ip:8080/uploadfiles/1.gif[0x20][0x00].php访问文件位置&#xff0c;这里0x00要改包 先访问/uploadfiles/1.gif a.php&…...

数据结构|排序算法(二)插入排序 希尔排序

一、插入排序 1.算法思想 插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;其基本思想是&#xff1a;将待排序的元素插入到已经有序的序列中&#xff0c;从而逐步构建有序序列。 具体过程如下&#xff1a; 把待排序的数组分为已排序和未排…...