数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)

数据库管理285期 20245-01-17

  • 数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)
    • 1 HNSW
      • 事务支持
      • 解读
    • 2 IVF
      • 分区支持
      • 解读
    • 3 混合向量索引
      • 何时选择混合向量索引
      • 为何选择混合向量索引
    • 总结

数据库管理-第285期 Oracle 23ai:深入浅出向量索引(20250117)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database
PostgreSQL ACE Partner10年数据库行业经验
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP,ITPUB认证专家
圈内拥有“总监”称号,非著名社恐(社交恐怖分子)公众号:胖头鱼的鱼缸
CSDN:胖头鱼的鱼缸(尹海文)
墨天轮:胖头鱼的鱼缸
ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

胖头鱼的鱼缸_01.png
之前写Oracle Vector DB和AI Vector Search相关文章的时候,似乎一直没有针对向量近似相似性搜索的性能优化进行介绍,对于数据库来说,加速数据查询最便捷的方式就是增加索引,那么向量的索引和传统标量数据的索引有什么异同呢,本期和总监一起学习。(本文大部分内容源自于Oracle官方文档)

1 HNSW

HNS,Navigable Small World,可译作可导航小世界,其理念是构建一个邻近图,其中图中的每个向量根据下面3个特征连接到其他几个向量:

  • 向量之间的距离
  • 插入期间搜索的每个步骤中考虑的最近向量候选的最大数量 (EFCONSTRUCTION)
  • 每个向量允许的最大连接数 (NEIGHBORS)

如果上述两个阈值的组合过高,则最终可能会得到一个紧密连接的图,这会减慢搜索过程。另一方面,如果这些阈值的组合过低,则图可能会变得过于稀疏和/或断开连接,这使得在搜索过程中很难找到某些向量之间的路径。
用于向量搜索的可导航小世界 (NSW) 图遍历从图中预定义的入口点开始,访问一组密切相关的向量。搜索算法采用两个关键列表:候选列表(遍历图时遇到的动态更新向量列表)和结果列表(包含迄今为止找到的与查询向量最接近的向量)。随着搜索的进行,算法会浏览整个图,通过探索和评估可能比结果中的向量更近的向量来不断优化候选列表。一旦候选列表中没有比结果中最远的向量更近的向量,则该过程结束,这表明已达到局部最小值并已确定与查询向量最接近的向量。下图对这一点进行了展示:
image.png
所述方法在将向量插入到图中的一定规模时表现出稳健的性能。超过此阈值后,分层可导航小世界 (HNSW,Hierarchical Navigable Small World) 方法通过引入多层层次结构来增强 NSW 模型,类似于概率跳跃列表中观察到的结构。此分层架构是通过将图的连接分布在多个层上来实现的,并以每个后续层包含来自下一层链接子集的方式组织它们。这种分层确保顶层捕获长距离链接,有效地充当图中的快速路径,而较低层则专注于较短的链接,从而促进细粒度的本地导航。因此,搜索从较高层开始,以快速近似目标向量的区域,逐渐移动到较低层以进行更精确的搜索,通过利用从顶层移动到底层时向量之间的较短链接(较小距离),显著提高搜索效率和准确性。为了更好地理解 HNSW 的工作原理,让我们看看此层次结构如何用于概率跳过列表结构:
image.png
概率跳跃表结构使用多层链接列表,其中上层跳过的数字比下层跳过的数字多。在此示例中,要搜索数字 17。从顶层开始,然后跳转到下一个元素,直到找到 17、到达列表末尾或找到大于 17 的数字。当到达列表末尾或找到大于 17 的数字时,则从上一层中最新的小于 17 的数字开始。
HNSW 使用与 NSW 层相同的原理,即较高层中的向量之间的距离较大。以下 2D 空间中的图表说明了这一点:
最顶层是最长的边,最底层是最短的边。
image.png
从顶层开始,一层中的搜索从入口向量开始。然后对于每个节点,如果有一个邻居比当前节点更接近查询向量,则跳转到该邻居。算法一直这样做,直到找到查询向量的局部最小值。当在一层中找到局部最小值时,搜索将使用新层中的相同向量转到下一层,并在该层中继续搜索。此过程重复进行,直到找到底层的局部最小值,其中包含所有向量。此时,搜索转换为使用NSW算法围绕最新找到的局部最小值进行近似相似性搜索,以提取与查询向量最相似的前k个向量。虽然上层可以具有NEIGHBORS参数设置的每个向量的最大连接数,但第0层可以具有两倍的连接数。下图说明了此过程:
image.png
层是使用内存图(而非 Oracle 内存图)实现的。每个层都使用单独的内存图。如前所述,在创建HNSW索引时,可以使用 NEIGHBORS 参数微调上层中每个向量的最大连接数,以及使用EFCONSTRUCTION参数微调插入期间搜索的每个步骤中考虑的最近向量候选的最大数量,其中EF代表Enter Factor。
如前所述,在使用Oracle AI Vector Search使用HNSW索引运行近似搜索查询时,可以指定应执行近似搜索的目标精度。
对于HNSW近似搜索,可以指定目标精度百分比值来影响探测搜索时考虑的候选数。这是由算法自动计算的。值为 100 往往会产生与精确搜索类似的结果,尽管系统可能仍会使用索引并且不会执行精确搜索。优化器可能会选择继续使用索引,因为考虑到查询中的谓词,这样做可能会更快。可以指定EFSEARCH参数来规定在探测索引时要考虑的候选的最大数量,而不是指定目标准确度百分比值。该数字越高,准确度越高。

注意:
· 如果未在近似搜索查询中指定任何目标精度,那么将继承创建索引时设置的目标精度。将看到,在创建索引时,可以根据要创建的索引类型使用百分比值或参数值指定目标精度。
· 与索引创建时设置的目标精度相比,在索引搜索时可以指定不同的目标精度。对于HNSW索引,可以使用EFSEARCH参数(高于索引创建时指定的EFCONSTRUCTION值)查看更多邻居以获得更准确的结果。在索引创建期间提供的目标精度决定了索引创建参数,并且还充当向量索引搜索的默认精度值。

事务支持

HNSW索引图是静态的纯内存结构。使用两个主要结构对具有 HNSW 索引的表进行事务维护:私有日志(private journal)和共享日志(shared journal)。

  • 私有日志是每个事务的内存数据结构,用于跟踪由事务添加或删除的向量(更新实际上是删除后插入)。这类似于用于维护内存列存储数据的事务日志。这些内存结构来自向量内存池,用于读取一致性目的。
  • 共享日志包含提交系统更改号(SCN)和相应的修改行。此结构是在创建向量索引时创建的磁盘结构。在提交时,记录到私有日志中的更改将转换为行并刷新到共享日志中。此结构还用于读取一致性目的。
注意:
· 对于批量DML(使用 INSERT /*+ APPEND */ 直接加载),更改会直接在共享日志中跟踪,以避免对向量内存池造成压力。
· 在完全重新填充时(直到新的HNSW图可用),如果查询尝试访问不再存在的旧版本的HNSW图,则会触发读取一致性错误ORA 51815 "INMEMORY NEIGHBOR GRAPH HNSW vector index snapshot is too old"。
例如,假设旧的HNSW图存在于SCN 100。虽然完全重新填充会在SCN 200处构建新图(这将创建新的ROWID到VID映射表),但到达SCN 150的查询无法访问 SCN 200 处的新图。这是因为查询的执行计划是使用与SCN 100处的旧图相对应的旧ROWID到VID映射表编译的。

除了先前定义的主要用于事务一致性的结构之外,还可以维护完整的检查点磁盘结构(如果启用),以便在实例重启后更快地重新加载HNSW索引。在创建索引并完全重新填充 HNSW 图时,会自动创建完整的检查点。默认情况下,HNSW 检查点处于启用状态。
如何将先前定义的结构相互结合使用,以便在具有HNSW索引的表上实现事务维护和读取一致性的整体更好性能:

  1. 按照DML,通过考虑内存中现有的HNSW图以及查询的私有日志和共享日志来确定事务一致的已删除和插入向量集列表,从而实现读取一致性。这包括从日志中识别已删除向量的精确列表,通过增强过滤器以忽略已删除向量,对当前版本的HNSW索引运行近似 top-K 搜索,对日志中新插入的向量运行精确top-k搜索,并合并两次搜索的结果。
    image.png
  2. 随着DML在共享日志中积累,在磁盘日志中精确搜索已删除和插入的向量会导致其性能下降。为了最大限度地减少这种影响,会自动触发索引的完整重新填充。在后台重新填充HNSW索引的决定基于一个默认阈值,该阈值代表针对索引运行的DML数量的一定百分比。此外,每次创建或重新填充HNSW索引时,都会在磁盘上重新创建新创建的图形的完整检查点和新的ROWID到VID映射表。
    image.png
注意:
在完全重新填充期间,内存中需要两个图形副本。例如,如果我们有10%的新插入,那么重新填充图形的向量内存需求将比内存中原始HNSW图形大小大约多10%。因此,在重新填充期间的峰值向量内存需求下,内存需求将是2.1倍,而在重新填充完成后,内存需求将降至1.1倍。这样做是为了确保在创建新图形时仍可以使用先前版本的图形实现读取一致性。

解读

从HNSW索引的概念来看,要支持DML的难度和开销还是很大的。因此在很多数据库(前提是支持向量DML操作)中,在存储有向量数据的表上建立HNSW索引后,是不允许再进行DML操作的,DML操作也需要删除后重建HNSW索引。而在Oracle 23.4和23.5中,对于在向量列上构建了HNSW索引的表,也是不允许使用DML。HNSW支持DML操作功能是在23.6实现的。

2 IVF

IVF,Inverted File Flat,可译作倒排文件平面,IVF向量索引是一种通过使用邻居分区或集群来缩小搜索区域以提高搜索效率的技术。下图描述了使用二维空间表示进行近似搜索时如何创建分区或聚类。但这可以推广到更高维的空间。
image.png
×表示此空间中的向量数据点。
添加新数据点(显示为小圆圈)以识别k个分区质心,其中质心的数量(k)由数据集的大小(n)决定。通常,k设置为 n 的平方根,但可以在创建索引期间通过指定NEIGHBOR PARTITIONS参数进行调整。
每个质心代表相应分区的平均向量(重心)。
质心是通过对向量进行训练计算得出的,其目标是最小化每个向量与最近质心的总距离。
质心最终将向量空间划分为k个分区。这种划分在概念上表现为从质心扩展的圆圈,当它们相遇时停止增长,形成不同的分区。

image.png
除了外围的向量之外,每个向量都落在与质心相关的特定分区内。

image.png
对于查询向量vq​,搜索算法会识别最近的i个质心,其中i默认为k的平方根,但可以通过设置NEIGHBOR PARTITION PROBES参数针对特定查询进行调整。此调整允许在搜索速度和准确性之间进行权衡。
此参数的数字越大,准确性越高。在此示例中,i设置为2,两个已识别的分区是分区编号1和3。

image.png
一旦确定了i个分区,就会对它们进行全面扫描,以识别出本例中前5个最近的向量。这个数字5可以与k不同,可以在查询中指定这个数字。下图突出显示了在分区编号1和3中找到的离vq最近的五个向量。
此方法构成近似搜索,因为它将搜索限制在分区的子集内,从而加速了搜索过程,但可能会在未检查的分区中丢失更接近的向量。此示例说明近似搜索可能无法产生离vq​最近的准确向量,这表明搜索效率和准确性之间存在固有的权衡。

image.png
但是,距离vq最近的5个向量并不是通过近似搜索找到的向量。可以看到分区号4中的一个向量比分区号3中检索到的向量之一更接近vq。

image.png
现在可以看到为什么使用向量索引搜索并不总是精确搜索,而是近似搜索。在此示例中,近似搜索准确率仅为 80%,因为它仅检索了5个精确搜索向量结果中的4个。

image.png
使用Oracle AI Vector Search运行使用向量索引的近似搜索查询时,可以指定近似搜索应执行的目标精度。
对于IVF近似搜索,可以指定目标精度百分比值来影响用于探测搜索的分区数。该值由算法自动计算。值为100时,系统可能会强制执行精确搜索,但系统仍可能使用索引,不会执行精确搜索。优化器可能会选择继续使用索引,因为考虑到查询中的谓词,这样做可能会更快。可以指定NEIGHBOR PARTITION PROBES参数来强制搜索要探测的分区的最大数量,而不是指定目标精度百分比值。该数字越高,精度越高。

注意:
· 如果未在近似搜索查询中指定任何目标精度,那么将继承创建索引时设置的目标精度。将看到,在创建索引时,可以根据要创建的索引类型使用百分比值或参数值指定目标精度。
· 与索引创建时设置的目标精度相比,可以在索引搜索时指定不同的目标精度。对于 IVF 索引,可以使用NEIGHBOR PARTITION PROBES参数探测更多质心分区以获得更准确的结果。在索引创建期间提供的目标精度决定了索引创建参数,并且还充当向量索引搜索的默认精度值。

分区支持

IVF向量索引支持分区表上的全局和本地索引。默认情况下,IVF索引按质心全局分区。
全局IVF索引由两个表组成:

  • 一个名为VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROIDS,包含已识别质心向量和相关ID的列表。
  • 第二个名为VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROID_PARTITIONS,它按质心 ID 进行列表分区。每个分区包含与该分区的相应质心ID紧密相关(集群)的基表向量。

image.png
此结构用于加速索引中的搜索,方法是首先识别最接近查询向量的质心,然后使用相应的质心ID修剪不必要的分区。
但是,如果基表按某些关系数据进行分区,并且查询按基表分区键进行过滤,则全局 IVF 索引不是最佳选择,因为它们完全独立于基表分区键。例如,如果搜索类似于向量化图片的加利福尼亚州前 10 栋房屋,则图片本身很可能与加利福尼亚州没有任何关系。虽然查询受益于基表按州分区的事实,因此只能搜索与加利福尼亚州相对应的分区,但查询仍然必须查看可能不在加利福尼亚州的图片。
为了进一步加速此类查询,可以创建本地IVF索引。索引的术语“本地”是指基表分区或子分区与索引分区之间的一对一关系。
如下图所示,基表有三个分区,创建的本地IVF索引仍然由两个内部表组成:

  • 一个名为VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROIDS,它按基表分区 ID 进行列表分区,因此与基表等分区。每个分区包含相应标识的质心向量和相关 ID 的列表。
  • 第二个名为VECTOR$<base table name>_IVF_IDX$<object info>$IVF_FLAT_CENTROID_PARTITIONS,它按基表分区ID进行列表分区,并按质心ID进行列表子分区。此表也与基表等分区,每个子分区包含与该子分区的相应质心ID紧密相关(集群)的基表向量。

image.png
回到我们最初的例子,搜索加利福尼亚州前10栋房屋,类似于向量化图片;查询受益于对基表和质心表(加利福尼亚州)的分区修剪,因为它们都是按州分区的。此外,一旦在该分区中确定了最近的质心,查询只需扫描质心分区表中相应的质心群集子分区,而无需扫描其他质心子分区。
另一种可能性是基表进行复合分区。以下是与该情况相对应的图形表示。质心表根据基表子分区进行列表分区。质心表中的每个分区包含在相应基表子分区中找到的所有质心向量。质心分区表按基表子分区 ID 进行列表分区,并进一步按质心ID进行子分区:
image.png

注意:
只能在分区基表上创建本地IVF索引。
本地IVF索引继承常规本地索引使用的所有系统目录表和视图。vecsys.vector$index表中的标志 (idx_spare2)指示索引是本地还是全局向量索引。

使用本地 IVF 索引可带来其他优势:

  • 简化分区管理操作 (PMOP,Partition Management Operations):
    例如,删除表分区只需删除相应的索引分区。
  • 灵活的索引方案:
    例如,将某些索引分区标记为UNUSABLE,以避免通过部分索引对某些表分区进行索引。

解读

IVF索引性能低于HNSW索引,但其可以更便携的管理并更好的支持DML操作。

3 混合向量索引

混合向量索引(Hybrid Vector Index)继承了Oracle Text搜索索引的所有信息检索功能,并利用了Oracle AI Vector Search向量索引的语义搜索功能。
混合向量索引允许使用全文搜索和语义向量搜索的组合来索引和查询文档。混合向量索引是一类专门的域索引,它将现有的Oracle Text索引数据结构和向量索引数据结构组合成一个统一的结构。单个索引包含文档的文本和向量字段,使能够同时执行关键字搜索和向量搜索的组合。
混合向量索引的目的是通过允许用户使用开箱即用和自定义评分技术以各种组合方式搜索向量和关键字来增强Oracle Text索引的搜索相关性。通过将传统的基于关键字的文本搜索与基于向量的相似性搜索相结合,可以改善整体搜索体验并为用户提供更准确的信息。

何时选择混合向量索引

如果查询需要语义相似但涉及特定焦点领域(即涉及特定组织、用户名、产品代码、技术术语、日期或时间)的信息,请考虑在混合搜索场景中使用混合向量索引。例如,典型的混合搜索查询可以是查找“ABC 公司股票欺诈的十大实例”。
这样的查询涉及两个独立的部分:

  • 第一个是想要识别“股票欺诈”概念的地方
  • 第二个是想要缩小结果范围以仅关注“ABC 公司”的地方

纯关键字搜索可能会返回专门包含查询词(如“股票”、“欺诈”、“ABC”或“公司”)的结果,因为它侧重于将精确的关键字或单词或短语的表面表示与文本索引中的标记术语进行匹配。因此,单独的关键字搜索可能不适合这里,因为它可能会忽略我们查询中的单词背后的语义含义,尤其是当内容中没有精确的术语时。
纯向量搜索侧重于理解单词或短语的含义和上下文,而不仅仅是匹配关键字。向量搜索考虑查询词之间的语义关系,因此它可能包含更多与上下文相关的结果,如“公司欺诈”、“股市操纵”、“股票不当行为”、“金融违规行为”或“金融部门的诉讼”。向量搜索也可能不适合这里,因为它可能包含有关涉及 ABC 或类似组织的股票欺诈这一更广泛主题的结果,尤其是当内容中没有精确的短语“ABC 公司股票欺诈”时。
混合搜索可以解决此类查询的两个组成部分,方法是对同一数据运行关键字搜索和向量搜索,然后将两个搜索结果合并为一个结果集。这样,可以利用文本索引和向量索引的优势来检索最相关的结果。

为何选择混合向量索引

混合向量索引的优点:

  • 与纯向量搜索或关键字搜索相比,召回率更高:
    如前所述,混合搜索可以结合Oracle AI Vector Search和Oracle Text搜索的强大功能,提供更准确和个性化的信息。关键字搜索或向量搜索本身可能与复杂的搜索场景无关,并且可能导致大量虚假结果。
  • 减轻分段的缺点:
    向量嵌入模型通常会对输入文本的大小施加限制,这会迫使将大型文档拆分为较小的数据块以进行语义搜索(如了解数据转换阶段中所述)。由于截断,数据块可能会丢失原始文档的更广泛上下文,这可能会导致结果丢失。混合向量索引通过在文档级别执行文本搜索来帮助恢复每个文档的整个上下文。
  • 与维护独立索引相比,部署和管理更简单:
    混合向量索引是一个可以使用DML维护文本和向量的单域索引。关键字搜索和向量搜索都会对所有文档执行,然后将两个搜索结果合并并评分以返回统一的结果集。它提供了端到端索引管道,可自动转换输入数据以进行向量搜索和关键字搜索,从而提高索引性能。此索引公开了可选首选项以配置索引参数,但这不是必需的。
  • 统一查询 API,按向量和关键字进行搜索:
    单个SEARCH API(可通过DBMS_HYBRID_VECTOR PL/SQL包获得)允许在文档文本索引上指定传统的CONTAINS查询,并在向量化块索引上指定VECTOR_DISTANCE查询。可以在仅关键字、仅向量和混合搜索模式之间切换,以检索最佳文档或块。

总结

本期对Oracle 23ai的向量索引进行了较为深入的介绍。
老规矩,知道写了些啥。

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

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

相关文章

行人识别检测数据集,yolo格式,PASICAL VOC XML,COCO JSON,darknet等格式的标注都支持,准确识别率可达99.5%

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

【Spring】原型 Bean 被固定

问题描述 在定义 Bean 时&#xff0c;有时候我们会使用原型 Bean&#xff0c;例如定义如下&#xff1a; Service Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) public class ServiceImpl { }然后我们按照下面的方式去使用它&#xff1a; RestController public class Hello…

2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?

模型假设仅仅是简单陈述吗&#xff1f;允许AI的使用是否降低了比赛难度&#xff1f;还在依赖机器学习的模型吗&#xff1f;处理题目的方法有哪些&#xff1f;O奖论文的优点在哪里&#xff1f; 本文调研了当年赛题的评委文章和O奖论文&#xff0c;这些问题都会在文章中一一解答…

PyTorch框架——基于深度学习YOLOv8神经网络学生课堂行为检测识别系统

基于YOLOv8深度学习的学生课堂行为检测识别系统&#xff0c;其能识别三种学生课堂行为&#xff1a;names: [举手, 读书, 写字] 具体图片见如下&#xff1a; 第一步&#xff1a;YOLOv8介绍 YOLOv8 是 ultralytics 公司在 2023 年 1月 10 号开源的 YOLOv5 的下一个重大更新版本…

kafka学习笔记6 ACL权限 —— 筑梦之路

在Kafka中&#xff0c;ACL&#xff08;Access Control List&#xff09;是用来控制谁可以访问Kafka资源&#xff08;如主题、消费者组等&#xff09;的权限机制。ACL配置基于Kafka的kafka-acls.sh工具&#xff0c;能够管理对资源的读取、写入等操作权限。 ACL介绍 Kafka的ACL是…

领域算法 - 负载均衡算法

负载均衡算法 文章目录 负载均衡算法一&#xff1a;常规负载均衡算法二&#xff1a;Nginx负载均衡算法 一&#xff1a;常规负载均衡算法 二&#xff1a;Nginx负载均衡算法 # 定义负载均衡设备的Ip及设备状态 upstream bakend {ip_hash; server 127.0.0.1:9090 down; server…

【Unity3D】3D物体摆放、场景优化案例Demo

目录 PlaceManager.cs(放置管理类) Ground.cs(地板类) 和 GroundData.cs(地板数据类) 额外知识点说明 1、MeshFilter和MeshRenderer的Bounds区别 2、Gizmos 绘制一个平行于斜面的立方体 通过网盘分享的文件&#xff1a;PlaceGameDemo2.unitypackage 链接: https://pan.baid…

C# OpenCvSharp 部署文档矫正,包括文档扭曲/模糊/阴影等情况

目录 说明 效果 模型 项目 代码 下载 参考 C# OpenCvSharp 部署文档矫正&#xff0c;包括文档扭曲/模糊/阴影等情况 说明 地址&#xff1a;https://github.com/RapidAI/RapidUnDistort 修正文档扭曲/模糊/阴影等情况&#xff0c;使用onnx模型简单轻量部署&#xff0c…

生成树机制实验

1 实验内容 1、基于已有代码,实现生成树运行机制,对于给定拓扑(four_node_ring.py),计算输出相应状态下的生成树拓扑 2、构造一个不少于7个节点,冗余链路不少于2条的拓扑,节点和端口的命名规则可参考four_node_ring.py,使用stp程序计算输出生成树拓扑 2 实验原理 一、…

数据结构详解——堆与二叉树

​ 目录 树的概念树的表示方法二叉树的概念特殊的二叉树二叉树的性质二叉树的存储结构顺序存储链式存储 堆的概念与结构堆的性质堆的实现堆的初始化入堆堆的扩容向上调整算法出堆&#xff08;最顶端元素&#xff09;向下调整算法 二叉树的实现二叉树的创建二叉树的销毁二叉树的…

【蓝桥杯】43694.正则问题

题目描述 考虑一种简单的正则表达式&#xff1a; 只由 x ( ) | 组成的正则表达式。 小明想求出这个正则表达式能接受的最长字符串的长度。 例如 ((xx|xxx)x|(x|xx))xx 能接受的最长字符串是&#xff1a; xxxxxx&#xff0c;长度是 6。 输入描述 一个由 x()| 组成的正则表达式。…

mac m1下载maven安装并配置环境变量

下载地址&#xff1a;Download Apache Maven – Maven 解压到一个没有中文和空格的文件夹 输入pwd查看安装路径 输入cd返回根目录再输入 code .zshrc 若显示 command not found: code你可以通过以下步骤来安装和配置 code 命令&#xff1a; 1. 确保你已经安装了 Visual Studio…

移远通信多模卫星通信模组BG95-S5获得Skylo网络认证,进一步拓展全球卫星物联网市场

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式宣布&#xff0c;其支持“卫星蜂窝”多模式的高集成度NTN卫星通信模组BG95-S5已成功获得NTN网络运营商Skylo的网络认证。BG95-S5也成为了获得该认证的最新款移远卫星通信模组。 BG95-S5模组顺利获得Skylo认证&a…

1.3.浅层神经网络

目录 1.3.浅层神经网络 1.3.1 浅层神经网络表示 1.3.2 单个样本的向量化表示 1.3.4 激活函数的选择 1.3.5 修改激活函数 1.3.5 练习​​​​​​​ 1.3.浅层神经网络 1.3.1 浅层神经网络表示 之前已经说过神经网络的结构了&#xff0c;在这不重复叙述。假设我们有如下…

StarRocks强大的实时数据分析

代码仓库&#xff1a;https://github.com/StarRocks/starrocks?tabreadme-ov-file StarRocks | A High-Performance Analytical Database 快速开始&#xff1a;StarRocks | StarRocks StarRocks 是一款高性能分析型数据仓库&#xff0c;使用向量化、MPP 架构、CBO、智能物化…

2024年博客之星主题创作|猫头虎分享AI技术洞察:2025年AI发展趋势前瞻与展望

2025年AI发展趋势前瞻&#xff1a;猫头虎深度解析未来科技与商业机遇 摘要 2024年&#xff0c;AI技术迎来爆发式增长&#xff0c;AIGC、智能体、AIRPA、AI搜索、推理模型等技术不断突破&#xff0c;AI应用场景持续扩展。2025年&#xff0c;AI将进入全新发展阶段&#xff0c;W…

51c~ONNX~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务&#xff0c;涉及训练模型将图像分类为预定义类别。本文中&#xff0c;我们将探讨如何使用 PyTorch 构建一个简单的自定…

每打开一个chrome页面都会【自动打开F12开发者模式】,原因是 使用HBuilderX会影响谷歌浏览器的浏览模式

打开 HBuilderX&#xff0c;点击 运行 -> 运行到浏览器 -> 设置web服务器 -> 添加chrome浏览器安装路径 chrome谷歌浏览器插件 B站视频下载助手插件&#xff1a; 参考地址&#xff1a;Chrome插件 - B站下载助手&#xff08;轻松下载bilibili哔哩哔哩视频&#xff09…

USB3020任意波形发生器4路16位同步模拟量输出卡1MS/s频率 阿尔泰科技

信息社会的发展&#xff0c;在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息 与信号处理技术的整个面貌&#xff0c;而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关键 性、乃至决定性的作用&#xff0c;其应用已经深…

C++入门基础篇:域、C++的输入输出、缺省参数、函数重载、引用、inline、nullptr

本篇文章是对C学习前期的一些基础部分的学习分享&#xff0c;希望也能够对你有所帮助。 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 目录 1.第一个C程序 2. 域 3. namespace 3.1 namespace的作用 3.2 namespace的定义 3.3 namespace使用说明 4.C的输入和输出…