快速了解推荐引擎检索技术

news/2024/5/19 23:06:32 标签: 推荐算法, 系统架构

目录

一、推荐引擎和其检索技术

二、推荐引擎的整体架构和工作过程

(一)用户画像

(二)文章画像

(三)推荐算法召回

三、基于内容的召回

(一)召回算法

(二)优缺点分析

基于内容的召回的优点

基于内容的召回的缺点

(三)案例:新闻推荐系统

四、基于协同过滤的召回

(一)基于用户的协同过滤(User CF)

原理展开

案例:电影推荐系统

(二)基于物品的协同过滤(Item CF)

原理展开

案例:音乐推荐系统

(三)Model-based协同过滤

原理展开

案例:电子商务推荐系统

五、如何对多种召回方案进行选择和排序?

参考文章技术


一、推荐引擎和其检索技术

推荐引擎是一种关键的信息过滤技术,用于根据用户的兴趣和行为,向他们推荐个性化的内容、产品或服务。推荐引擎使用各种检索技术和算法来实现这一目标,通常使用机器学习、协同过滤、自然语言处理和深度学习等技术来实现个性化推荐。选择适当的技术取决于应用场景、可用数据和用户需求。

不同的推荐引擎可以使用不同的技术组合,以提供最佳的用户体验。以下是一些简单的举例:

电子商务平台

  • 个性化产品推荐:电子商务网站可以使用协同过滤算法,如基于用户的协同过滤或基于物品的协同过滤,根据用户的购买历史和产品属性,向用户推荐相关产品。
  • 内容分析:使用自然语言处理技术来分析产品描述和用户评论,以理解产品的特征,然后将其与用户需求匹配。

社交媒体平台

  • 好友推荐:社交媒体平台可以使用基于社交网络图的算法,找到用户的好友或关注者,然后推荐他们的帖子、图片或活动。
  • 内容主题建模:分析用户发布的内容,使用主题建模技术,以确定他们的兴趣,并推荐相关主题的内容。

视频流媒体平台

  • 个性化视频推荐:视频流媒体平台可以使用深度学习模型,如卷积神经网络(CNN)和循环神经网络(RNN),根据用户的观看历史和视频内容特征,进行个性化视频推荐。
  • 实时性分析:分析当前热门视频和用户观看历史,以实时更新推荐内容。

新闻推荐平台

  • 多源数据聚合:新闻推荐引擎可以从多个新闻源中聚合信息,并使用自然语言处理技术来分析新闻文章的内容,然后为用户推荐相关新闻。
  • 时序分析:新闻的时效性对新闻推荐至关重要,因此考虑新闻发布时间和用户兴趣的时序分析是必要的。

二、推荐引擎的整体架构和工作过程

推荐引擎的工作过程是一个复杂的流程,需要深入了解用户兴趣、文章内容和各种推荐算法,以生成个性化的推荐列表。这个过程结合了用户行为数据的分析、用户画像、文章画像以及不同的推荐策略,以提供用户满意的推荐体验。不同的推荐系统可以根据需求和数据采用不同的组合和算法。

我们这边引用《检索技术核心 20 讲》【推荐引擎:没有搜索词,“头条”怎么找到你感兴趣的文章?】中的架构图进行分析。

(一)用户画像

推荐引擎能够更好地理解用户的兴趣和意图,尽管用户没有明确提供搜索词,从而更好地为他们推荐个性化的内容、产品或服务。其依靠之一就是用户画像。以下是一些关键点的总结:

用户行为数据收集:推荐引擎收集用户在平台上对不同文章的行为数据,包括曝光(查看)、点击、阅读、收藏、点赞和评论等行为。这些行为反映了用户与文章的互动方式。

用户兴趣挖掘:通过分析用户的行为数据,推荐引擎可以挖掘和理解用户的兴趣。例如,用户点击的文章类型、频率,点赞和评论的主题等都提供了线索来了解用户的喜好。

用户画像:推荐引擎构建用户画像,这是一个描述用户兴趣和行为的数据结构。用户画像通常包括多个标签,每个标签表示用户的一个兴趣领域,而标签的权重表示用户对该兴趣的强烈程度。

权重衰减和时效性:用户画像中的标签权重会随着时间的变化而衰减。如果用户长时间没有表现某个兴趣,相关标签的权重会逐渐减小。这有助于反映用户兴趣的变化和时效性。

动态用户画像:用户画像的动态性允许推荐引擎更好地理解用户的变化兴趣,以及适应用户行为的变化。新的行为数据可以用来更新用户画像。

通过这一流程,推荐引擎能够建立动态的用户画像,更好地理解用户的喜好和兴趣变化,即使没有明确的搜索词,也可以根据用户行为为他们提供个性化的推荐内容。这有助于提高用户体验和推荐的准确性。

(二)文章画像

只给用户打上标签还不够,我们也要给文章打上标签。在这个过程中,我们除了要提取文章中的关键词以外,更多的要对文章中的内容做语义分析工作,比如,文章分类、主题词提取、主题提取等等。通过这些方式,推荐引擎就能为每一篇文章都生成文章画像了。以下是一些关键点的总结:

文章标签生成:推荐引擎通过对文章进行语义分析和内容理解,为每篇文章生成标签。这些标签描述了文章的属性、内容和特点。

关键词提取:除了文章标签,推荐引擎还会提取文章中的关键词,这些关键词可以用于进一步的内容分析和匹配。

语义分析:推荐引擎进行语义分析,可以包括文章的主题词提取、主题提取等,以更深入地理解文章的主题和内容。

文章画像:通过为每篇文章生成标签和关键词,推荐引擎可以构建文章画像,这是描述文章内容和特性的数据结构。

通过文章标签和关键词,推荐引擎能够更精确地理解每篇文章的内容,进一步提高推荐的准确性。这使得推荐引擎能够更好地将用户的兴趣和文章的特性相匹配,以生成更个性化的推荐列表。

(三)推荐算法召回

在建立用户画像和文章画像之后,推荐引擎可以根据需求采用不同的推荐算法来为用户提供文章推荐。主要的推荐算法分为两大类:基于统计的静态召回算法和个性化召回算法。

  • 基于统计的静态召回算法:这种算法根据文章的统计数据来进行推荐,而不考虑用户的个性化特征。典型的统计数据包括点击量、评论数、收藏数、点赞数等。推荐引擎可以事先统计出一些热门文章,然后将这些热门文章推荐给所有用户。这种方法适用于为广大用户提供相对一致的热门内容。它比较适合作为个性化召回不足时候的补充方案。
  • 个性化召回算法:个性化召回算法是推荐引擎的核心,它更加注重用户个性化的需求和兴趣。两种主要的个性化召回算法是基于内容的召回和基于协同过滤的召回。

基于内容的召回:这种算法使用用户的兴趣标签和文章的标签来匹配用户和文章之间的相关性。如果用户的标签与文章的标签相似,那么这篇文章可能会被推荐给用户。基于内容的召回注重文章的特征和内容。

基于协同过滤的召回:协同过滤算法基于用户行为数据,如用户-文章交互历史,找到与用户相似的其他用户或相似的文章,然后根据这些相似性关系来进行推荐。协同过滤算法可以进一步分为基于用户的协同过滤和基于物品的协同过滤。

选择合适的推荐算法取决于具体的应用需求和可用的数据。基于统计的静态召回算法可以用作个性化召回的补充,而个性化召回算法更注重用户的个性化兴趣和需求,通常在推荐系统中占主导地位。不同的应用可能会采用不同的算法或算法组合,以提供最佳的用户体验。

三、基于内容的召回

基于内容的召回是一种推荐算法,它根据用户的兴趣和文章的内容特征来进行个性化推荐。

(一)召回算法

  1. 标签和关键词匹配:在基于内容的召回中,用户画像和文章画像中的标签或关键词用于判断文章是否与用户的兴趣相匹配。如果标签或关键词相符,文章被认为适合推荐给用户。

  2. 倒排索引:为了实现标签和关键词的匹配,可以建立倒排索引。这允许根据用户的喜好召回与其兴趣匹配的文章。

  3. 向量空间模型:标签匹配可以扩展到高维向量空间的最近邻检索问题,使得召回更加灵活。

(二)优缺点分析

基于内容的召回的优点

  1. 不依赖其他用户数据:不需要其他用户的历史行为数据,因此适用于新用户或小众用户。

  2. 个性化推荐:能够提供个性化的推荐,因为它直接基于用户和文章的内容特征。

  3. 冷启动处理:能够推荐新发布的文章,因为不依赖用户历史行为数据。

基于内容的召回的缺点

  1. 依赖用户和文章画像:需要准确的用户画像和文章画像,这需要相当的数据和分析工作。

  2. 无法挖掘潜在兴趣:仅基于已知的标签和关键词,可能无法挖掘用户的潜在兴趣,限制了推荐的多样性。

  3. 无法为冷启动用户推荐:对于全新的用户,没有足够的信息来进行内容匹配,因此无法给他们提供个性化的推荐。

总的来说,基于内容的召回算法在不依赖用户行为数据、提供个性化推荐和处理冷启动问题方面具有优点。然而,它也受限于依赖用户和文章画像、难以挖掘潜在兴趣以及无法为冷启动用户提供推荐的缺点。这些优缺点需要在设计推荐系统时权衡考虑。

(三)案例:新闻推荐系统

假设正在建立一个新闻推荐系统,目标是根据用户的兴趣为他们推荐最相关的新闻文章。使用基于内容的召回算法来实现这一目标。

  1. 数据收集:我们开始收集用户的行为数据,例如他们点击、阅读、点赞和分享的新闻文章,以及用户在平台上留下的评论。我们还收集了每篇新闻文章的内容、标题、标签和关键词。

  2. 用户画像:通过分析用户的行为数据,我们创建了用户画像。这个用户画像包括了用户的兴趣标签,例如政治、体育、科技、娱乐等。标签的权重表示了用户对每个标签的兴趣程度。用户画像会不断更新,以反映用户的兴趣变化。

  3. 文章画像:每篇新闻文章都有一个文章画像,它包括文章的标签、关键词以及文章内容的特征。这些特征帮助我们更好地理解文章的主题和内容。

  4. 基于内容的召回:当用户登录系统或者需要获得新闻推荐时,我们使用基于内容的召回算法。对于每位用户,我们匹配他们的用户画像中的标签和关键词与所有新闻文章的标签和关键词。

  5. 倒排索引和向量空间模型:我们使用倒排索引来快速检索与用户兴趣相匹配的文章。此外,我们可以使用向量空间模型,将用户画像和文章画像映射到高维向量空间,然后计算它们之间的相似度,以找到最相关的文章。

  6. 推荐结果:最终,我们将最相关的新闻文章推荐给用户,以满足他们的个性化需求。这些推荐可以随着用户的兴趣和行为的变化而调整。

这个案例说明了如何使用基于内容的召回算法来为用户推荐新闻文章,利用用户和文章的特征进行内容匹配,以提供个性化的推荐。这种方法允许系统适应用户的兴趣和需求,甚至可以处理新用户的冷启动问题。

四、基于协同过滤的召回

协同过滤是推荐引擎中最具代表性的方法之一。它与基于内容的召回方法有着显著的区别,因为它不依赖于文章内容本身,而是基于用户和文章之间的互动关系来进行推荐。协同过滤算法可以分为两大类:Memory-based(基于内存)和Model-based(基于模型)。

Memory-based协同过滤

  • 基于用户的协同过滤(User CF):该算法根据用户之间的相似性来推荐给用户与他们兴趣相似的其他用户喜欢的文章。如果用户A和用户B有相似的互动行为,那么用户A可能会被推荐与用户B喜欢的文章。
  • 基于物品的协同过滤(Item CF):这个算法根据文章之间的相似性来推荐与用户已经互动过的文章相似的其他文章。如果用户喜欢文章X,那么类似于文章X的其他文章可能会被推荐给用户。

Model-based协同过滤:这些算法使用机器学习模型或其他数学模型来捕捉用户和文章之间的关系。它们可以更复杂地建模用户和文章之间的互动,从而提供更精确的推荐。

协同过滤方法的主要思想是通过分析用户行为数据,找到用户之间的相似性和文章之间的相似性,以推荐与用户历史行为相似的其他用户或文章。这种方法不需要对用户和文章进行详尽的特征提取,因此通常更适用于大规模的推荐系统。不过,协同过滤也面临一些挑战,如数据稀疏性、冷启动问题(对新用户或新文章的推荐)、和可扩展性等。

(一)基于用户的协同过滤(User CF)

原理展开

  1. 用户相似性:用户CF基于一个关键概念,即用户之间的相似性。相似性可以根据他们的历史行为数据来计算,例如他们对哪些物品点击、购买、评分等。

  2. 用户历史行为数据:对于每个用户,系统会维护他们的历史行为数据,这包括他们与哪些物品互动,以及互动的程度。这些数据用于计算用户之间的相似性。

  3. 推荐过程:当用户需要获得推荐时,系统首先找到与该用户相似的其他用户。这可以通过计算用户之间的相似性分数来实现,例如使用余弦相似度或其他相似性度量。相似性高的用户被认为具有相似的兴趣。

  4. 推荐物品:一旦找到相似用户,系统会推荐那些这些相似用户喜欢的但当前用户尚未互动过的物品。这些物品被认为与用户的兴趣相符。

案例:电影推荐系统

假设正在建立一个电影推荐系统,目标是根据用户的电影观看历史来为他们推荐其他可能感兴趣的电影。我们将使用基于用户的协同过滤算法来实现这一目标。

  1. 数据收集:我们开始收集用户的电影观看历史数据,包括每位用户观看了哪些电影以及观看电影的评分。此外,我们还收集了电影的详细信息,包括电影类型、导演、演员等。

  2. 用户相似性:我们使用用户的电影观看历史和评分来计算用户之间的相似性。一种常用的方法是使用余弦相似度,通过比较两位用户的观看和评分向量来确定相似性。

  3. 推荐过程:当用户登录系统或需要获得电影推荐时,系统首先找到与该用户相似的其他用户。这可以通过计算用户之间的相似性得分来实现。

  4. 推荐电影:一旦找到相似用户,系统会根据这些相似用户喜欢的但当前用户尚未观看的电影来进行推荐。这些电影被认为与用户的兴趣相符。

实际案例分析

  • 假设用户A和用户B在许多电影上的评分和观看历史非常相似。用户A已经观看了电影X,并给出了高分。用户B还没有观看电影X。系统可以推荐电影X给用户B,因为用户A的兴趣与用户B相似。

  • 用户C是一个新用户,没有足够的观看历史和评分数据来计算与其他用户的相似性。这是一个典型的冷启动问题,对于新用户,系统可能需要使用其他方法来进行推荐,如基于流行度的推荐。

理论上,基于用户的协同过滤(User CF)需要用户的历史观看行为和评分数据,以及用户之间的相似性计算。这些数据可以帮助系统理解用户的兴趣和进行推荐。以下是一个简单的示例,说明如何使用数据进行分析理解:

示例用户观看历史数据:以下是一个包含用户观看历史的示例数据:

  • 用户A:观看了电影X、Y、Z,并分别给出了评分4、5、3。
  • 用户B:观看了电影X、Y、W,并分别给出了评分4、4、5。
  • 用户C:观看了电影Y、Z、V,并分别给出了评分3、4、5。
  • 用户D:观看了电影W、X、Z,并分别给出了评分5、4、3。

用户相似性计算:使用用户观看历史和评分数据,可以计算用户之间的相似性。以下是示例用户相似性矩阵:(用户之间的相似性可以使用余弦相似度等方法计算。)

用户用户A用户B用户C用户D
用户A1.000.870.910.86
用户B0.871.000.820.92
用户C0.910.821.000.83
用户D0.860.920.831.00

分析理解

  • 从用户相似性矩阵可以看出,用户A和用户B的相似性最高,因为他们的观看历史和评分很相似。

  • 基于用户的协同过滤将根据相似用户的观看历史来为用户进行电影推荐。例如,如果用户A已经观看并评分了电影X,那么系统可以向用户B推荐电影X,因为用户B与用户A相似。

  • 对于新用户,如用户C,系统可以找到与其观看历史和评分相似的其他用户,然后向用户C推荐这些用户喜欢的电影。

这个示例说明了如何使用用户观看历史数据和用户相似性来进行基于用户的协同过滤。实际应用中,这些数据和相似性计算可能会更加复杂,但基本原理是相似的。数据支持分析和理解是建立推荐系统的关键一步,它有助于确定哪些物品应该被推荐给用户。

(二)基于物品的协同过滤(Item CF)

基于物品的协同过滤(Item Collaborative Filtering,Item CF)是推荐系统中的一种协同过滤算法,它通过分析用户和物品之间的互动关系,来为用户推荐与他们已经互动过的物品相似的其他物品。以下是对基于物品的协同过滤的介绍:

原理展开

  1. 物品相似性:物品CF的核心思想是计算物品之间的相似性。相似性可以根据用户的互动行为数据来计算,例如哪些用户同时喜欢或互动了同一对物品。

  2. 用户历史行为数据:对于每个用户,系统会维护他们的历史互动行为数据,包括哪些物品被他们互动过,以及互动的程度。这些数据用于计算物品之间的相似性。

  3. 推荐过程:当用户需要获得推荐时,系统首先找到用户已经互动过的物品。然后,系统会基于这些互动过的物品来找到与它们相似的其他物品。

  4. 推荐物品:一旦找到相似物品,系统会推荐这些相似物品给用户,因为用户已经喜欢或互动过与这些物品相似的物品。

案例:音乐推荐系统

假设正在构建一个音乐推荐系统,目标是根据用户的歌曲收听历史来为他们推荐其他可能感兴趣的歌曲。使用基于物品的协同过滤算法来实现这一目标。

示例用户收听历史数据:以下是包含用户的歌曲收听历史的示例数据:

  • 用户A:收听了歌曲X、Y、Z。
  • 用户B:收听了歌曲X、W。
  • 用户C:收听了歌曲Y、Z、V。
  • 用户D:收听了歌曲W、X、Z。

歌曲相似性计算:使用用户的歌曲收听历史数据,可以计算歌曲之间的相似性。以下是示例歌曲相似性矩阵:(歌曲之间的相似性可以使用不同方法计算,例如Jaccard相似性或余弦相似度。)

歌曲歌曲X歌曲Y歌曲Z歌曲W歌曲V
歌曲X1.000.670.750.670.33
歌曲Y0.671.000.800.330.67
歌曲Z0.750.801.000.500.50
歌曲W0.670.330.501.000.00
歌曲V0.330.670.500.001.00

分析理解

  • 从歌曲相似性矩阵可以看出,歌曲X和歌曲Z的相似性最高,因为它们通常与其他歌曲一起被用户A、用户B和用户D收听。

  • 基于物品的协同过滤将根据用户的歌曲收听历史来为他们推荐与他们已经收听过的歌曲相似的其他歌曲。例如,如果用户A已经收听了歌曲X,那么系统可以向用户A推荐歌曲Z,因为歌曲Z与用户A已经收听的歌曲X相似。

  • 对于新歌曲,如歌曲V,系统可以找到与其相似的其他歌曲,然后向用户推荐这些相似的歌曲。

这个示例说明了如何使用歌曲收听历史数据和歌曲相似性来进行基于物品的协同过滤。实际应用中,这些数据和相似性计算可能会更加复杂,但基本原理是相似的。数据支持分析和理解是建立推荐系统的关键一步,它有助于确定哪些歌曲应该被推荐给用户。

(三)Model-based协同过滤

Model-based协同过滤是推荐系统中的一种协同过滤算法,与传统的Memory-based方法相比,它更加高效并且能够处理数据稀疏性问题。Model-based协同过滤通过构建用户和物品的模型来进行推荐。

原理展开

  1. 模型构建:Model-based协同过滤首先会建立用户模型和物品模型。用户模型描述了每个用户的偏好和特点,而物品模型描述了每个物品的特性。

  2. 学习过程:通过训练算法,系统会使用已有的用户-物品互动数据来学习用户模型和物品模型。这通常涉及到矩阵分解等技术,将用户-物品互动矩阵拆分成用户模型矩阵和物品模型矩阵。

  3. 推荐过程:一旦模型建立完成,系统可以使用用户模型和物品模型来进行推荐。对于每个用户,系统会计算他们与未互动物品的偏好,然后为用户推荐偏好最高的物品。

案例:电子商务推荐系统

假设正在构建一个电子商务推荐系统,目标是为用户推荐他们可能感兴趣的商品。使用Matrix Factorization方法,如奇异值分解(SVD),来实现这一目标。

示例用户购买历史数据:以下是包含用户的购买历史的示例数据:

  • 用户A:购买了商品X、Y。
  • 用户B:购买了商品X、W。
  • 用户C:购买了商品Y、Z。
  • 用户D:购买了商品W、X。

商品特征数据:我们还有商品的特征数据,如类别、品牌、价格等。以下是示例商品特征数据:

  • 商品X:类别-电子产品,品牌-BrandX,价格-100美元。
  • 商品Y:类别-服装,品牌-BrandY,价格-50美元。
  • 商品Z:类别-食品,品牌-BrandZ,价格-5美元。
  • 商品W:类别-电子产品,品牌-BrandW,价格-120美元。

分析理解

  • Matrix Factorization的目标是将用户-商品交互数据矩阵分解成用户矩阵和商品矩阵的乘积,以捕捉用户和商品之间的潜在关系。

  • 通过训练算法,系统会学习用户矩阵和商品矩阵的参数,以最大程度地拟合已有的购买历史数据。

  • 一旦模型建立完成,系统可以使用用户矩阵和商品矩阵来进行推荐。例如,对于用户A,系统会计算他与未购买商品的偏好,然后为用户A推荐偏好最高的商品。

示例推荐

  • 对于用户A,系统可以使用用户A的模型和未购买商品的模型来计算用户A对未购买商品的偏好。如果商品Y的模型与用户A的模型相匹配,系统可以向用户A推荐商品Y。

  • 对于新商品V,系统可以根据新商品的特征与商品模型的相似性来进行推荐。如果商品V与商品X和商品Y在类别、品牌等特征上相似,系统可以向喜欢商品X和商品Y的用户推荐商品V。

这个示例说明了Matrix Factorization方法如何使用购买历史数据和商品特征数据来建立用户模型和商品模型,并如何进行推荐。这种方法适用于电子商务、音乐流媒体、电影推荐等多个领域。数据支持分析和理解是建立准确推荐系统的关键一步。

五、如何对多种召回方案进行选择和排序?

在推荐引擎中选择和排序多种召回方案是一个常见的做法,因为不同的召回方案在不同的情境下可能更适合不同的用户或需求。

以下是一些步骤和考虑因素,有助于选择和排序多种召回方案:

  1. 多样性召回方案:首先,确保你有多样性的召回方案,涵盖不同的推荐算法和策略,以满足不同用户的需求。这可以包括基于内容的召回、协同过滤、热门文章推荐等。

  2. 召回方案评估:对每个召回方案进行评估和性能测试,以确定它们的准确性、覆盖率、多样性等指标。了解每个方案的优势和劣势对于综合选择非常重要。

  3. 用户特征和历史数据:考虑用户的特征和历史数据,以确定哪种召回方案在不同情境下更适合用户。例如,新用户可能更适合热门文章推荐,而活跃用户可能需要更个性化的推荐。

  4. 排序策略:确定如何对不同召回方案的结果进行排序。你可以采用加权组合、协同排序等策略。例如,你可以根据每个召回方案的性能,为每个方案分配一个权重,然后将它们组合起来。

  5. 实验和反馈:进行A/B测试或实验,以确定哪种召回方案在实际用户群体中表现最佳。根据实验结果进行调整和优化。

  6. 动态调整:推荐系统通常会采用在线学习或定期更新召回方案,以适应用户行为和需求的变化。监控用户反馈和数据,随着时间的推移对召回方案进行动态调整。

  7. 混合推荐:最终的推荐可以由多种召回方案的组合组成。例如,将基于用户历史行为的协同过滤与基于内容的召回方案相结合,以提供更全面的推荐。

  8. 多层次排序:推荐系统通常会采用多层次排序的方法,首先使用较粗略的召回方案,然后使用更细致的排序算法对候选集合进行精细排序。

综合而言,选择和排序多种召回方案需要考虑多个因素,包括用户需求、算法性能和实验反馈。混合推荐法是一种常见的做法,可以提供更全面和满足多样用户需求的推荐。在不断监控和优化的基础上,构建一个多层次的、灵活的推荐系统是非常有帮助的。

参考文章技术

  1. 极客时间《检索技术核心 20 讲》【广告系统:广告引擎如何做到在0.1s内返回广告信息?】,陈东 ----- 主要学习材料
  2. 快速了解相似检索方法-CSDN博客


http://www.niftyadmin.cn/n/5152144.html

相关文章

迷宫问题的对比实验研究

对不同的迷宫进行算法问题,分别采用栈、队列、基于红黑树的A*算法、以及图论中的最短路径来解决迷宫问题。 基本要求: (1) 从文件读入9*9的迷宫,设置入口和出口,分别采用以上方法,输出从入口到出…

Spring和SpringMVC总结

一、Spring IoC(Inversion of Control)中文名称:控制反转(对象的创建交给Spring管理)。DI(dependency injection )依赖注入。容器(Container):放置所有被管理的对象。beans:容器中所有被管理的对…

代码随想录训练营第60天 | 503.下一个更大元素II ● 42. 接雨水● 84.柱状图中的最大矩形

503.下一个更大元素II 题目链接:https://leetcode.com/problems/next-greater-element-ii/ 解法: 由于是循环数组,可以直接把两个数组拼接在一起,然后使用单调栈求下一个最大值。 写法上,可以巧妙一些&#xff0c…

电吉他学习笔记

电吉他学习笔记 【一】 学习思路【1】学习思路【1】调音【2】姿势【3】看谱【4】和弦 【一】 学习思路 【1】学习思路 首先是音阶,基本的C调、G调音阶指法 建议的电吉他初级课程安排 1-持琴姿势,左手按弦姿势,右手拨弦方法,拨片…

怎么在C++中实现云端存储变量

随着云计算技术的快速发展,现在我们可以将数据存储在云端,以便于在不同设备和地点访问。在C中,我们也可以通过一些方法来实现这个功能。本文将详细介绍如何在C中实现云端存储变量。 首先,我们需要理解,C本身并没有直接…

大疆Livox MID-360安装ROS1/2驱动 Ubuntu20.04

文章目录 一、接线连接二、安装上位机可视化工具三、安装ROS驱动3.1 配置静态IP3.2 安装Livox SDK23.3 安装ROS驱动3.4 驱动 本文介绍如何在Ubuntu20.04中安装大疆Livox MID-360的ROS1/2驱动 一、接线连接 livox航插一分三线,其中航空母头连接激光雷达&#xff0c…

叁[3],感兴趣区域ROI

1,简介 ROI,感兴趣区域(region of interest),截取图像 2,获取方法 方法1:使用Rect cv::Mat srccv::imread("*.bmp");//读取原图 cv::Mat matROI src(cv::Rect(100,200,50,100));//截取原图&am…

Android 13.0 根据app包名授予app监听系统通知权限

1.概述 在13.0的系统rom产品定制化开发中,在一些产品rom定制化开发中,系统内置的第三方app需要开启系统通知权限,然后可以在app中,监听系统所有通知,来做个通知中心的功能,所以需要授权获取系统通知的权限,然后来顺利的监听系统通知。来做系统通知的功能,接下来来实现…