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

深度学习-图神经网络-超图概念及在Hyper-YOLO的应用(小白也看懂)

为什么需要超图?

在一个复杂系统中,某些节点(实体)之间的互动可能不是仅限于两个节点之间的关系,而是多个节点同时参与的更复杂的关系(超边)。简单说就是为了更好的描述事物之间的关系,为了方便数学建模。

超图 表示为一个二元组:

G=(V,E)

其中 V 是有限顶点集合,E是有限超边集合。加权超图,增加了超边的权重:

G=(V,E,w)

w(e)表示超边e的权重,w(e)\geqslant 0超边的权重是给每个超边分配一个实数值,以表示其重要性或影响力。

顶点集的大小被称为超图的阶数 order of the hypergraph,边集的大小被称为超图的大小 size of the hypergraph。

重要概念:

顶点的度d(v),指包含该顶点的所有超边的权重之和。

超边的度\delta (e),就是该边包含的顶点个数:\delta (e)= \left | e \right |

相邻、关联
1、相邻,点对点:如果存在包含两个顶点的超边,则超图中的两个顶点是相邻的(adjacent)。

就是说两个顶点在同一个超边上,就是相邻。

     边对边:如果{ x } 是超边,则 x与其自身相邻。

2、关联,边对边:两边相交关联的( incident),两超边的顶点交集非空。

     点对边:v\in e, 称 v 与 e 关联。用于关联矩阵


超图的关联矩阵表示法                        

超图 G 除了用二元组或三元组外,还可以用关联矩阵来表示。

关联矩阵 A,用于表征顶点和超边之间的关联关系,形式如下:

  • 行表示顶点,列表示超边,元素值为1表示顶点在该超边中,0表示不在。
  • 或者行表示边,列表示顶点,一样,两种方式。

利用关联矩阵H,顶点的度可表示为:

超边的度可表示为:

超图邻接矩阵A:

其中,W表示权重对角矩阵,D_v表示顶点度对角矩阵,对角线元素为每个顶点的度。

具体例子:下面是一个 3\times 5 关联矩阵,3边5点。

对偶矩阵,即关联矩阵的转置(如下图就是上面矩阵转置)。也很容易看出,任何导出子超图的关联矩阵(H的子超图,部分超图)是H的关联矩阵的子矩阵。

超图邻接矩阵A:

定义:

这个矩阵是对称方阵(维度等于超图顶点数),它也是多重图的矩阵。一般关联矩阵用得比较多。这个定义可能有点抽象,直接记住计算公式

其中,W表示权重对角矩阵,D_v表示顶点度对角矩阵(对角线元素为每个顶点的度)。例如上面超图的邻接矩阵,经过计算为:

拉普拉斯矩阵

超图的拉普拉斯矩阵L定义为:

L=D_e-A^TA

其中 D_e 是超边的度矩阵,对角线元素为每个超边的大小。

超图熵
代数上的超图熵(algebraic hypergraph entropy) :

空间域超图卷积

空间域卷积是通过顶点的邻接信息来聚合信息,通常是将邻接的信息聚合到中心节点。

其中,X^l 与 X^(l+1) 表示第 l 层与第(l+1)层的输入,D是顶点度矩阵(n阶方阵),B是超边的度矩阵(m阶方阵),\sigma是非线性激活函数,P表示第 l 层与第(l+1)层的权重矩阵,是可学习的权重矩阵。H 是 (n\times m) 超图的关联矩阵(n个顶点,m条超边)。W是超图的权重对角阵。

超图卷积的物理含义
超图卷积的物理含义可以理解为:在一个复杂系统中,某些节点(实体)之间的互动可能不是仅限于两个节点之间的关系,而是多个节点同时参与的更复杂的关系(超边)。超图卷积通过聚合这些高维关系的信息,为每个节点提供更丰富的特征表示,从而更好地捕捉系统中的复杂互动。

频域超图卷积

频域卷积是基于拉普拉斯算子进行频域分析,通常用于频率特征的提取。

公式
在频域,超图卷积可通过以下方式定义:

H{}'=UDU^TH

其中 U是拉普拉斯矩阵的特征向量,D是特征值矩阵。

HyperGCN 中的谱域图卷积通过利用超图的结构及其拉普拉斯矩阵来聚合特征信息,这为半监督学习提供了有效的方法。典型的谱域图卷积公式如下:

其中:

  • H是输入特征矩阵。
  • H′是输出特征矩阵。

进行基于谱域的图卷积的计算步骤如下:

什么是超图注意力?
        1、超图的注意力目标是学习一个动态关联矩阵。获得能够更好地揭示顶点间内在关系地动态转移矩阵。
       2、要使在H上用注意力机制模块,必须假定边和顶点是可比的。这取决于超图如何构造。
       3、例如可以将中心节点和k个最近邻节点共同形成一个超边。当节点和超边可以比较时,可以得到超图的注意力机制。


超图分类,如:

空超图 Empty hypergraph:没有边的超图;
非简单超图 Non-simple (or multiple) hypergraph :允许有环 loops(有单个顶点的超边)或重复边的超图;
简单超图 Simple hypergraph :不包含循环和重复边的超图;
k一致超图 k-uniform hypergraph:每条超边都正好包含 k 个顶点的超图;
d正则超图 d-regular hypergraph:每个顶点的度数都是 𝑑 的超图;
无环超图 Acyclic hypergraph:不包含任何环的超图。

超图的特性
1、每个超图都有一个对应的对偶超图。对偶超图就是通过将原超图的顶点和边进行交换。
如超图的关联矩阵H是一个表示顶点和边之间关系的布尔矩阵,与它的转置H^T对偶。

2、边的交集有大小
在普通图中,所有边的大小都是2,但在超图中,边的大小可以是任意数值。

3、边可以嵌套

4、超图与二分图(bipartite graph)有着一对一的对应关系。超图的布尔关联矩阵H也可以看作二元关系的特征矩阵。

其他概念或属性

1. 空超边(Empty Hyperedges)
如果关联矩阵中的某一列全部为零,这表示该超边是空的,也就是没有任何顶点与它关联。空超边在一些复杂的超图中是允许存在的。

2. 孤立顶点(Isolated Vertices)
如果关联矩阵中的某一行全部为零,这表示该顶点是孤立的,也就是该顶点没有连接到任何超边。

3. 多重超图(Multihypergraphs)
允许重复的超边,这意味着在关联矩阵中,可能会有重复的列(表示相同的超边重复出现)。

4. 自环(Self-Loops)
自环表示图中的某条边可以连接到自己。在通常的图结构中,边通常是连接两个不同的顶点,而在允许自环的结构中,边可以连接到同一个顶点,这是一种特殊的连接方式。

5. 方向(Direction)
有些图中的边可以被赋予方向性,也就是边的连接有输入和输出的顶点。在这种情况下,某些顶点被视为“输入”,而另一些顶点则是“输出”。这种定向连接在网络模型中经常使用,比如表示信息流、交通流等。

6. 顺序(Order)
在某些超图中,顶点可能具有特定的顺序。这种顺序可能是全序或部分序。对于图而言,这相当于定向边的概念,但在超图中,顺序的复杂性更高,因为超边可以连接多个顶点。

7. 属性(Attributes)
一般来说,我们可以在图或超图的顶点、边或“关联关系”上附加属性。这些属性可以是不同的数据类型,例如权重、标签、标识符、类型、字符串等。

8、步行(walk)是指一系列相邻边的序列 W=〈e0,e1,…,eN〉,其中每对相邻边是相交的。步行的长度 N 是步行中边的数量。

9、s-步行 是指在超图中两条边之间的最短路径,它的特点是需要更宽的连接。具体来说,两个顶点或超边之间的 s-距离 是它们之间最短 s-步行 的长度。

10、子超图 subhypergraph 是去掉某些顶点的超图。

11、部分超图 partial hypergraph是去掉一些边的超图。

12、如果每个顶点的度都为k,则超图H是k-正则的。一致超图的对偶是正则的,反之亦然。

此外还有 分段超图 section hypergraphs,盖夫曼图 Gaifman graph),对称超图,横切面等概念。

同构

超图同态 homomorphism是指从一个超图的顶点集到另一个超图的顶点集的映射,如此使得每条边映射到另一条边。

超图已被广泛用于机器学习中,常作为一种数据结构或一种正则化属性分类器 classifier regularization。 这些应用包括推荐系统 recommender system (社团作为超边)、图像检索 image retrieval(相关性作为超边) 、和生物信息学(生物、化学分子间相互作用作为超边)。

比较典型的超图机器学习方法包括:超图谱聚类法 spectral clustering(用拉普拉斯超图 hypergraph Laplacian 扩展光谱图理论 spectral graph theory)和超图半监督学习 semi-supervised learning(通过引入超图结构来对结果进行限定)。对于大尺寸的超图,可以使用Apache Spark构建的分布式框架。

简单的超图定义代码


from typing import List
import numpy as np
import os
import jsonclass Vertex:def __init__(self, name: str = None, weight: float = None):self.name = nameself.weight = weightclass Edge:def __init__(self, name: str = None, weight: float = None, vertices: List[Vertex] = None):""":param name: 名字:param weight: 权重:param vertices: 顶点集合"""self.name = nameself.weight = weightself.vertices = verticesclass Hypergraph(object):def __init__(self, vertices: List[Vertex] = None, edges: List[Edge] = None):self.vertices = verticesself.edges = edgesif vertices is None or edges is None:self.num_vertices = 0self.num_edges = 0self.incident_matrix = Noneself.vertices_degree = Noneself.edges_degree = Noneself.vertex_degree_diagonal_matrix = Noneself.edge_degree_diagonal_matrix = Noneelse:self.num_vertices = len(vertices)self.num_edges = len(edges)self.incident_matrix = self.calculate_incident_matrix()self.vertices_degree = self.calculate_vertex_degree()self.edges_degree = self.calculate_edge_degree()self.vertex_degree_diagonal_matrix = self.calculate_diagonal_matrix_of_vertex_degree()self.edge_degree_diagonal_matrix = self.calculate_diagonal_matrix_of_edge_degree()def init_hypergraph_from_files(self, dataset_dir: str):self.vertices, self.edges = hypergraph_construction(dataset_dir)self.num_vertices = len(self.vertices)self.num_edges = len(self.edges)self.incident_matrix = self.calculate_incident_matrix()self.vertices_degree = self.calculate_vertex_degree()self.edges_degree = self.calculate_edge_degree()self.vertex_degree_diagonal_matrix = self.calculate_diagonal_matrix_of_vertex_degree()self.edge_degree_diagonal_matrix = self.calculate_diagonal_matrix_of_edge_degree()def calculate_incident_matrix(self):"""Calculate the incident matrix of the hypergraph.:return: The incident matrix of the hypergraph."""incident_matrix = np.zeros(shape=(self.num_vertices, self.num_edges), dtype=int)for i in range(self.num_vertices):vertex = self.vertices[i]for j in range(self.num_edges):edge = self.edges[j]if vertex in edge.vertices:incident_matrix[i, j] = 1return incident_matrixdef calculate_vertex_degree(self):"""Calculate the degree of vertices in the hypergraph.:return: The degree of vertices in the hypergraph."""edge_weights = np.zeros(shape=(self.num_edges,), dtype=np.float64)for i in range(self.num_edges):edge = self.edges[i]edge_weights[i] = edge.weightedge_weights = edge_weights.reshape(-1, 1)vertex_degree_array = np.dot(self.incident_matrix, edge_weights)return vertex_degree_array.reshape(vertex_degree_array.size, )def calculate_edge_degree(self):"""Calculate the degree of edges in the hypergraph.:return: The degree of edges in the hypergraph."""edges_degree = self.incident_matrix.sum(axis=0)return edges_degreedef calculate_diagonal_matrix_of_vertex_degree(self):"""Create a diagonal matrix with the degrees of vertex as the diagonal elements.:return: The diagonal matrix."""return np.diag(self.vertices_degree)def calculate_diagonal_matrix_of_edge_degree(self):"""Create a diagonal matrix with the degrees of edge as the diagonal elements.:return: The diagonal matrix."""return np.diag(self.edges_degree)def hypergraph_construction(dataset_dir: str) -> (List[Vertex], List[Edge]):vertices = []edges = []# 假设数据集包含一个 JSON文件,其中包含顶点和超边的信息#json_file_path = os.path.join(dataset_dir, 'hypergraph_data.json')with open(dataset_dir, 'r') as file:data = json.load(file)# 处理顶点if 'vertices' in data:for v in data['vertices']:vertex = Vertex(name=v['name'], weight=v.get('weight', 1.0))vertices.append(vertex)# 处理超边if 'edges' in data:for e in data['edges']:edge_vertices = []for v_name in e['vertices']:vertex = next((v for v in vertices if v.name == v_name), None)if vertex is not None:edge_vertices.append(vertex)edge = Edge(name=e['name'], weight=e.get('weight', 1.0), vertices=edge_vertices)edges.append(edge)return vertices, edges"""{  "vertices": [  {"name": "v1", "weight": 1.0},  {"name": "v2", "weight": 0.5},  {"name": "v3", "weight": 1.5},  {"name": "v4", "weight": 1.0},  {"name": "v5", "weight": 2.0},  {"name": "v6", "weight": 1.0},  {"name": "v7", "weight": 0.8},  {"name": "v8", "weight": 1.0}  ],  "edges": [  {"name": "e1", "vertices": ["v1", "v2", "v3"], "weight": 1.0},  {"name": "e2", "vertices": ["v1", "v4"], "weight": 2.0},  {"name": "e3", "vertices": ["v2", "v3", "v5", "v6"], "weight": 1.5}  ]  
}"""if __name__ == '__main__':ma = Hypergraph()ma.init_hypergraph_from_files('hypergraph_data.json')

基于超图的跨级别和跨位置表示网络

Hyper-YOLO 框架中,主干网络被划分为五个离散阶段。这些阶段的特征图被表示为 {B1,B2,B3,B4,B5}。对五个基础特征进行通道级的拼接,合成跨级别视觉特征。使用距离阈值从每个特征点构建一个 ε-球,该 ε-球将作为超边,如下图所示。ε-球是一个超边,包含距离中心特征点在一定阈值内的所有特征点。

数学定义:

表示指定顶点 v的邻居顶点集。∥x−y∥是距离函数。

空间域超图卷积计算过程如下(添加了残差):

超图信息传递的矩阵表达式

其中 N_v(e)N_e(v)是两个邻居指示函数:

N_v(e)=\left \{ v|v\in e,v\in V \right \} 和 N_e(v)=\left \{ e|v\in e,e\in E \right \}

D_v 和 D_e 分别表示顶点度对角阵、超边对角度矩阵。

H 是超图关联矩阵,\Theta 是一个可训练参数。

基于超图的跨级别和跨位置表示网络(HyperC2Net)

其中 ∥∥ 表示矩阵拼接操作,Φ是融合函数。

Hyper-YOLO 框架

Hyper-YOLO 开源代码

延伸

超图相似度,相似度函数

正核和相似度(略)、 超图态射(略)、超图的分割(略)。

相关文章:

深度学习-图神经网络-超图概念及在Hyper-YOLO的应用(小白也看懂)

为什么需要超图? 在一个复杂系统中,某些节点(实体)之间的互动可能不是仅限于两个节点之间的关系,而是多个节点同时参与的更复杂的关系(超边)。简单说就是为了更好的描述事物之间的关系&#xf…...

django基于Python的校园个人闲置物品换购平台

Django 基于 Python 的校园个人闲置物品换购平台 一、平台概述 Django 基于 Python 的校园个人闲置物品换购平台是专为校园师生打造的一个便捷、环保且充满活力的线上交易场所。它借助 Django 这一强大的 Python Web 开发框架,整合了校园内丰富的闲置物品资源&…...

opencv的NLM去噪算法

NLM(Non-Local Means)去噪算法是一种基于图像块(patch)相似性的去噪方法。其基本原理是: 图像块相似性:算法首先定义了一个搜索窗口(search window),然后在该窗口内寻找…...

嵌入式系统中的 OpenCV 与 OpenGLES 协同应用

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一、OpenCV 在嵌入式中的基石地位二、OpenGLES 为嵌入式图形渲染赋能三、二者协同的精妙之处四、面临的挑战与应对策略 在嵌入式开…...

第三十六章 Spring之假如让你来写MVC——拦截器篇

Spring源码阅读目录 第一部分——IOC篇 第一章 Spring之最熟悉的陌生人——IOC 第二章 Spring之假如让你来写IOC容器——加载资源篇 第三章 Spring之假如让你来写IOC容器——解析配置文件篇 第四章 Spring之假如让你来写IOC容器——XML配置文件篇 第五章 Spring之假如让你来写…...

DDD - 如何运用 DDD 进行数据库设计

文章目录 Pre概述领域对象持久化的思想领域模型的设计传统的 4 种关系1. 一对一关系2. 多对一关系3. 一对多关系4. 多对多关系 继承关系的 3 种设计1. 继承关系的第一种方案:整个父类与子类都写入一张表2. 继承关系的第二种方案:各子类各自对应各自的表3…...

OSPF - 特殊报文与ospf的机制

👠1 携带FA地址的5类LSA 除去7类转5类的LSA会携带FA地址,还有一种情况会有FA地址 FA地址:forwarding address 转发地址,解决次优路径,避免环路5类LSA FA地址不为0,则直接通过FA地址去往目标网段 FA地址为0&#xff0c…...

VSCode 插件

VSCode 插件 1. GitHub Copilot - AI 代码助手 功能:根据上下文提供实时代码补全,支持自然语言转代码,提供符合现代编程规范的建议。进阶技巧: 使用快捷键 Alt ] 切换多个建议。写注释时,描述业务逻辑而不是具体实现…...

jQuery CSS 类

jQuery CSS 类 引言 在网页设计和开发中,CSS(层叠样式表)起着至关重要的作用,它负责定义网页的布局、颜色、字体等视觉效果。jQuery,作为一个快速、小巧且功能丰富的JavaScript库,极大地简化了HTML文档的…...

CentOS下安装Docker

Docker 必须要在Linux环境下才能运行,windows下运行也是安装虚拟机后才能下载安装运行,菜鸟教程 下载安装 linux 依次执行下边步骤 更新 yum yum update 卸载旧的Docker yum remove docker docker-client docker-client-latest docker-common doc…...

SQLAlchemy

https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里,我们定义模块级构造,这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射,它同时定…...

2025年第三届“华数杯”国际赛A题解题思路与代码(Python版)

游泳竞技策略优化模型代码详解 第一题:速度优化模型 在这一部分,我们将详细解析如何通过数学建模来优化游泳运动员在不同距离比赛中的速度分配策略。 1. 模型概述 我们的模型主要包含三个核心文件: speed_optimization.py: 速度优化的核…...

深入架构剖析 博客点赞逻辑 strategy 策略模式 策略接口 上下文 具体策略 项目实战

目录 点赞策略上下文 策略上下文代码详解 1. 策略模式概述 2. 核心组件 3. 代码解读 LikeStrategyContext 类 LikeTypeEnum 枚举 LikeStrategy 接口 具体策略类 4. 如何使用这个设计 5. 优点 6. 总结 具体代码实现 定义枚举类 从控制层传入参数到上下文 在策略上…...

嵌入式Linux之C语言开发基础

一、C 语言编译过程 Linux 的 C 语言开发,一般选择 GCC 工具链进行编译,示例: 1.mkdir helloworld 2.cd helloworld // 1.main.c #include "hello.h" int main() {say_hello();return 0; } // 2.hello.h #ifndef __HELLO_H__ #de…...

std::accumulate

std::accumulate 是 C 标准库中的一个算法&#xff0c;定义在 <numeric> 头文件中。它用于计算给定范围内元素的累积值&#xff08;通常是一个和&#xff0c;但也可以是其他类型的累积操作&#xff09;。 template< class InputIt, class T > T accumulate( Input…...

计算机网络 (33)传输控制协议TCP概述

一、定义与基本概念 TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它工作在OSI模型的第四层&#xff0c;即传输层&#xff0c;为用户提供可靠的、有序的和无差错的数据传输服务。TCP协议与UDP协议是传输层的两大主要协议&#xff0c;但两者在设计上有明显的不同&…...

Gitee图形界面上传(详细步骤)

目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe&#xff0c;顺序不能搞错2. …...

【STM32-学习笔记-6-】DMA

文章目录 DMAⅠ、DMA框图Ⅱ、DMA基本结构Ⅲ、不同外设的DMA请求Ⅳ、DMA函数Ⅴ、DMA_InitTypeDef结构体参数①、DMA_PeripheralBaseAddr②、DMA_PeripheralDataSize③、DMA_PeripheralInc④、DMA_MemoryBaseAddr⑤、DMA_MemoryDataSize⑥、DMA_MemoryInc⑦、DMA_DIR⑧、DMA_Buff…...

苍穹外卖08——(涉及接收日期格式数据、ApachePOI导出报表、sql获取top10菜品数据)

营业额统计 service层 在需要处理空值、与数据库交互或使用集合时&#xff0c;Integer 、Double是更好的选择。 // 导入string工具类 import org.apache.commons.lang.StringUtils; Service // 标记该类为Spring的服务组件 Slf4j // 引入日志功能 public class Repor…...

Node.js——fs(文件系统)模块

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…...

【Docker】入门教程

目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …...

Ubuntu中使用miniconda安装R和R包devtools

安装devtools环境包 sudo apt-get install gfortran -y sudo apt-get install build-essential -y sudo apt-get install libxt-dev -y sudo apt-get install libcurl4-openssl-dev -y sudo apt-get install libxml2.6-dev -y sudo apt-get install libssl-dev -y sudo apt-g…...

大语言模型预训练、微调、RLHF

转发&#xff0c;如有侵权&#xff0c;请联系删除&#xff1a; 1.【LLM】3&#xff1a;从零开始训练大语言模型&#xff08;预训练、微调、RLHF&#xff09; 2.老婆饼里没有老婆&#xff0c;RLHF里也没有真正的RL 3.【大模型微调】一文掌握7种大模型微调的方法 4.基于 Qwen2.…...

啥!GitHub Copilot也免费使用了

文章目录 前言免费版直接修复代码多文件上下文Agent模式总结 前言 最近&#xff0c;GitHub 给开发者们带来了一个好消息&#xff1a;他们的 AI 编程助手 GitHub Copilot 现在可以免费使用了&#xff01;以前&#xff0c;每个月要花 10 美元才能享受的服务&#xff0c;现在对所…...

【Ubuntu与Linux操作系统:五、文件与目录管理】

第5章 磁盘存储管理 5.1 Linux磁盘存储概述 磁盘存储是Linux系统存储数据的重要组件&#xff0c;它通过分区和文件系统组织和管理数据。Linux支持多种文件系统&#xff0c;如ext4、xfs和btrfs&#xff0c;并以块的形式管理存储设备。 1. 分区与文件系统&#xff1a; 分区&am…...

【PDF转Word】 PDF在线转word文档 好用!优质网站资源推荐

大家在工作与学习中&#xff0c;经常需要将PDF文件转换为Word格式以便进行编辑和修改。很多人都不知道怎么操作&#xff0c;今天我们介绍一个非常好用的工具&#xff1a;小白工具网&#xff0c;可以在线帮忙大家快速把PDF转换成word格式。 小白工具网提供的PDF转Word功能&…...

计算机网络 (38)TCP的拥塞控制

前言 TCP拥塞控制是传输控制协议&#xff08;Transmission Control Protocol&#xff0c;TCP&#xff09;避免网络拥塞的算法&#xff0c;是互联网上主要的一个拥塞控制措施。 一、目的 TCP拥塞控制的主要目的是防止过多的数据注入到网络中&#xff0c;使网络能够承受现有的网络…...

构造函数的原型原型链

代码示例 // 定义一个构造函数 Test function Test() {this.name 张三 }; //向构造函数的原型添加一个属性 age18 Test.prototype.age 18;//使用构造函数 Test 来实例化一个新对象 const test new Test();//向 Object.prototype 添加了一个名为 sex 的属性&#xff0c;其值…...

2025华数杯国际赛A题完整论文讲解(含每一问python代码+数据+可视化图)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2025“华数杯”国际大学生数学建模竞赛A题Can He Swim Faster的完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文…...

[RabbitMQ] RabbitMQ运维问题

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…...

GenAIOps:生成式 AI 运维 - 实用指南

https://medium.com/google-cloud/genaiops-operationalize-generative-ai-a-practical-guide-d5bedaa59d78​​​​​​ 作者&#xff1a;Dr Sokratis Kartakis 从创意到生产&#xff1a;使用生成式 AI 和运维 (GenAIOps) 概述 生成式 AI (GenAI) 的世界充满了令人兴奋的可…...

用户界面软件04

后果 使用这种架构很容易对两个层面的非功能性需求进行优化&#xff0c;但是你仍然需要小心不要将功能 需求重复实现。 现在&#xff0c;两个层面可能有完全不同的设计。比如&#xff0c;用户界面层可能使用配件模型&#xff08;Widget Model&#xff09;&#xff0c; 以大量的…...

分布式系统设计:Java的秘密基地布局

分布式系统设计是Java企业级开发中的一个关键领域&#xff0c;它涉及到构建高可用、可扩展、高性能的系统。以下是分布式系统设计的一些核心概念和实践&#xff1a; 3.1 分布式系统的特点 分布式系统由多个独立的计算机节点组成&#xff0c;这些节点通过网络连接在一起&#x…...

【Redis学习 | 第5篇】Redis缓存 —— 缓存的概念 + 缓存穿透 + 缓存雪崩 + 缓存击穿

文章目录 完成任务1. 什么是缓存2. 添加商户缓存3. 缓存更新策略3.1 主动更新 4. 缓存穿透5. 缓存雪崩6. 缓存击穿6.1 使用互斥锁查询商铺信息6.2 使用逻辑过期查询商铺信息 7. 封装 Redis 工具类 完成任务 1. 什么是缓存 缓存&#xff1a;数据交换的缓冲区&#xff08;Cache…...

MySQL索引覆盖(覆盖索引, Covering Index)

文章目录 说明MySQL索引覆盖&#xff08;覆盖索引, Covering Index&#xff09;覆盖索引的概念覆盖索引的示例示例查询及索引覆盖情况覆盖索引的性能优势覆盖索引的实现条件覆盖索引 vs 非覆盖索引覆盖索引的限制如何设计覆盖索引覆盖索引的实际案例场景 1&#xff1a;电商系统…...

VUE3 provide 和 inject,跨越多层级组件传递数据

provide 和 inject 是 Vue 3 提供的 API&#xff0c;主要用于实现祖先组件与后代组件之间的依赖注入。它们可以让你在组件树中&#xff0c;跨越多层组件传递数据&#xff0c;而不需要通过 props 或事件的方式逐层传递。这个机制主要用于状态共享、插件系统或某些跨层级的功能。…...

【UE5 C++课程系列笔记】29——在UE中使用第三方库的流程

目录 前言 步骤 一、新建插件 二、创建第三方库 三、使用第三方库 前言 主要就是介绍如何将普通C++工程生成的头文件和.dll导入到UE中去使用。 步骤 一、新建插件 1. 打开插件浏览器选项卡 2. 打开插件创建器 3. 选择“第三方库”,这里命名为“MyThirdPartyLibrary…...

Type-C双屏显示器方案

在数字化时代&#xff0c;高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步&#xff0c;一款结合了便携性和高效视觉输出的设备——双屏便携屏&#xff0c;逐渐崭露头角&#xff0c;成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…...

20250112面试鸭特训营第20天

更多特训营笔记详见个人主页【面试鸭特训营】专栏 250112 1. TCP 和 UDP 有什么区别&#xff1f; 特性TCPUDP连接方式面向连接&#xff08;需要建立连接&#xff09;无连接&#xff08;无需建立连接&#xff09;可靠性可靠的&#xff0c;提供确认、重传机制不可靠&#xff0c…...

使用conda出现requests.exceptions.HTTPError 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

玩转大语言模型——langchain调用ollama视觉多模态语言模型

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 langchain调用ollama视觉多模态语言模型 系列文章目录前言使用Ollama下载模型查找模型下载模型 测试模型ollama测试langchain测试加载图片加载模型…...

【玩转MacBook】mdfind命令搜索

mdfind 是 macOS 上的一个命令行工具&#xff0c;它允许用户根据元数据来查找文件。mdfind 使用 Spotlight 索引来快速搜索文件系统中的项目。这意味着它可以非常快地找到文件&#xff0c;因为它不直接在磁盘上搜索&#xff0c;而是查询由 Spotlight 维护的索引数据库。 基本用…...

数据结构与算法之二叉树: LeetCode 637. 二叉树的层平均值 (Ts版)

二叉树的层平均值 https://leetcode.cn/problems/average-of-levels-in-binary-tree/description/ 描述 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受 示例 1 输入&#xff1a;root…...

【巨实用】Git客户端基本操作

本文主要分享Git的一些基本常规操作&#xff0c;手把手教你如何配置~ ● 一个文件夹中初始化Git git init ● 为了方便以后提交代码需要对git进行配置&#xff08;第一次使用或者需求变更的时候&#xff09;&#xff0c;告诉git未来是谁在提交代码 git config --global user.na…...

从预训练的BERT中提取Embedding

文章目录 背景前置准备思路利用Transformer 库实现 背景 假设要执行一项情感分析任务&#xff0c;样本数据如下 可以看到几个句子及其对应的标签&#xff0c;其中1表示正面情绪&#xff0c;0表示负面情绪。我们可以利用给定的数据集训练一个分类器&#xff0c;对句子所表达的…...

BGP 泄露

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1. BGP 是什么&#xff1f; 2. 什么是 BGP 泄露&#xff1f; 3. 今天发生了什么&#xff1f; 4. 正常和被劫持状态下的路由示意图 5. 受影响区域 6. 责任在谁&#xff1f; 7. 有办法避免这…...

IntelliJ IDEA和MAVEN基本操作:项目和缓存存储到非C盘

为了将 IntelliJ IDEA 的所有项目和缓存存储到 C 盘以外的地方&#xff0c;以下是你需要调整的设置和步骤&#xff1a; 1. 更改项目默认存储位置 打开 IntelliJ IDEA。点击顶部菜单的 File > Settings &#xff08;Windows&#xff09;或 IntelliJ IDEA > Preferences &…...

Leetcode 3418. Maximum Amount of Money Robot Can Earn

Leetcode 3418. Maximum Amount of Money Robot Can Earn 1. 解题思路2. 代码实现 题目链接&#xff1a;3418. Maximum Amount of Money Robot Can Earn 1. 解题思路 这一题我的思路比较暴力&#xff0c;就是一个动态规划&#xff0c;本质上就是全量遍历&#xff0c;然后找到…...

occ的开发框架

occ的开发框架 1.Introduction This manual explains how to use the Open CASCADE Application Framework (OCAF). It provides basic documentation on using OCAF. 2.Purpose of OCAF OCAF (the Open CASCADE Application Framework) is an easy-to-use platform for ra…...

SYS_OP_MAP_NONNULL NULL的等值比较

无意在数据库中发现了这个操作SYS_OP_MAP_NONNULL。 SYS_OP_MAP_NONNULL应该不是数据库中的对象&#xff0c;因为在DBA_OBJECTS中根本找不到它&#xff0c;而在STANDARD和DBMS_STANDARD包中也找不到函数说明。 SQL> SELECT * 2 FROM DBA_OBJECTS 3 WHERE OBJECT_NAME…...