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

大数据挖掘--两个角度理解相似度计算理论

文章目录

  • 0 相似度计算可以转换成什么问题
  • 1 集合相似度的应用
    • 1.1 集合相似度
      • 1.1文档相似度
      • 1.2 协同过滤
        • 用户-用户协同过滤
        • 物品-物品协同过滤
    • 1.2 文档的shingling--将文档表示成集合
      • 1.2.1 k-shingling
      • 1.2.2 基于停用词的 shingling
    • 1.3 最小哈希签名
    • 1.4 局部敏感哈希算法(LSH)
    • 1.5 最小哈希签名和局部敏感哈希(LSH)的概念结合示例
        • 最小哈希签名步骤:
        • 局部敏感哈希 (LSH) 步骤:
  • 2 距离测度的应用
    • 2.1 距离测度
      • 1. 欧氏距离 (Euclidean Distance)
      • 2. 余弦距离 (Cosine Distance)
      • 3. 编辑距离 (Edit Distance)
      • 4. 海明距离 (Hamming Distance)
  • 3 LSH函数家族

0 相似度计算可以转换成什么问题

相似度计算是数据分析和机器学习领域中一项关键任务,它可以帮助我们理解和分析不同对象之间的相似性。然而,相似度计算本身可以通过转换成其他类型的问题来更加有效地处理和解决。

首先,我们来看一种常见的相似度度量——Jaccard相似度。Jaccard相似度将相似度计算视为集合之间的比较问题。具体来说,它关注两个集合之间的交集相对于并集的大小。这种方法特别适合用于需要比较集合相似性的场景,比如在文本分析中,我们可以将文档表示为一组词的集合,Jaccard相似度帮助我们评估两份文档的相似程度。通过计算交集和并集,我们将相似度问题转化为集合运算问题,这种方法简洁而有效,尤其在需要处理大量数据时,利用集合操作的高效性可以显著提高计算速度。

另一方面,相似度计算也可以转换为距离测度的问题。在这种情况下,我们将对象视为几何空间中的点,计算这些点之间的距离来推断相似性。欧氏距离是一种直观的衡量方式,它通过计算两点之间的直线距离来评估它们的接近程度。这种方法在需要空间可视化的场合中非常有用。此外,还有曼哈顿距离,它通过计算路径总长来反映两点的差异,这在某些离散空间中表现出色。余弦相似度则提供了另一种转换视角,通过考察向量之间的夹角来确定它们的相似性,这在高维向量空间中,尤其在文本分析和推荐系统中,被广泛使用。

1 集合相似度的应用

1.1 集合相似度

1.1文档相似度

在文本分析中,我们常常需要衡量两篇文档之间的相似性,这可以通过集合相似度来实现。一个常用的方法是Jaccard相似度。假设有两个文档 A A A B B B,我们可以将它们表示为词的集合,分别记为 S A S_A SA S B S_B SB。Jaccard相似度计算公式如下:

J ( S A , S B ) = ∣ S A ∩ S B ∣ ∣ S A ∪ S B ∣ J(S_A, S_B) = \frac{|S_A \cap S_B|}{|S_A \cup S_B|} J(SA,SB)=SASBSASB

其中, ∣ S A ∩ S B ∣ |S_A \cap S_B| SASB 是两个集合的交集的大小, ∣ S A ∪ S B ∣ |S_A \cup S_B| SASB 是两个集合的并集的大小。Jaccard相似度的值在 0 到 1 之间,值越大表示两个文档越相似。

算法:在实际应用中,计算文档相似度时,我们可以进行如下步骤:

  1. 将每个文档转换为词集合。
  2. 计算每对文档集合的交集和并集大小。
  3. 应用Jaccard公式计算相似度。

这种方法简单高效,特别适合于初步的文本聚类和分类问题。

1.2 协同过滤

在推荐系统中,协同过滤是一种广泛使用的方法。这里我们主要探讨基于集合相似度的协同过滤,包括用户-用户和物品-物品协同过滤。

用户-用户协同过滤

在用户-用户协同过滤中,我们通过比较用户之间的兴趣相似性来进行推荐。假设我们有用户 u i u_i ui u j u_j uj,它们的兴趣集合分别为 I i I_i Ii I j I_j Ij。我们可以使用Jaccard相似度来计算用户相似性:

J ( I i , I j ) = ∣ I i ∩ I j ∣ ∣ I i ∪ I j ∣ J(I_i, I_j) = \frac{|I_i \cap I_j|}{|I_i \cup I_j|} J(Ii,Ij)=IiIjIiIj

通过计算用户之间的Jaccard相似度,我们可以为用户推荐那些相似用户喜欢的物品。

物品-物品协同过滤

类似地,在物品-物品协同过滤中,我们比较物品之间的相似性。假设有物品 p a p_a pa p b p_b pb,它们的用户集合分别为 U a U_a Ua U b U_b Ub,我们计算物品的Jaccard相似度:

J ( U a , U b ) = ∣ U a ∩ U b ∣ ∣ U a ∪ U b ∣ J(U_a, U_b) = \frac{|U_a \cap U_b|}{|U_a \cup U_b|} J(Ua,Ub)=UaUbUaUb

物品相似性可以帮助我们推荐用户可能喜欢的其他相似物品。

算法:协同过滤的基本步骤包括:

  1. 构建用户-物品矩阵。
  2. 根据需要选择用户-用户或物品-物品的相似度计算。
  3. 计算相似度矩阵。
  4. 根据相似度为用户生成推荐列表。

通过利用集合相似度,我们能够有效地实现协同过滤,使推荐系统更加智能化和个性化。这些方法不仅提高了推荐的准确性,还提升了用户的参与感和满意度。

1.2 文档的shingling–将文档表示成集合

在文本处理和分析过程中,将文档转换为集合的形式可以帮助我们更好地进行相似度分析和其他文本操作。其中,shingling 是一种将文档转化为集合的方法,通过将文档分割为一系列短的连续子序列(或称为“片段”)来实现。以下是关于 k-shingling 和基于停用词的 shingling 的详细介绍。

1.2.1 k-shingling

k-shingling 是一种将文档转化为子序列集合的方法,通过将文档中的文本分割为长度为 k 的连续子字符串(或子词)来实现。每一个长度为 k 的子串称为一个“shingle”。这种方法的核心在于选择合适的 k 值,以确保文档可以被合理地分割。

步骤:

  1. 选择 k 值:通常,k 的选择取决于具体应用和文档长度。较小的 k 值可以捕捉到更多的局部信息,而较大的 k 值更能反映文档的全局结构。

  2. 生成 shingles:从文档中提取所有可能的 k-shingles。对于每一个连续的 k 个字符或词,记录为一个 shingle。

  3. 构建集合:将所有提取的 shingles 组成一个集合。此集合可以用来比较不同文档的相似性。

示例:对于字符串 “The quick brown fox” 和 k = 2,可能的 shingles 为 {“Th”, “he”, "e “, " q”, “qu”, “ui”, “ic”, “ck”, "k “, " b”, “br”, “ro”, “ow”, “wn”, "n “, " f”, “fo”, “ox”}。

1.2.2 基于停用词的 shingling

基于停用词的 shingling 是一种改进的 shingling 方法,它通过忽略文档中的停用词(例如 “the”, “is”, “at”, “on” 等),来生成更具意义的 shingles。这种方法可以帮助减少噪声,提高文档相似度计算的精确度。

步骤:

  1. 移除停用词:在进行 shingling 之前,首先从文档中移除常见的停用词。这可以通过预定义的停用词列表实现。

  2. 生成 shingles:在移除停用词后,使用类似 k-shingling 的方法生成 shingles。这样生成的 shingles 更能体现文档的核心内容。

  3. 构建集合:将生成的 shingles 组成一个集合,用于进一步的相似度计算。

优点:通过忽略停用词,基于停用词的 shingling 能够更专注于文档的主题词汇,减少不必要的干扰。

好的,以下是关于如何使用最小哈希签名将大文档压缩成小的签名,以及如何利用局部敏感哈希(LSH)算法处理这些签名,以保持文档间的相似度。

1.3 最小哈希签名

最小哈希签名是一种将大集合(如文档中的术语集合)压缩成较小的签名的技术,同时保留集合之间的相似度。这是通过一组哈希函数实现的,它们将集合中的元素映射到整数,并选取最小的数值作为签名。

步骤:

  1. 选择哈希函数:选择一组不同的哈希函数 h 1 , h 2 , … , h n h_1, h_2, \ldots, h_n h1,h2,,hn。每个哈希函数将文档中的shingle(子字符串)映射到一个整数。

  2. 生成签名:对于每个文档和每个哈希函数,计算所有shingle的哈希值,并记录最小的哈希值。重复此过程n次(使用n个不同的哈希函数),形成一个长度为n的签名向量。

  3. 保持相似度:两个文档的最小哈希签名相同元素的比例,接近于这两个文档的Jaccard相似度,即 J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A, B) = \frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB

1.4 局部敏感哈希算法(LSH)

LSH 是一种用于快速查找相似文档的算法,特别适用于处理最小哈希签名。这种方法通过将签名分段,并使用哈希函数将相似的签名段映射到相同的桶中,从而实现高效的近似最近邻搜索。

步骤:

  1. 分段签名:将最小哈希签名分成若干段,每段包含若干个哈希值。例如,每个签名被分成b个段,每段包含r个哈希值。

  2. 映射到桶:对每个段,使用一个哈希函数将其映射到一个哈希桶。相似的文档由于签名段的相似性,很可能被映射到同一个桶中。

  3. 查找相似文档:当需要查找与某个文档相似的文档时,可以仅查找与其签名段映射到相同桶中的文档,这大大缩小了查找范围。

优势:通过结合最小哈希签名和 LSH,能够有效地处理和比较大规模文档集合。最小哈希签名减少了需要处理的数据量,而 LSH 提供了快速的相似性检索机制,使得处理大规模数据集的效率得以提升。

1.5 最小哈希签名和局部敏感哈希(LSH)的概念结合示例

假设我们有两个文档,它们的 shingle 集合如下:

  • 文档 A: {“shingle1”, “shingle2”, “shingle3”}
  • 文档 B: {“shingle2”, “shingle3”, “shingle4”}

我们应用三组不同的哈希函数 h 1 ( x ) h_1(x) h1(x), h 2 ( x ) h_2(x) h2(x), h 3 ( x ) h_3(x) h3(x),假设这些函数的输出如下:

  • h 1 ( " s h i n g l e 1 " ) = 5 h_1("shingle1") = 5 h1("shingle1")=5, h 1 ( " s h i n g l e 2 " ) = 3 h_1("shingle2") = 3 h1("shingle2")=3, h 1 ( " s h i n g l e 3 " ) = 7 h_1("shingle3") = 7 h1("shingle3")=7, h 1 ( " s h i n g l e 4 " ) = 6 h_1("shingle4") = 6 h1("shingle4")=6
  • h 2 ( " s h i n g l e 1 " ) = 2 h_2("shingle1") = 2 h2("shingle1")=2, h 2 ( " s h i n g l e 2 " ) = 9 h_2("shingle2") = 9 h2("shingle2")=9, h 2 ( " s h i n g l e 3 " ) = 1 h_2("shingle3") = 1 h2("shingle3")=1, h 2 ( " s h i n g l e 4 " ) = 4 h_2("shingle4") = 4 h2("shingle4")=4
  • h 3 ( " s h i n g l e 1 " ) = 8 h_3("shingle1") = 8 h3("shingle1")=8, h 3 ( " s h i n g l e 2 " ) = 6 h_3("shingle2") = 6 h3("shingle2")=6, h 3 ( " s h i n g l e 3 " ) = 5 h_3("shingle3") = 5 h3("shingle3")=5, h 3 ( " s h i n g l e 4 " ) = 3 h_3("shingle4") = 3 h3("shingle4")=3
最小哈希签名步骤:
  1. 计算最小哈希签名

    • 对于文档 A:
      • h 1 h_1 h1: 最小值是 3 (来自 “shingle2”)
      • h 2 h_2 h2: 最小值是 1 (来自 “shingle3”)
      • h 3 h_3 h3: 最小值是 5 (来自 “shingle3”)
    • 对于文档 B:
      • h 1 h_1 h1: 最小值是 3 (来自 “shingle2”)
      • h 2 h_2 h2: 最小值是 1 (来自 “shingle3”)
      • h 3 h_3 h3: 最小值是 3 (来自 “shingle4”)
  2. 生成最小哈希签名

    • 文档 A 的签名: (3, 1, 5)
    • 文档 B 的签名: (3, 1, 3)
  3. 比较签名:通过比较签名发现,文档 A 和 B 在三个哈希函数中有两个值相同,签名相同位置的值相同比例为 2/3。

局部敏感哈希 (LSH) 步骤:
  1. 分段签名

    • 将签名分成两段,每段包含一组哈希值:
      • 文档 A: (3, 1) 和 (5)
      • 文档 B: (3, 1) 和 (3)
  2. 映射到桶

    • 使用哈希函数对每一段进行哈希,映射到哈希桶:
      • 段 (3, 1) 的两文档都被映射到同一个桶,因此它们可能相似。
      • 段 (5) 和 (3) 被映射到不同的桶。
  3. 查找相似文档

    • 由于文档 A 和 B 在 (3, 1) 段中被映射到同一个桶,因此 LSH 会识别文档 B 作为文档 A 的相似候选者。

通过结合最小哈希签名和 LSH,我们大幅度降低了计算复杂度。最小哈希签名帮助我们压缩文档,同时保留相似度信息,而 LSH 则通过分段签名和桶映射,快速聚合可能相似的文档以进行进一步的精细比较。这种方法尤其适用于需要快速处理和比较的大规模数据集。

2 距离测度的应用

2.1 距离测度

1. 欧氏距离 (Euclidean Distance)

  • 定义:欧氏距离是两点间的“直线”距离,用于度量两个点在欧几里得空间中的距离。对于两个n维向量 A = ( a 1 , a 2 , . . . , a n ) A = (a_1, a_2, ..., a_n) A=(a1,a2,...,an) B = ( b 1 , b 2 , . . . , b n ) B = (b_1, b_2, ..., b_n) B=(b1,b2,...,bn),其计算公式为:
    Euclidean Distance = ∑ i = 1 n ( a i − b i ) 2 \text{Euclidean Distance} = \sqrt{\sum_{i=1}^{n} (a_i - b_i)^2} Euclidean Distance=i=1n(aibi)2
  • 应用:常用于几何空间中的距离计算,如图像处理、聚类分析(如k-means算法)。

2. 余弦距离 (Cosine Distance)

  • 定义:余弦距离实际上测量的是两个向量之间的夹角余弦值,表示两个向量的方向相似度。计算公式为:
    Cosine Similarity = A ⋅ B ∥ A ∥ ∥ B ∥ \text{Cosine Similarity} = \frac{A \cdot B}{\|A\| \|B\|} Cosine Similarity=A∥∥BAB
    余弦距离则为 1 − Cosine Similarity 1 - \text{Cosine Similarity} 1Cosine Similarity
  • 应用:适用于文本分析和信息检索,因为它关注的是向量的方向而不是大小,比如在文档相似性计算中。

3. 编辑距离 (Edit Distance)

  • 定义:编辑距离,又称Levenshtein距离,是将一个字符串转换成另一个字符串所需的最小编辑操作次数(包括插入、删除、替换的操作)。
  • 应用:广泛用于拼写检查、DNA序列比对和自然语言处理中。

4. 海明距离 (Hamming Distance)

  • 定义:海明距离用于衡量两个等长字符串之间的差异,即在相同位置上不同字符的数量。
  • 应用:主要用于编码理论和信息技术中的错误检测和纠正,例如校验和比较二进制字符串。

3 LSH函数家族

算法定义中心思想核心公式优点缺点应用场景
MinHash LSH用于集合相似性的LSH方法通过最小哈希签名计算集合的Jaccard相似度 h ( A ) = min ⁡ ( { h i ( x ) ∣ x ∈ A } ) h(A) = \min(\{h_i(x) \mid x \in A\}) h(A)=min({hi(x)xA})高效处理集合相似性,减少计算量需要预计算最小哈希签名文档去重,集合相似性计算
SimHash用于文本和文档相似性的LSH方法将高维向量降维为短签名,保留方向信息 s = sign ( ∑ w i x i ) s = \text{sign}(\sum w_i x_i) s=sign(wixi)适合处理高维数据,方向不变性不适合处理完全不同的文本文本检索,文档相似性计算
p-stable LSH用于欧氏距离的LSH方法基于p-stable分布投影到低维空间 h ( x ) = ⌊ a ⋅ x + b r ⌋ h(x) = \lfloor \frac{a \cdot x + b}{r} \rfloor h(x)=rax+b准确近似欧氏距离,适合高维数值数据投影精度依赖于维度选择图像检索,数值数据相似性计算
Bit Sampling LSH用于汉明距离的LSH方法从二进制字符串中随机选择位作为特征直接位选择简单高效,直接操作二进制数据仅适合固定长度的二进制数据二进制数据比较,错误检测和校验

相关文章:

大数据挖掘--两个角度理解相似度计算理论

文章目录 0 相似度计算可以转换成什么问题1 集合相似度的应用1.1 集合相似度1.1文档相似度1.2 协同过滤用户-用户协同过滤物品-物品协同过滤 1.2 文档的shingling--将文档表示成集合1.2.1 k-shingling1.2.2 基于停用词的 shingling 1.3 最小哈希签名1.4 局部敏感哈希算法&#…...

【Mybatis Plus】JSqlParser解析sql语句

【Mybatis Plus】JSqlParser解析sql语句 【一】JSqlParser 是什么【二】JSqlParser 的安装步骤【三】使用场景【1】sql语句解析【2】SQL 语句转换【3】SQL 语句生成【4】SQL 语句验证 【四】在使用 JSqlParser 时,如何处理 SQL 注入攻击?【1】使用预编译…...

vue3 + ElementPlus 封装列表表格组件包含分页

在前端开发中,封装组件是必不可少的。今天就来封装一个通用的列表表格组件,包含分页功能,可以提高代码的复用性和可维护性。 1. 组件设计 Props: tableData:表格数据。columns:表格列配置。total&#xff…...

springboot3整合knife4j详细版,包会!(不带swagger2玩)

1. 引入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version> </dependency>2. 配置文件 简短必要版 # 配置springd…...

Vue2自定义指令实现优雅的前端埋点方案

背景介绍 在前端开发中&#xff0c;埋点是一个非常常见的需求。通常我们需要记录用户的操作行为&#xff0c;以便于后续的数据分析和问题排查。传统的埋点方式往往是在每个需要埋点的地方都写一段上报代码&#xff0c;这样不仅代码重复度高&#xff0c;而且维护起来也比较麻烦…...

1.攻防世界 题目名称-文件包含

进入题目页面如下 直接给出了源码进行代码审计 题目给出提示是文件包含的题 代码审计 <?php // 高亮显示当前 PHP 文件的源代码&#xff0c;方便查看和调试 highlight_file(__FILE__);// 包含名为 "check.php" 的文件&#xff0c;通常这个文件中可能包含一些用…...

Ruby Dir 类和方法详解

Ruby Dir 类和方法详解 引言 在Ruby编程语言中&#xff0c;Dir类是一个非常有用的工具&#xff0c;它允许我们与文件系统进行交互&#xff0c;如列出目录内容、检查文件是否存在等。Dir类提供了多种方法&#xff0c;使得文件系统的操作变得简单且高效。本文将详细介绍Ruby中的…...

axios 发起 post请求 json 需要传入数据格式

• 1. axios 发起 post请求 json 传入数据格式 • 2. axios get请求 1. axios 发起 post请求 json 传入数据格式 使用 axios 发起 POST 请求并以 JSON 格式传递数据是前端开发中常见的操作。 下面是一个简单的示例&#xff0c;展示如何使用 axios 向服务器发送包含 JSON 数…...

Windows编程:下载与安装 Visual Studio 2010

本节前言 在写作本节的时候&#xff0c;本来呢&#xff0c;我正在写的专栏&#xff0c;是 MFC 专栏。而 VS2010 和 VS2019&#xff0c;正是 MFC 学习与开发中&#xff0c;可以使用的两款软件。然而呢&#xff0c;如果你去学习 Windows API 知识的话&#xff0c;那么&#xff0…...

python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理

【1】引言 前序学习过程中&#xff0c;已经掌握了对图像的基本滤波操作技巧&#xff0c;具体的图像滤波方式包括均值滤波、中值滤波和高斯滤波&#xff0c;相关文章链接有&#xff1a; python学opencv|读取图像&#xff08;五十四&#xff09;使用cv2.blur()函数实现图像像素…...

基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境

一、创建Vite项目 使用Vite初始化一个VueTypeScript项目&#xff1a; npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…...

DockerFile详细学习

目录 1.DockerFile介绍 2.DockerFile常用指令 3.指令详细讲解 4.实例 构建Node-Exporter 构建Alertmanager 构建Mariadb 1.DockerFile介绍 什么是 Dockerfile&#xff1f; Dockerfile 是一个文本文件&#xff0c;包含了构建 Docker 镜像的所有指令。 Dockerfile 是一…...

C++11详解(三) -- 可变参数模版和lambda

文章目录 1.可变模版参数1.1 基本语法及其原理1.2 包扩展1.3 empalce系列接口1.3.1 push_back和emplace_back1.3.2 emplace_back在list中的使用&#xff08;模拟实现&#xff09; 2. lambda2.1 lambda表达式语法2.2 lambda的捕捉列表2.3 lambda的原理 1.可变模版参数 1.1 基本…...

IDEA 中集成 Maven,配置环境、创建以及导入项目

目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…...

讯飞智作 AI 配音技术浅析(三):自然语言处理

自然语言处理&#xff08;NLP&#xff09;是讯飞智作 AI 配音技术的重要组成部分&#xff0c;负责将输入的文本转换为机器可理解的格式&#xff0c;并提取出文本的语义和情感信息&#xff0c;以便生成自然、富有表现力的语音。 一、基本原理 讯飞智作 AI 配音的 NLP 技术主要包…...

html转PDF文件最完美的方案(wkhtmltopdf)

目录 需求 一、方案调研 二、wkhtmltopdf使用 如何使用 文档简要说明 三、后端服务 四、前端服务 往期回顾 需求 最近在做报表类的统计项目&#xff0c;其中有很多指标需要汇总&#xff0c;网页内容有大量的echart图表&#xff0c;做成一个网页去浏览&#xff0c;同时…...

漏洞挖掘 | 基于mssql数据库的sql注入

视频教程在我主页简介或专栏里 目录&#xff1a; 前记 0x1 判断网站数据库类型 0x2 了解mssql数据库的主要三大系统表 0x3 了解mssql的主要函数 0x4 判断注入点及其注入类型 0x5 联合查询之判断列数 0x6 联合查询之获取数据库相关信息 0x7 mssql之时间盲注 0x8 mssql之报错注…...

.Net Core笔记知识点(跨域、缓存)

设置前端跨域配置示例&#xff1a; builder.Services.AddCors(option > {option.AddDefaultPolicy(policy > {policy.WithOrigins(originUrls).AllowAnyMethod().AllowAnyHeader().AllowCredentials();});});var app builder.Build();app.UseCors(); 【客户端缓存】接…...

JS实现一个通用的循环填充数组的方法

function createFilledArray(length, pattern) {return Array.from({ length }, (_, i) > pattern[i % pattern.length]); }// 示例 const result createFilledArray(8, [1, 2, 3]);console.log(result); // [1, 2, 3, 1, 2, 3, 1, 2]解析&#xff1a; createFilledArray(…...

Java项目: 基于SpringBoot+mybatis+maven+mysql实现的智能学习平台管理系(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql实现的智能学习平台管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、…...

Rust HashMap :当储物袋遇上物品清单

开场白&#xff1a;哈希映射的魔法本质 在Rust的奇幻世界里&#xff0c;HashMap就像魔法师的储物袋&#xff1a; 键值对存储 → 每个物品都有专属咒语&#xff08;键&#xff09;和实体&#xff08;值&#xff09;快速查找 → 念咒瞬间召唤物品动态扩容 → 自动伸展的魔法空间…...

力扣-哈希表-18 四数之和

思路 和《三数之和》类似&#xff0c;也使用类似双指针的操作&#xff0c;重点在去重&#xff0c;细节是多个数目相加需要小心超出范围&#xff0c;强转一下。 代码 class Solution { public:vector<vector<int>> fourSum(vector<int>& nums, int tar…...

DeepSeek-VL2论文解读:用于高级多模态理解的专家混合视觉语言模型

github:https://github.com/deepseek-ai/DeepSeek-VL2 paper: https://github.com/deepseek-ai/DeepSeek-VL2/blob/main/DeepSeek_VL2_paper.pdf 大型视觉语言模型&#xff08;VLMs&#xff09;已经成为人工智能领域的变革性力量&#xff0c;将大型语言模型&#xff08;LLMs&…...

PHP JSON操作指南

PHP JSON操作指南 概述 JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于机器解析和生成。PHP作为一门流行的服务器端脚本语言&#xff0c;支持对JSON数据进行读取、编写和解析。本文将…...

使用ES5和ES6求函数参数的和、解析URL Params为对象

文章目录 1 使用ES5和ES6求函数参数的和1.1 ES51.2 ES6 2 解析URL Params为对象 1 使用ES5和ES6求函数参数的和 1.1 ES5 function sum() {let sum 0;Array.prototype.forEach.call(arguments, function(item) {sum item * 1;})return sum; }1.2 ES6 function sum(...nums)…...

Python 数据挖掘与机器学习

模块一&#xff1a;Python编程 Python编程入门 1、Python环境搭建 2、如何选择Python编辑器&#xff1f; 3、Python基础 4、常见的错误与程序调试 5、第三方模块的安装与使用 6、文件读写&#xff08;I/O&#xff09; Python进阶与提高 1、Numpy模块库 2、Pandas模块…...

【华为OD-E卷 - 108 最大矩阵和 100分(python、java、c++、js、c)】

【华为OD-E卷 - 最大矩阵和 100分&#xff08;python、java、c、js、c&#xff09;】 题目 给定一个二维整数矩阵&#xff0c;要在这个矩阵中选出一个子矩阵&#xff0c;使得这个子矩阵内所有的数字和尽量大&#xff0c;我们把这个子矩阵称为和最大子矩阵&#xff0c;子矩阵的…...

Mysql系列之--重新认识Mysql

1、Mysql是什么 Mysql是一个被广泛使用的开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;使用结构化查询语句SQL进行管理和操作数据。Mysql有客户端和服务端&#xff0c;客户端通过ip地址、端口、用户名、密码连接到服务端&#xff0c;然后使用SQL语句进…...

利用UNIAPP实现短视频上下滑动播放功能

在 UniApp 中实现一个短视频上下滑动播放的功能,可以使用 swiper 组件来实现滑动效果,并结合 video 组件来播放短视频。以下是一个完整的示例,展示如何在 UniApp 中实现这一功能。 1. 创建 UniApp 项目 如果你还没有创建 UniApp 项目,可以使用 HBuilderX 创建一个新的项目…...

计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价预测 机器学习 深度学习 Python爬虫 HDFS集群

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

Shell 中的 Globbing:原理、使用方法与实现解析(中英双语)

Shell 中的 Globbing&#xff1a;原理、使用方法与实现解析 在 Unix Shell&#xff08;如 Bash、Zsh&#xff09;中&#xff0c;globbing 是指 文件名模式匹配&#xff08;filename pattern matching&#xff09;&#xff0c;它允许用户使用特殊的通配符&#xff08;wildcards…...

解决 ssh connect to host github.com port 22 Connection timed out

一、问题描述 本地 pull/push 推送代码到 github 项目报 22 端口连接超时&#xff0c;测试连接也是 22 端口连接超时 ssh 密钥没问题、也开了 Watt Toolkit 网络是通的&#xff0c;因此可以强制将端口切换为 443 二、解决方案 1、测试连接 ssh -T gitgithub.com意味着无法通…...

CSS的媒体查询语法

CSS的媒体查询语法 常见的媒体类型常见的特性示例 CSS的媒体查询语法可以根据不同的设备特性&#xff08;如屏幕尺寸、分辨率等&#xff09;应用不同的样式。基本语法如下&#xff1a; media 媒体类型 and (特性: 值) {/* 样式规则 */ }常见的媒体类型 screen&#xff1a;用于…...

生产环境超实用shell脚本一

生产环境超实用shell脚本一 Shell脚本作为一种强大的自动化工具&#xff0c;能够帮助运维人员轻松应对各种复杂的任务。 本文将为您介绍服务器健康检查、日志清理、备份以及监控等多个方面&#xff0c;并详细阐述每个脚本的功能和应用场景&#xff0c;助力您提升运维效率&…...

【1】高并发导出场景下,服务器性能瓶颈优化

高并发导出场景下&#xff0c;服务器性能瓶颈通常出现在 CPU、内存、磁盘 I/O 或网络带宽等方面。为了解决这些问题&#xff0c;可以从以下几个方面进行优化&#xff1a; 1. 优化导出逻辑 减少计算复杂度&#xff1a;检查导出逻辑中是否存在不必要的计算或重复操作&#xff0c;…...

go的sync包学习

包含了sync.Mutex,sync.RWMutex,sync.Cond,sync.Map,sync.Once等demo sync.Mutex //讲解mutex import ("fmt""math/rand""sync""time" )type Toilet struct {m sync.Mutex } type Person struct {Name string }var DateTime "2…...

一文读懂:TCP网络拥塞的应对策略与方案

TCP&#xff08;传输控制协议&#xff09;是互联网中广泛使用的可靠传输协议&#xff0c;它通过序列号、确认应答、重发控制、连接管理以及窗口控制等机制确保数据的可靠传输。然而&#xff0c;在网络环境中&#xff0c;由于多个主机共享网络资源&#xff0c;网络拥塞成为了一个…...

用DeepSeek分析总结一下DeepSeek发表过的8篇论文

1. 《深度求索大语言模型&#xff1a;以长期主义拓展开源语言模型》&#xff08;2024年1月5日&#xff09; 2. 《深度求索代码模型&#xff1a;当大语言模型遇上编程——代码智能的崛起》&#xff08;2024年1月26日&#xff09; 3. 《深度求索视觉语言模型&#xff1a;迈向真…...

node.js使用mysql2对接数据库

一、引言 在现代Web开发中&#xff0c;Node.js作为一种高效、轻量级的JavaScript运行时环境&#xff0c;已经广泛应用于后端服务的开发中。而MySQL&#xff0c;作为一个广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;提供了强大的数据存储和查询功能…...

华为支付-免密支付接入免密代扣说明

免密代扣包括支付并签约以及签约代扣场景。 开发者接入免密支付前需先申请开通签约代扣产品&#xff08;即申请配置免密代扣模板及协议模板ID&#xff09;。 华为支付以模板维度管理每一个代扣扣费服务&#xff0c;主要组成要素如下&#xff1a; 接入免密支付需注意&#x…...

Java 面试真题解析与技巧分享

Java 面试对于每一位 Java 开发者来说都是至关重要的&#xff0c;它不仅是对我们技术能力的检验&#xff0c;更是我们迈向理想工作岗位的关键一步。在面试中&#xff0c;掌握常见真题的解题思路和回答技巧&#xff0c;能够让我们更加自信地展示自己的实力。本文将结合具体的面试…...

使用 Python 编程语言来实现机器学习小项目教程案例

以下是一个简单的机器学习小项目教程案例,使用 Python 编程语言和 Scikit-learn 库来实现一个分类任务。我们将使用经典的鸢尾花(Iris)数据集来训练一个分类器,预测鸢尾花的种类。 项目目标 使用机器学习算法对鸢尾花数据集进行分类,预测鸢尾花的类别(Setosa、Versicolor…...

网络安全 | 零信任架构:重构安全防线的未来趋势

网络安全 | 零信任架构&#xff1a;重构安全防线的未来趋势 一、前言二、零信任架构的核心概念与原理2.1 核心概念2.2 原理 三、零信任架构的关键技术组件3.1 身份管理与认证系统3.2 授权与访问控制系统3.3 网络与安全监测系统3.4 加密与数据保护技术 四、零信任架构与传统安全…...

react关于手搓antd pro面包屑的经验(写的不好请见谅)

我们先上代码&#xff0c;代码里面都有注释&#xff0c;我是单独写了一个组件&#xff0c;方便使用&#xff0c;在其他页面引入就行了 还使用了官方的Breadcrumb组件 import React, { useEffect, useState } from react; import { Breadcrumb, Button } from antd; import { …...

PHP-运算符

[题目信息]&#xff1a; 题目名称题目难度PHP-运算符2 [题目考点]&#xff1a; PHP运算符优先级[Flag格式]: SangFor{zEk4r_djfgy0CibPz6LdXpwBrXRckhIT}[环境部署]&#xff1a; docker-compose.yml文件或者docker tar原始文件。 http://分配ip:2067[题目writeup]&#x…...

chrome浏览器chromedriver下载

chromedriver 下载地址 https://googlechromelabs.github.io/chrome-for-testing/ 上面的链接有和当前发布的chrome浏览器版本相近的chromedriver 实际使用感受 chrome浏览器会自动更新&#xff0c;可以去下载最新的chromedriver使用&#xff0c;自动化中使用新的chromedr…...

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…...

SQLAlchemy 2.0的简单使用教程

SQLAlchemy 2.0相比1.x进行了很大的更新&#xff0c;目前网上的教程不多&#xff0c;以下以链接mysql为例介绍一下基本的使用方法 环境及依赖 Python:3.8 mysql:8.3 Flask:3.0.3 SQLAlchemy:2.0.37 PyMySQL:1.1.1使用步骤 1、创建引擎&#xff0c;链接到mysql engine crea…...

Android原生开发问题汇总

Fragment顶部出现一个白条怎么办&#xff1f;父类布局搞事情。 layer-list被拉伸问题 Android之 ImageView android:src和tools:src的区别是什么? Android运行时权限的总结&#xff0c;以及EasyPermissions框架的使用 Android Studio添加EasyPemissions Android中module怎…...

springboot中使用注解实现分布式锁

下面将详细介绍如何在 Spring Boot 里借助注解实现分布式锁&#xff0c;以login_lock:作为锁的 key 前缀&#xff0c;使用请求参数里的phone值作为 key&#xff0c;等待时间设为 0 秒&#xff0c;锁的持续时间为 10 秒。我们会使用 Redis 来实现分布式锁&#xff0c;同时借助 S…...