社区发现快速入门

news2024/11/18 15:28:28

社区发现快速入门

一、图:关系型数据的一种描述方式

关系型数据,又名“表格数据”,指关系数学模型中以二维表的形式来描述的数据,它以表格形式组织,使用行和列来存储和表示数据之间的关系。

关系型数据可以用实体、属性和边来描述,以**学生表(Students)**为例:

学生ID姓名性别年龄
1张三20
2李四22
  • 实体:表格中的每一行对应一个实体(如,实体1:学生“张三”;实体2:学生“李四”)
  • 关系:用于描述实体之间的某种关系(如,学生“张三”和学生“李四”是朋友;学生“张三”向学生“李四”发送邮件;学生“张三”、学生“李四”和学生“王五”在同一个班级)
  • 属性:表格中的每一列对应实体的一个属性(如,学生“张三”的属性包括“性别”:男;“年龄”:20)

在图模型中,可以使用图的节点和边来建模关系型数据,关系型数据被建模为图(graphs)或超图(hypergraphs)。

  • 实体——点
  • 关系——边
  • 属性——特征

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvrDROrw-1690345122210)(assets/image-20230724201507842.png)]

二、图的描述与生成

2.1 图与社区的相关概念

  1. 节点的度(degree):与该节点直接相连的边的数量

    • 度分布:节点的度数的频率分布情况

    • 友谊悖论:在社交网络中,大多数人的朋友数量要比他们自己的朋友数量平均值要高。即,节点邻居的平均度通常高于其自身的度。

  2. 边介数(edge betweenness):通过这条边的所有最短路径的数量,用于衡量图中边的重要性。

  3. 中心性(centrality):一组用于衡量图中节点重要性或影响力的指标。中心性是通过数值化节点与图中其他节点之间的关系,从而评估节点在网络中的位置和影响力。

    • 度中心性(Degree Centrality):度中心性是指一个节点在图中与其他节点直接相连的边的数量。度中心性较高的节点被认为在网络中较为重要,因为它们与更多的其他节点有连接。在无向图中,度中心性等于节点的度;在有向图中,分为入度中心性和出度中心性。
      • 中枢/权威中心性(hub/ authority):中心节点或者权威节点的度中心性
        • 中枢节点:有向图中,出度比较大的节点
        • 权威节点:有向图中,入度比较大的节点
    • 接近中心性(Closeness Centrality):接近中心性测量节点到其他节点的平均距离。距离是指节点之间的最短路径长度【又名测地线(geodesic)】。具有较低平均距离的节点被认为在网络中更为中心,因为它们更容易与其他节点快速地进行交流。
    • 介数中心性(Betweenness Centrality):介数中心性度量节点在图中其他节点之间的重要性。一个节点的介数中心性高表示它在图中扮演着连接不同节点之间的关键角色。介数中心性较高的节点通常在信息传递、通信或资源传递中起到重要作用。
    • 特征向量中心性(Eigenvector Centrality):特征向量中心性考虑了节点本身的重要性以及其直接连接节点的重要性。该指标假设与高度中心性节点直接相连的节点也具有较高的中心性。因此,特征向量中心性可以被视为节点在整个网络中的影响力。
    • PageRank中心性:PageRank是一种特殊的特征向量中心性,最初由谷歌用于对网页进行排名。它将网络视为马尔可夫链,并在网络上进行随机游走,根据节点的传入链接数量和链接的质量来分配节点的排名。
    • Δ中心性(delta-centrality):每对节点之间的最短路径经过该节点的数量被定义为该节点的Δ中心性,用于衡量图中节点对网络连通性的贡献程度。
  4. 连通图(Connected Graph):从图中的任意一个节点出发,都可以通过边沿不同的路径到达图中的任意其他节点的无向图

    • 巨型连通分量(Giant Connected Component,巨片):由大量节点相互连接形成的最大连通子图。它是网络中规模最大的强连通分量。
    • 集团(clique):完全连通的子图。
    • k核(k-core):是G的一个最大连接子图,其中所有节点的度数至少为k
      • 我们可以通过反复删除所有度数小于k的节点来找到k-cores
      • 如果一个节点属于k-core但不属于(k+1)-core,那么这个节点的核心度(coreness)为k
  5. 幂律网络(Scale-free Network):具有幂律分布度数的网络拓扑结构,该网络中,节点的度数(连接数)遵循幂律分布。

    • 幂律分布(Power-law distribution):一种特殊的概率分布,幂律分布的概率密度函数与随机变量的取值 x 成反比,通常用公式 f ( x ) ∝ x − α f(x) ∝ x^{-α} f(x)xα来表示,其中 α 是分布的幂律指数(power-law exponent),通常取大于1的正值。
    • BA网络(Barabasi-Albert):一种典型的幂律分布网络,该网络倾向于依附于高度节点,从而形成枢纽,也被称为“富者愈富”。
  6. 小世界网络(Small World Network):一种特殊类型的网络模型,其特点是具有高度的聚集性和较短的平均最短路径长度,这意味着网络中的节点之间通过少数几步就可以相互到达,同时节点之间形成了紧密的聚集群。

  7. 模块度(Modularity):网络分析中用于衡量网络社区结构质量的重要指标。模块度测量了网络社区结构与随机网络相比的紧密程度。它通过比较网络内实际边的数量与随机网络期望边的数量之间的差异来衡量社区结构的优劣。

    • 分辨率:网络或图的粒度或细节程度

    • 基于模块化的算法受到分辨率限制问题的影响

      基于模块化的算法是一类用于社区发现的方法,旨在将网络划分为具有高内聚性和低耦合性的社区(也称为模块)。这些算法通常通过最大化网络内部的连接强度(模块度)来寻找最佳的社区划分。

      然而,当网络或图的分辨率较低时,也就是说,网络中的节点和边的粒度较大,算法可能会受到限制。这是因为低分辨率下,较小的社区可能无法被准确地识别或者在划分过程中被合并到其他更大的社区中。

      换言之,如果网络的分辨率过低,算法可能会将本应是独立的小社区合并成一个更大的社区,导致社区结构的损失和模糊性增加。这会导致算法对具有更细粒度社区结构的网络或图的理解能力下降。

      因此,在使用基于模块化的算法进行社区发现时,需要注意网络或图的分辨率,尽量选择适合给定数据结构的算法和参数设置。同时,对于较高分辨率的网络,这些算法往往表现更好,能够更准确地识别出细粒度的社区结构。

  8. 聚类系数(Clustering Coefficient):用于衡量图中节点聚集程度的指标,用于分析节点在网络中形成群组或社区的趋势。

  9. 图传递性(Transitivity):也称为传递性或三角闭包,指在一个网络中形成三角形的可能性,用于衡量图中节点之间三角关系的存在程度。图传递性的计算涉及到网络中的闭合三元组(三角形)。闭合三元组是指在一个网络中,如果节点 A 与节点 B 相连,节点 B 与节点 C 相连,且节点 A 与节点 C 相连,那么就构成了一个闭合三元组。

  10. 内部外部度:定义节点i的内部度为其在子图C内的度,节点i的外部度为其在子图C外部的度,内部度与外部度总和为节点的**总度 **。

    • 强弱社区:内部度>外部度——强社区,内部度<外部度——弱社区

2.2 随机图模型

  1. ER 模型(Erdős-Rényi 模型):通过在节点之间以一定的概率随机连接边来生成图。ER模型生成的随机图的平均度、度分布等特征可以用概率方法进行推导。

    生成图的过程如下:

    • 定义节点数和边数:首先确定图中节点的数量 n 和边的数量 m。

    • 生成边:随机选择 m 条边,每条边以一定的概率连接两个节点。每对节点之间产生一条边的概率是独立的,且是相同的。

  2. Chung-Lu 模型:用于生成具有特定平均度分布的无标度网络。无标度网络的特点是节点度分布遵循幂律分布,这与许多真实世界的复杂网络中观察到的节点度分布类似。

    给定一个目标平均度序列{d1, d2, …, dn},其中 di 表示第 i 个节点的度数。生成图的过程如下:

    • 创建节点:首先创建 n 个节点,其中 n 是图中节点的数量。

    • 边的概率分配:为每对节点 i 和 j,计算连接概率 p_ij,该连接概率与节点的目标平均度和节点的度有关。通常使用公式 p i j = k i ∗ k j / ( 2 ∗ m ) p_ij = k_i * k_j / (2 * m) pij=kikj/(2m),其中 k i k_i ki k j k_j kj 分别是节点 i 和 j 的目标平均度,m 是图中边的数量的一半。

    • 随机连接:对于每对节点 i 和 j,以概率 p i j p_{ij} pij 连接节点 i 和 j,这里的连接是一个随机过程。

  3. 配置模型(Degree Sequence):Chung Lu模型是边生成的概率模型,生成度序列的期望和原来的相等。对于配置模型,我们为节点指定一个精确的度序列,所有具有n个节点和这个精确度序列的图,被认为是以相同的概率出现的。

    生成图的过程通常通过以下步骤实现:

    • 创建节点:首先根据节点度序列确定图中节点的数量和每个节点的度,对于每个节点i,我们指定di个残边(stubs,半条边)

    • 随机连接:残边随机互联,直到满足每个节点的度为止。由于随机连接可能会产生自环或重复边,连接过程中不考虑重复连接和自环。

三种模型的区别

  1. ER 模型(Erdős-Rényi 模型):
    • 特点:ER 模型是最早被提出的随机图模型之一,简单且易于理解。它基于连接概率来生成边,可以用于生成具有随机连接的图。ER 模型可以生成稀疏图,适用于一些连接较稀疏的情况。
    • 优点:模型简单,易于实现和理解。适用于生成边稀疏的随机图。
    • 缺点:ER 模型生成的图往往具有较小的最大连通子图,不适用于生成无标度网络,无法产生复杂网络的幂律节点度分布。
  2. Chung-Lu 模型:
    • 特点:Chung-Lu 模型是用于生成无标度网络的随机图模型,可以生成节点度分布遵循幂律分布的图。它通过连接概率和目标平均度来随机连接节点。
    • 优点:能够生成无标度网络,适用于研究幂律节点度分布的复杂网络。
    • 缺点:随机连接的过程可能导致图中存在重复连接和自环的问题。
  3. Degree Sequence 模型:
    • 特点:Degree Sequence 模型是用于生成具有给定节点度序列的随机图的模型。给定一个节点度序列,它通过随机连接节点来生成一个满足该度序列的图。
    • 优点:能够生成满足指定节点度序列的随机图,适用于研究复杂网络的节点度分布特性。
    • 缺点:并非所有给定的节点度序列都能生成合法的图,有些节点度序列可能无法实现。

三、 社区基准模型(benchmark)

社区基准模型是用于评估和比较社区发现算法性能的标准或参照。它为我们提供了一个衡量算法在社区划分上的准确性和效果的基准,帮助我们了解算法的优势和局限性。

为什么要有社区基准模型

  • 测试和比较算法
  • 控制噪音水平、社区规模等
  • 真实图数据很少有真实值(ground-truth)
  • 有ground-truth,但可能与基本假设不一致

常见的基准模型包括:

  1. 种植-分区模型(Planted partitions model)

    • 固定节点数 n 和社区数 k,对于社区,我们①平均分配节点到每个社区,或②或将每个节点独立分配给社区 i i i,概率为 p i p_i pi ∑ p i = 1 \sum p_i=1 pi=1

    • 对于分别在社区 i i i和社区 j j j中的节点对 ( i , j ) (i,j) (i,j),我们按照概率 p i j p_{ij} pij添加边。可以指定 p ( i , i ) = p i n p(i,i)=p_{in} p(i,i)=pin p ( i , j ) = p o u t p(i,j)=p_{out} p(i,j)=pout i ≠ j i≠j i=j

  2. LFR模型(Lancichinetti-Fortunato-Radicchi model)

    • 固定节点数 n,设定三个主要参数:(µ 称为噪声水平或混合参数

      • γ 1 \gamma _1 γ1节点度服从 p n ∝ n − γ 1 p_n\propto n^{-\gamma_1} pnnγ1的幂律分布,推荐值为 2 ≤ γ 1 ≤ 3 2\le \gamma_1 \le 3 2γ13

      • γ 2 \gamma _2 γ2社区规模服从 p k ∝ k − γ 2 p_k\propto k^{-\gamma_2} pkkγ2的幂律分布,推荐值为 1 ≤ γ 2 ≤ 2 1\le \gamma_2 \le 2 1γ22

      • 0 ≤ μ ≤ 1 0 \le \mu \le 1 0μ1:对于每个节点,这是连接到其他社区的边的预期比例,而 1 − μ 1-\mu 1μ 是其自己社区内的比例。

    • 把每个节点都分配到社区

      • 存在允许重叠社区的变体
      • 可以提供额外参数来限制度分布(平均和最大度)和社区大小(最小和最大)
      • 从配置模型开始,重新连接节点以逼近目标分布
      • 初始阶段可以使用BA等其他模型

    LFR 的可扩展性有些受限,一些可扩展的基准模型有:

    • RMAT ,生成具有幂律度数分布的图;在 Graph-500 中使用
    • BTER (Block Two-level ER),生成服从幂律度分布以及社区结构的图
    • SBM(Stochastic Block Model),它也生成具有社区结构的图。——它最简单的定义是种植分区模型的变体。

四、图社区分割

图社区定义:两个基本假设:[Barabasi,Network Science]

  1. 一个网络的社区结构在其布局图中是唯一的。
  2. 一个社区是网络中的一个局部密集连接子图。

3.1 两大聚类方法

图聚类/分割(clustering/partitioning):将顶点分割成相连的子图

模糊聚类(Fuzzy clustering):节点不属于/属于一个或多个群组

参考:https://blog.csdn.net/SL_World/article/details/104423536

  1. K-means(K均值)聚类:一种常见的无监督学习算法,用于将一组未标记的数据样本划分为不同的簇(cluster)。聚类的目标是使同一簇内的样本相似度最大化,而不同簇之间的样本相似度最小化。
  2. 谱聚类(Spectral Clustering):利用数据的相似矩阵的谱(特征值)进行降
    • 它将数据看成空间中的点,点对之间有边相连,距离越远的点对其边权值越小,距离越近的点对其边权值越大。
    • 它将聚类问题转化为切图问题,使得切图后的总代价最小。即子图内点对之间边权值较大,子图间边权值较小。得到切图后子图的个数即为聚类的个数。

K-means聚类和谱聚类的比较

  1. 原理:

    • K-means聚类通过迭代寻找一组聚类中心点,将数据划分为K个簇,使得每个样本点到所属簇的中心点的距离最小。它基于欧氏距离度量样本之间的相似性。

    • 谱聚类是一种基于图论的聚类方法。它将样本数据看作是图上的节点,通过计算节点之间的相似性构建一个相似度矩阵,然后通过对相似度矩阵进行特征分解,选取前K个特征向量对应的特征值,将样本投影到这K维空间中进行聚类。

  2. 聚类结果:

    • K-means聚类将样本分成了K个互不重叠的簇,并且每个样本只属于一个簇。

    • 谱聚类没有硬性的簇划分,它将样本映射到一个低维的空间中,在这个空间里对样本进行聚类。某些情况下,谱聚类可以实现松散的聚类(soft clustering),即样本点可以属于多个簇。

  3. 对数据分布的要求:

    • K-means聚类对数据分布的要求较高,它假设簇是凸的、等方差的,并且每个簇的样本数量相近。

    • 谱聚类对数据分布的要求相对较低,它能够处理非凸的簇、椭圆形簇、大小不同的簇等情况。

  4. 时间复杂度:

    • K-means聚类的时间复杂度较低,在大规模数据集上有较好的可扩展性。

    • 谱聚类的时间复杂度较高,主要耗费在特征分解的计算上,因此在大规模数据集上效率较低。

选择聚类算法应根据具体的问题和数据特点来决定。如果数据符合K-means的假设条件,且需要得到硬性划分的簇,则K-means是一个很好的选择。如果数据分布复杂、非凸或需要软性聚类,谱聚类可能更适合。

3.2 图分区算法

  1. GN算法(Girvan-Newman算法):一种用于检测社区结构的图论算法,其主要目标是发现网络中的重要的连接(边介数),并将网络划分为具有高内聚性和低耦合性的社区。

    复杂度: O ( m 2 n ) O(m^2n) O(m2n) 【m:边的总数,n:点的总数】

    步骤:

    • 计算网络中所有边的介数(betweenness),介数表示该边在网络中作为最短路径的桥梁所承担的重要程度。
    • 找到介数最高的边,将其从网络中移除,重新计算剩余边的介数。
    • 重复步骤2和步骤3,直到所有边都被移除。

    在每次移除边的过程中,GN算法会逐渐将网络划分为多个不相交的社区,因为那些连接不同社区的边通常具有较高的介数。这样,每次移除边后,可以得到一个社区划分结果。

  2. CNM算法(Clauset、Newman、Moore):也称为快速贪心算法(Fast Greedy)

    复杂度: O ( n 2 ) O(n^2) O(n2) ,稀疏图更少

    • 开始,每个顶点作为一个单独集群
    • 选择最能提高模块度的一对集群(如果有的话),然后合并它们,当没有办法提高模块度的时候停止
  3. Louvain算法:也称为多级算法(Multilevel algorithm)或快速折叠算法(fast unfolding)

    复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

    • 开始,每个顶点作为一个单独集群
    • 循环遍历每个顶点,将其移动到模块度增加最多(如果有的话)的邻居社区
    • 重复以上步骤,直到没有任何提升空间为止
    • 将每个社区折叠成一个节点并重新运行上述步骤——另一个层级
    • 当图折叠到单个节点(或者当最后一级没有移动)时停止

  4. Infomap算法:Infomap基于信息论:使用概率随机游走和压缩算法来实现

    复杂度: O ( n l o g n ) O(nlogn) O(nlogn)

    • 给定 G 和一个初始化分区方案,尽可能高效地编码随机游走
    • 利用随机游走往往在同一社区中停留更长时间的性质
    • 优化图方程:社区间游走的平均位数+社区内游走的平均位数
  5. 标签传播(label propagation algorithm)

    复杂度: O ( m ) O(m) O(m),此算法速度很快,但并不总能收敛到一个解。

    • 开始,每个顶点作为一个单独集群,有自己的簇标签
    • 循环遍历每个顶点,每个顶点都采用其邻居中最流行的标签(使用随机来打破死锁)
    • 当每个顶点具有与其邻域中最频繁出现的标签相同的簇标签时,算法停止
  6. 其他算法:

    • WalkTrap:一种基于短距离随机游走的分层算法。它的复杂度是 O ( n 2 l o g n ) O(n^2logn) O(n2logn)

    • Leading eigenvector(前导特征向量):基于模块化矩阵的谱分解。对于每个双分区,其复杂度为 O ( n ( n + m ) ) O(n(n+m)) O(n(n+m))

    • Leiden算法:Louvain算法的改进

    • ECG算法:Louvain算法的改进,复杂度较高

五、图分区的比较(指标)

5.1 无监督算法度量指标

  1. 图聚类算法选择

    • 集群的质量
    • 稳定性
    • 效率(时间空间)
    • 其他:不需要指定聚类的数量(k)、集群的层次结构等

    图聚类是无监督学习,没有明确的目标函数,不同算法使用不同的目标函数。

  2. 图分割算法度量

    • 质量的衡量标准: s i m ( T , A ) sim(T, A) sim(T,A),对给定的参考划分(ground truth partition)T计算图A的划分的相似度函数
    • 稳定性的衡量标准: s i m ( A , A ′ ) sim(A, A') sim(A,A),同一算法的运行多次比较
    • 比较算法之间的结果: s i m ( A , B ) sim(A, B) sim(A,B)

5.2 图相似度度量指标

  1. 图无关度量——只看点的信息,不考虑边的影响

    • 基于成对计数:考虑对图节点的两个划分,度量指标基于A和B里面各个集群中的成对元素
      • Jaccard 指数
      • 调整兰德指数(ARI),取值范围是[-1, 1],-1表示聚类结果完全不一致,0表示聚类结果与随机结果相同,1表示聚类结果完全一致
    • 基于信息论:基于 A 和 B 之间的互信息
      • 归一化互信息 (NMI),取值范围是[0, 1],0表示两个聚类结果没有任何相似性,1表示两个聚类结果完全一致。NMI并不受聚类结果的绝对数目影响,而是关注聚类结果之间的相对关系和一致性
    • 基于卡方分布
      • Cramer 的 V指标 和 Tschurprow 的 T指标
  2. 图感知度量——只看边的信息,不考虑点的信息

    • AGRI

设网络G 的真实社区情况为 A, 并设 B1 和 B2 分别是 A 的粗化和细化,在某些情况下,在图无关度量下A更接近B2(细化);在图感知度量下A更接近B1(粗化)

  • 当使用图无关的度量时,集群的数量更多
  • 图感知度量生成的集群的数量更少

这两种指标都获得高值是我们做图聚类所希望的,但图感知和图无关度量在解决问题方面具有相反的行为(trade-off)。ECG算法可以使两者都达到一个较好的效果。

总结:

  • 使用调整后的基于集合的相似性度量,可以减少度量对分区粒度的偏差,消除随机性

  • 图无关(ARI,AMI)和图感知(AGRI)度量是互补的,在评估算法的优越性时应同时使用它们

5.3 其他指标

  1. 拓扑特征

    • 缩放密度(scaled density)
    • 内部传递性(internal transitivity)
  2. 社区强度指数CSI(ECG论文中提出的一个指标):边界(0 和 1)附近的 ECG 权重的双峰分布(bi-modal distribution)表明了强大的社区结构,由此提出了一个基于点质量 Wasserstein 距离(推土机距离(Earth Mover’s distance))的简单社区强度指标 (CSI)

  3. 异常检测CADA(community-aware anomaly detection社团感知异常检测)

    对于每个节点 v ∈ V v\in V vV,令 N ( v ) N(v) N(v):v的邻居数; N c ( v ) N_c(v) Nc(v):v属于出现次数最多社区的邻居数(通过图聚类)。
    C A D A x ( v ) = N ( v ) N c ( v ) , x ∈ { I M , M L } . ( I n f o M a p 算法 , L o u v a i n 算法 ) CADA_x(v)=\frac {N(v)}{N_c(v)}, x\in\{IM,ML\}.(InfoMap算法,Louvain算法) CADAx(v)=Nc(v)N(v),x{IM,ML}.(InfoMap算法,Louvain算法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/791541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【leetcode】206.反转链表

思路1&#xff1a;取原链表的节点&#xff0c;依次头插到新链表&#xff0c;返回新链表的头 示例一反转步骤如下&#xff1a; &#x1f4d6;Note: 当cur ! NULL时&#xff0c;将cur指向的节点头插入新链表&#xff0c;首先要更改cur->next的值为newhead->next&#xff0c…

LiveNVR监控流媒体Onvif/RTSP常见问题-token有效期是多久如何设置token有效期StreamToken和URLToken

LiveNVR中token有效期是多久如何设置token有效期StreamToken和URLToken 1、获取TOKEN2、TOKEN有效期3、默认token有效期3、自定义token加密key3.1、token_key3.2、stream_token_key 4、如何配置一直有效的token4.1、URLToken4.2、StreamToken 5、动态有效期6、流地址鉴权开启后…

城市气象数据可视化:洞察气候变化,构建智慧城市

随着城市化进程的加速&#xff0c;城市气象数据的采集和分析变得越来越重要。气象数据不仅影响着人们的生活和出行&#xff0c;还与城市的发展和规划息息相关。在数字化时代&#xff0c;如何将城市中各个气象数据进行可视化&#xff0c;让复杂的数据变得简单易懂&#xff0c;成…

Linux 下使用crontab 定时打包日志并删除已被打包的日志

crontab是和用户相关的&#xff0c;每个用户有自己对应的crontab 。 cron是Linux下的定时执行工具&#xff0c;以下是重启/关闭等等的命令 #/sbin/service crond start //启动服务 #/sbin/service crond stop //关闭服务 #/sbin/service crond restart //重启服务 #/…

外壳-零基础不求人设计PCB外壳

实机演示 2D 3D 导入PCB 除了在立创eda专业版layout的可以直接做外壳 在其它EDA设计的都需要先导入PCB(如altium) 放置边框 放置正面挖槽 放置侧面挖槽 放置需要先放置侧面基准线 这样再选择侧面挖槽 选择创建的基准线就可以侧面开孔 放置上下盖固定螺丝孔 第一步上下…

【C++ OJ练习】9.最小栈

1.题目链接 力扣 2.解题思路 利用两个栈实现 3.代码 class MinStack { public:MinStack() {//两个栈来实现}void push(int val) {_st.push(val);if (_minst.empty() || _minst.top() > val){_minst.push(val);}}void pop() {if (_st.top() _minst.top())_minst.pop();…

odoo 开发入门教程系列-计算的字段和变更(Computed Fields And Onchanges)

计算的字段和变更(Computed Fields And Onchanges) 模型之间的关系是任何Odoo模块的关键组成部分。它们对于任何业务案例的建模都是必要的。然而&#xff0c;我们可能需要给定模型中字段之间的链接。有时&#xff0c;一个字段的值是根据其他字段的值确定的&#xff0c;有时我们…

每日一题7.26 23

162. 寻找峰值https://leetcode.cn/problems/find-peak-element/ 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可…

java中判断list是否为空

java中判断list是否为空是日常代码中经常遇到的问题。最近发现一个Utils提供的方法可以一步判断。 废话不多说&#xff0c;直接上代码&#xff01; ArrayList<String> arrayList new ArrayList<>(); System.out.println("集合1&#xff1a;" Collecti…

SQL-每日一题【620.有趣的电影】

题目 某城市开了一家新的电影院&#xff0c;吸引了很多人过来看电影。该电影院特别注意用户体验&#xff0c;专门有个 LED显示板做电影推荐&#xff0c;上面公布着影评和相关电影描述。 作为该电影院的信息部主管&#xff0c;您需要编写一个 SQL查询&#xff0c;找出所有影片…

链表和C++ std::list详解

文章目录 1. 链表和std::list2. list的用法2.1 list的定义和声明2.2 成员函数2.2.1 基本函数构造函数operatorassignget_allocator 2.2.2 元素访问frontback 2.2.3 迭代器begin、end和cbegin、cendrbegin、rend和crbegin、crend 2.2.4 容量emptysizemax_size 2.2.5 修改器clear…

扩展 Python 的 unittest 框架

目录 前言&#xff1a; 如何控制 unittest 用例执行的顺序呢&#xff1f; 方式 1&#xff0c;通过 TestSuite 类的 addTest 方法&#xff0c;按顺序加载测试用例 方式 2&#xff0c;通过修改函数名的方式 那就造个轮子吧 前言&#xff1a; Python 的 unittest 模块提供了…

做好防雷检测的意义和作用

防雷检测是指对雷电防护装置的性能、质量和安全进行检测的活动&#xff0c;是保障人民生命财产和公共安全的重要措施。我国对防雷检测行业有明确的国家标准和管理办法&#xff0c;要求从事防雷检测的单位和人员具备相应的资质和能力&#xff0c;遵守相关的技术规范和规程&#…

Cpp 01 — namespace命名空间、C++的输入与输出、缺省参数、函数重载、引用、隐式类型转换

前言&#xff1a;本文章主要用于个人复习&#xff0c;追求简洁&#xff0c;感谢大家的参考、交流和搬运&#xff0c;后续可能会继续修改和完善。 因为是个人复习&#xff0c;会有部分压缩和省略。 一、namespace命名空间 C使用命名空间(namespace)来避免命名冲突。 在定义一个…

初阶C语言-分支和循环语句(下)

“花会沿途盛开&#xff0c;以后的路也是。” 今天我们一起来继续学完分支语句和循环语句。 分支和循环 3.循环语句3.4 do...while()循环3.4.1 do语句的用法 3.5关于循环的一些练习3.6 goto语句 3.循环语句 3.4 do…while()循环 3.4.1 do语句的用法 do循环语句;//当循环语句…

【unity】ShaderGraph学习笔记

【unity】ShaderGraph学习笔记 创建ShaderGraph 创建URP的shaderGraph文件 在Project面板里Create→ShaderGraph→URP→这里主要有几个选项 Lit Shader Graph&#xff1a;有光照三维着色器 Unlit Shader Graph&#xff1a;无光照三维着色器 Sprite Custom Lit Shader Gra…

【解决方案】医疗行业资产定位管理方案-蓝牙资产定位方案

蓝牙资产定位追踪技术已经开始应用于多种行业的资产、设备管理方面&#xff0c;有不少机构、企业开始尝试使用实时蓝牙定位系统对其各类资产、机器设备、工具、材料、产品等进行精准定位&#xff0c;提高各类资产、设备的管理和使用效率&#xff0c;从而节省运营成本。 医疗行业…

汽配企业建设数字化工厂的步骤是什么

随着信息技术的迅猛发展&#xff0c;汽车行业也面临着数字化转型的迫切需求。汽配企业作为汽车产业链上重要的一环&#xff0c;也需要积极采取措施&#xff0c;建设数字化工厂系统&#xff0c;以适应市场竞争的变化。下面将介绍建设汽配企业数字化工厂的具体步骤。 第一步&…

在niso ii中读写EPCS时出现“Can‘t open flash device”

在niso ii中读写EPCS时出现“Can’t open flash device”&#xff0c;即alt_flash_open_dev(EPCS_FLASH_NAME)函数返回0。 Cant open flash device函数alt_flash_open_dev(EPCS_FLASH_NAME)打开epcs不成功&#xff0c;返回为0&#xff0c;试了几次硬件重新烧入、重启开发板还是…

呕心沥血解决xampp启动mysql异常停止due to a blocked port, missing dependencies问题

Error: MySQL shutdown unexpectedly.<br> This may be due to a blocked port, missing dependencies 这一行就是我问题的开始。 原因是因为&#xff0c;之前一直使用xampp用作本地mysql的启动管理&#xff0c;是个很好用的工具&#xff0c;但是近日想要给一个项目配…