Alignment与Correspondence,用于量化衡量MLLM中视觉特征的视觉语义对齐与视觉结构程度的方法

Alignment与Correspondence,用于量化衡量MLLM中视觉特征的视觉语义对齐与视觉结构程度的方法
FesianXu 20241006 at Wechat Search Team

前言

在多模态大模型(Multimodal Large Language Model, MLLM)中,视觉特征就像是人的眼睛,而底座的LLM则像是人的大脑,合适的视觉特征的选择通常都是一个MLLM成功的重要一步。本文介绍一种可以用于高效选择合适的视觉特征的方法,如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注明出处,谢谢

  • 关键字:高效的MLLM视觉特征选择、定量衡量视觉语义对齐、定量衡量视觉结构特征

联系方式:

  • e-mail: FesianXu@gmail.com
  • github: https://github.com/FesianXu
  • 知乎专栏: 计算机视觉/计算机图形理论与应用
  • 微信公众号:机器学习杂货铺3号店

多模态大模型MLLM通常由三部分组成:

  1. 视觉编码器,可以是CLIP、SigLIP、DINO等
  2. 视觉连接器(Projector),通常是简单的MLP结构
  3. 底座LLM,如LLama、Qwen等

对于MLLM而言,视觉特征如同眼睛,负责感知外界的视觉信息,底座LLM则如同是大脑,用于分析视觉信息并且进行理解和分析,视觉特征由视觉编码器提供,通常会考虑采用一个连接器将视觉特征映射到LLM『可以理解』的特征空间。在一些研究中 [2],已经证实了只有在结合不同的视觉编码器特征(如SigLIP和DINOv2)之后,才能让MLLM同时具备对高级视觉语义和底层视觉结构理解的能力,视觉编码器的选用至关重要,并且如何去组合不同的视觉特征也是值得去探索的问题。然而,当前的MLLM训练范式,通常是:

  1. 固定视觉特征和底座LLM,训练视觉连接器的参数
  2. 然后放开视觉连接器和底座LLM的参数,同时进行训练

这意味着在尝试挑选不同的视觉编码器和他们之间的组合的时候,难以避免需要进行大量的LLM训练以搜索到最优的视觉编码器以及组合(搜索空间为 k k k),有没有一种比较好的方法,可以有效地缩小这个搜索空间呢? 论文 [1] 就是在尝试解决这个问题!在深入讨论本文主题之前,笔者建议读者可以回顾下博文 《基于CLIP特征的多模态大模型中的视觉短板问题》[3],总的来说,视觉特征可以分为两种维度:

  • 视觉语义对齐:视觉特征与文本语义的对齐能力,这个比较容易理解,语义对齐指的就是跨文本和图像模态,对于同一个概念(比如苹果、梨子)的共同描述方法,如图Fig 1所示。具体的定义可见 《视频与图片检索中的多模态语义匹配模型:原理、启示、应用与展望》[4] 中的介绍。视觉语义对齐能力,是衡量跨模态的语义度量。这种模型一般采用对比学习或者弱监督学习得到,比如CLIP、SigLIP。
  • 视觉结构对齐:用于衡量建模视觉基础结构的能力,这样定义比较抽象,在本文中,作者指的是对于同一个局部的视觉特征,具有语义不变性的表达,如图Fig 1所示,对于同一个实体(如雏菊)的不同局部信息,提取出来的视觉特征应该具有跨图像的不变性,这个也称之为图像的对应性(Correspondence)1。视觉结构对齐能力,是衡量同模态的语义度量。这种模型一般采用自监督的方法学习得到,比如DINO等。

一个好的视觉特征,应该是同时具备这两种能力的,因此我们需要定量去衡量一个视觉特征的这两个维度上的能力,并且将这两个维度的能力值映射到MLLM的下游任务能力上,那么这两个维度的能力值,就可以作为一个proxy(代理)去衡量MLLM的下游任务能力了。作者将视觉语义对齐的打分称之为Alignment Score(A score), 将视觉基础结构称之为Correspondence Score(C score),他们的组合则称之为AC score,作者发现AC score和MLLM的下游能力 Z Z Z之间呈现线性关系,也就是 Z ∝ f ( A , C ) Z \propto f(A, C) Zf(A,C),其中的 f ( ⋅ ) f(\cdot) f()为线性函数,这意味着只需要找到AC score最高的 k ′ k^{\prime} k个视觉特征作为搜索空间即可,而 k ′ < < k k^{\prime} << k k<<k。因此,我们的重点主要是看下作者是怎么计算A score和C score的。

在这里插入图片描述

Fig 1. 一个图片的视觉属性,可以分为语义对齐和视觉对齐,语义对齐指的是视觉信息与文本语义的跨模态对齐,视觉对齐指的是视觉结构自身模态内的对齐。通过描述A和C的能力,并且进行一定的组合建模,可以作为代理,和MLLM下游任务的表现进行关联。

语义对齐能力,需要衡量待评测的视觉特征与标准视觉语义特征之间的距离,标准视觉语义特征作者采用CLIP作为参考,即是公式(1)中的 E ^ i u \hat{E}_{i}^{u} E^iu,其中的 i i i表示第 i i i张图片, S c ( ⋅ ) S_c(\cdot) Sc()为余弦相似度,而公式中的 u u u v v v则是表示是图片每个patch的特征(视觉编码器采用的是ViT),也就是将待评测视觉特征和标准视觉语义特征之间进行细粒度的匹配,然后取最大值作为整体的匹配程度。整体流程可见Fig 2。
A Score = 1 n ∑ i = 0 n max ⁡ u , v S c ( E ^ i ( u ) , E i ( v ) ) (1) \mathrm{\text{A Score}} = \dfrac{1}{n} \sum_{i=0}^{n} \max_{u,v} S_c(\hat{E}_{i}^{(u)}, E^{(v)}_i) \tag{1} A Score=n1i=0nu,vmaxSc(E^i(u),Ei(v))(1)
在这里插入图片描述

Fig 2. 在评估待测视觉特征的Alignment Score的时候,将待评测视觉特征和标准视觉语义特征进行细粒度的匹配,然后取最大值作为整体的匹配结果,将其视为该图片的Alignment Score,最后对多张图片的A Score进行平均则得到最终的待评测视觉特征的A Score。

对于视觉结构对齐而言,我们需要评估待评测视觉特征的局部视觉不变性,因此我们需要成对的图片对,如 SPair-71k数据集,这是一个图像的语义对应点匹配的数据集,如Fig 3所示,数据集提供了成对的图片对,会标识出语义成对的对应点。对于一个关键点真实标签为 { p 1 s , p 2 s , ⋯ , p m s } \{p_{1}^{s}, p_{2}^{s},\cdots, p_{m}^{s}\} {p1s,p2s,,pms},那么对于采用待评测视觉特征的预测关键点为 { p 1 t , p 2 t , ⋯ , p m t } \{p_{1}^{t}, p_{2}^{t}, \cdots, p_{m}^{t}\} {p1t,p2t,,pmt},可以计算其PKG(关键点正确占比),如公式(2)所示,其中的 τ \tau τ为阈值而 I ( ⋅ ) \mathbb{I}(\cdot) I()为指示函数。这个指标表征了待评测视觉特征能够正确预测出关键点的能力。

C Score = 1 m ∑ i = 0 m I ( ∣ ∣ p j t − p j s ∣ ∣ 2 < τ ) (2) \mathrm{\text{C Score}} = \dfrac{1}{m} \sum_{i=0}^{m} \mathbb{I}(||p_{j}^{t}-p_{j}^s||_{2} < \tau) \tag{2} C Score=m1i=0mI(∣∣pjtpjs2<τ)(2)

作者采用了一个二阶线性组合对A Score和C Score进行组合,如公式(3)所示,其中的 β i j \beta_{ij} βij为待学习参数(此处按照作者原文,是6个待学习参数,而笔者认为此处应该是9个待学习参数,如公式(3)所示,不知为何作者添加了一个 2 − i 2-i 2i的限制,导致缺少了3个自由度,在A和C打分不一致的情况下,这个二阶的AC打分矩阵是不对称的,不能取上半角矩阵。下文为了保持和论文一致性,将继续沿用作者的6个待学习参数的表述),将通过实际观察到的 k ′ k^{\prime} k个视觉特征组合的AC Score与采用了这 k ′ k^{\prime} k个视觉特征的MLLM的下游任务表现进行拟合学习得出。

AC Score = ∑ i = 0 2 ∑ j = 0 2 − i β i j A i C j (3) \mathrm{\text{AC Score}} = \sum_{i=0}^{2} \sum_{j=0}^{2-i} \beta_{ij} A^i C^j \tag{3} AC Score=i=02j=02iβijAiCj(3)

在这里插入图片描述

Fig 3. 如果视觉特征具有良好的局部视觉不变性,那么其特征对于视觉语义一致的局部区域,应该能够形成匹配。

那么此时的AC Score可以视为是视觉特征在MLLM中下游任务的表现 Z Z Z的代理指标,如果能拟合出一个AC Score和 Z Z Z的线性关系,只需要在这个直线上找出能使的AC Score最大化的视觉特征组合,然后进行少量几次实验即可找出使得MLLM效果最佳的视觉特征组合。整个管道如Fig 4所示。这个直线,不妨表示为 y = X s w + ϵ \mathbf{y} = \mathbf{X}_s \mathbf{w} + \epsilon y=Xsw+ϵ,其中 X s ∈ R k ′ × 6 \mathbf{X}_s \in \mathbb{R}^{k^{\prime} \times 6} XsRk×6 w ∈ R 6 \mathbf{w} \in \mathbb{R}^{6} wR6,而 ϵ ∈ R k ′ \epsilon \in \mathbb{R}^{k^{\prime}} ϵRk是拟合残差, y ∈ R k ′ \mathbf{y} \in \mathbb{R}^{k^{\prime}} yRk是采样的 k ′ k^{\prime} k个视觉特征组合在MLLM下游任务中的表现。

在这里插入图片描述

Fig 4. 采用AC Score对视觉特征进行LLM下游任务能力预测的过程。

以上讨论了如何量化衡量视觉特征的语义对齐能力和语义结构对齐能力,并且如何综合这两个能力二阶线性拟合得出一个最终的AC Score的方法。作者在实验中,对于13个不同的视觉特征组合,在4个视觉benchmark上都进行了LLM下游任务训练并且得到了下游任务的指标,其拟合效果用决定系数( R 2 R^2 R2,即是因变量的变量有多少能被自变量解释)表示,如Fig 5所示,采用了AC Score的拟合能力最好,而只采用A Score或者C Score的效果都会差些,作为对比实验,作者也采用了拟合13个随机打分的方法作为基线,从中能发现AC Score和MLLM的下游模型表现,确实存在强的线性关系。

在这里插入图片描述

Fig 5. 对于不同的Score进行拟合,线性回归中的R^2指标的区别。

大概介绍了整个文章的思路后,笔者想把整个过程串起来给大伙儿讲解一遍自己的理解。首先,对于 k k k种可供参考的候选视觉特征组合(如本文中,待候选的视觉特征组合有13种,如下所示)和 M M M个待测试的基准集合(benchmark),那么理论上,我们需要 k M kM kM次MLLM的微调才能挑选出在 M M M个基准集合里面各自最佳的视觉特征。一个合理的想法是,我们对于第 i i i个基准集合 D i \mathcal{D}_i Di,我们合理地挑选出一个数量为 k ′ k^{\prime} k视觉特征组合的子集( k ′ < < k k^{\prime} << k k<<k),然后只进行 k ′ k^{\prime} k次微调,就能确定AC Score的代理直线,然后对剩余 k − k ′ k-k^{\prime} kk个未微调的组合,寻找性能预测的最大值即可。理论上,此时仅需要 k ′ M k^{\prime}M kM次微调了。

视觉特征组合分辨率类型基准集合 1基准集合 2基准集合 3基准集合 4
OpenAI CLIP ViT-L/14224单视觉编码器-前馈模型80.7
OpenAI CLIP ViT-L/14336单视觉编码器-前馈模型
OpenCLIP ViT-L/14224单视觉编码器-前馈模型90.5
SigLIP ViT-L/16224单视觉编码器-前馈模型123.5
DINOv2 ViT-L/14224单视觉编码器-前馈模型
SD 1.5768单视觉编码器-diffusion模型53.6
SD 2.1768单视觉编码器-diffusion模型
SD XL768单视觉编码器-diffusion模型
SD Image Variations768单视觉编码器-diffusion模型
SD 3512单视觉编码器-diffusion模型
DiT512单视觉编码器-diffusion模型70.6
CLIP + DINOv2 ViT-L/14224多视觉编码器组合150.2
CLIP + DINOv2 ViT-L/14336多视觉编码器组合

这样也引申出一个问题,如何得到尽可能具有更高AC Score的视觉特征候选组合呢,作者提供了两种思路,如Fig 6所示:

  1. 提高模型输入图片的分辨率,如Fig 6的224 -> 336,作者认为是相当于固定了视觉特征的视觉对齐能力(也就是A Score),提高了视觉结构对齐能力(也就是C Score),从而带来了AC Score的上升进而提高了LLM下游指标。
  2. 进行多种视觉特征的组合,如Fig 6的在DINOv2的基础上拼接上OpenAI CLIP,作者认为这相当于固定了模型的视觉结构对齐能力,提高了语义对齐能力,从而带来了AC Score的上升进而提高了LLM下游指标。

在这里插入图片描述

Fig 6. 通过提高分辨率(224 -> 336)和进行特征组合的方法,对于MLLM在下游任务中的性能影响。

当然,改变输入图片的分辨率,并不是仅仅会影响到C Score,比如CLIP@224和CLIP@336的A Score就不会是1,而这本应是1的,因此作者建议最好保持目标视觉编码器和标准视觉语义CLIP的输入分辨率的一致。这个比较困难,因为通常时候标准视觉语义CLIP的分辨率尺寸是固定的(比如224和336),因此作者同时采用CLIP@224和CLIP@336作为标准视觉语义CLIP,并且通过求平均的方式减少因分辨率不同带来的C Score耦合影响。

作者同时注意到,相比于基于视觉的基准数据集,AC Score与基于OCR的基准数据集的下游指标关联更为弱,这个原因可能来自于当前的C Score是采用基于自然图片的语义匹配数据集SPair-71k计算的,如下所示,在衡量非自然图片(如OCR为主的图表)的时候,其衡量视觉结构对齐的能力就变差了。

在这里插入图片描述

Fig 7. 采用基于自然图片的语义匹配数据集进行计算的C Score,对于非自然图片(如OCR图表)的语义结构对齐能力描述具有缺陷。

笔者的读后感

总的来说,这篇论文解决的问题还是很具有价值的,即是如何高效地给MLLM在某个垂类任务下,挑选一个最为合适的视觉特征组合。本文采用的方法论是定义出MLLM中需要视觉侧提供的能力的类型,分别是视觉语义对齐能力A和视觉结构对齐能力C,并且思考如何使得AC Score可以正相关于下游任务的能力,从而实现采用低代价的代理指标AC Score,就能高效地进行下游能力预测。

本文有两个指的注意的地方,第一是采用CLIP作为标准视觉语义对齐能力的标杆,可能对于能力超过CLIP的视觉模型的能力衡量,有失偏颇,第二是采用SPair-71k进行视觉结构对齐能力的衡量,会遇到对非自然图片估计C Score有偏的问题。

需要注意的是,对于不同类型的下游任务,理论上公式(3)的 β i j \beta_{ij} βij值都需要重新学习的,笔者比较好奇的是,是否有更好地能跨不同任务的学习方式呢?是否有递进式的学习方式呢?

Reference

[1]. Yang, Shijia, Bohan Zhai, Quanzeng You, Jianbo Yuan, Hongxia Yang, and Chenfeng Xu. “Law of Vision Representation in MLLMs.” arXiv preprint arXiv:2408.16357 (2024).

[2]. Tong, Shengbang, Zhuang Liu, Yuexiang Zhai, Yi Ma, Yann LeCun, and Saining Xie. “Eyes wide shut? exploring the visual shortcomings of multimodal llms.” In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pp. 9568-9578. 2024.

[3]. https://blog.csdn.net/LoseInVain/article/details/140233330, 《基于CLIP特征的多模态大模型中的视觉短板问题》

[4]. https://fesianxu.github.io/2023/03/04/story-of-multimodal-models-20230304/, 《视频与图片检索中的多模态语义匹配模型:原理、启示、应用与展望》

[5], https://blog.csdn.net/LoseInVain/article/details/102665911, 《立体视觉中的对极几何——如何更好更快地寻找对应点》


  1. 本文提到的对应点,与传统视觉任务中提到的对应点是有所区别的。如博文 [5] 中提到的,在传统视觉任务中的对应点通常指的是对于同一个物体不同视角下的图片的同一个关键局部图片块的对应关系,而本文提到的对应点,则更像是同一个视觉实体的局部视觉语义的聚类关系,因此不必限制在同一个物体,而是限制在了同一个实体。 ↩︎

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

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

相关文章

ai智能论文生成系统有用吗?分享5款ai文献综述自动生成器

近年来&#xff0c;人工智能&#xff08;AI&#xff09;技术在学术写作领域的应用越来越广泛&#xff0c;尤其是在文献综述的自动生成方面。AI智能论文生成系统通过深度学习和自然语言处理技术&#xff0c;能够帮助研究人员快速生成高质量的文献综述&#xff0c;从而提高写作效…

安可数据库产品目录

‌国家安可数据库产品目录包括以下主要产品‌&#xff1a; ‌华为GaussDB、openguass&#xff1a; 由华为云计算技术有限公司提供。‌金仓数据库管理系统&#xff1a;由中电科金仓&#xff08;北京&#xff09;科技股份有限公司提供。‌神通数据库管理系统&#xff1a;由天津神…

【Python】Python知识总结浅析

Python是一种高级编程语言&#xff0c;由Guido van Rossum于1991年首次发布。它以简洁的语法和强大的功能著称&#xff0c;适用于多种应用场景&#xff0c;包括Web开发、数据分析、人工智能、自动化脚本等。 易于学习和使用&#xff1a;Python的语法简洁明了&#xff0c;适合初…

AEye激光雷达公司的战略调整与成本控制分析

AEye激光雷达公司的战略调整与成本控制分析 当地时间9月3日,美国激光雷达领域的知名上市公司AEye在其向美国证券交易委员会(SEC)提交的8-K报告中披露了一项重大战略调整措施。报告指出,作为公司全面成本控制计划的一部分,AEye已对员工总数进行了大幅缩减,减少比例约达三分…

容器领航者:Kubernetes集群部署秘籍

目录 前言 一、ubernetes简介 1.1 应用部署方式演变 1.2 容器编排应用 1.3 kubenetes简介 二、Kubernetes核心概念 2.1 K8S各个组件用途 2.2 K8S 各组件之间的调用关系 2.3 K8S 的常用名词感念 2.4 k8S的分层架构​编辑 三、部署前的准备 3.1 k8s中容器的管理方式 3…

Java体系中的异常

1. 异常 1.1 异常的概念 在Java中&#xff0c;我们将程序执行过程中发生的不正常行为称为异常。异常是在程序运行过程中发生的错误或意外情况&#xff0c;它打破了程序的正常执行流程。在Java中通过面向对象的编程思想&#xff0c;我们也将这些扰乱程序正常执行的行为用类组织…

LeetCode Hot100 | Day1 | 二叉树:二叉树的直径

LeetCode Hot100 | Day1 | 二叉树&#xff1a;二叉树的直径 主要学习内容&#xff1a; 二叉树深度求法 深度的 leftright1 得到的是从根结点到叶子结点的节点数量 543.二叉树的直径 [543. 二叉树的直径 - 力扣&#xff08;LeetCode&#xff09;](https://leetcode.cn/prob…

【韩顺平Java笔记】第8章:面向对象编程(中级部分)【262-271】

262. 回顾上一章内容 看视频 263. IDEA介绍 263.1 IDEA 介绍 IDEA 全称 IntelliJ IDEA在业界被公认为最好的 Java 开发工具IDEA 是 JetBrains 公司的产品&#xff0c;总部位于捷克的首都布拉格除了支持 Java 开发&#xff0c;还支持 HTML&#xff0c;CSS&#xff0c;PHP&am…

Qt之TCP收发图片的例子

一.效果 二.实现 1.发图片 void MainWindow::slotSendImage() {matrix.rotate(90);QPixmap tempPixmap = pixmap.transformed(matrix);QBuffer buffer;tempPixmap.save(&buffer,"jpg");ui->labelImage->setPixmap(tempPixmap);int dataLength = buffer.d…

[图形学]在半球面上均匀采样和cos加权采样

一、简介 本文介绍了如何在半球表面上进行半球面均匀采样、半球面cos加权采样采样。 给出了相关公式推导和python代码实现。 二、在半球上采样 0.预备知识 1).球面坐标系与笛卡尔坐标系 在半球面上采样时&#xff0c;常使用球面坐标系。先采样球面坐标系下的坐标参数 ( θ…

python sqlite3 工具函数

起因&#xff0c; 目的: sqlite3 最常用的函数。 比如&#xff0c;某人给了一个 database.db 文件。 但是你登录的时候&#xff0c;不知道账号密码。 此文件就是&#xff0c;查看这个数据库的详细内容。 有哪些表某个表的全部内容。添加数据 代码&#xff0c; 见注释 impor…

《数字图像处理基础》学习01-数字图像处理的相关基础知识

这篇文章只是对数字图像处理的相关基础知识有个大概的了解&#xff0c;之后的文章会接着补充和扩展。 目录 一&#xff0c;图像的基本概念 1&#xff0c;图像 2&#xff0c;图像的分类 1&#xff09;物理图像 2&#xff09;虚拟图像 二&#xff0c;数字图像处理 三&…

PostGIS--介绍

目录 1、什么是PostGIS&#xff1f;2、数据2.1 对象2.1.1 读取几何元数据信息函数2.1.2 处理点的函数2.1.3 处理线的函数2.1.4 处理面的函数2.1.5 集合 2.2 集合输入和输出2.3 shapefile文件 总结PS: 1、什么是PostGIS&#xff1f; PostGIS通过增加对空间类型、空间索引和空间…

【MaskGAN】MaskGAN: Towards Diverse and Interactive Facial Image Manipulation

文章目录 MaskGAN: Towards Diverse and Interactive Facial Image Manipulationkey points贡献方法密集映射网络DMN编辑行为模拟训练多目标学习CelebAMask-HQ数据集实验消融实验总结MaskGAN: Towards Diverse and Interactive Facial Image Manipulation 会议/期刊:CVPR 202…

实现mnist手写数字识别

基础知识 tensorflow TensorFlow是一个开源的机器学习框架&#xff0c;致力于各种数据流图的自动微分和深度神经网络的计算。简而言之&#xff0c;** TensorFlow帮助我们轻松地构建、训练和部署机器学习模型** 。它可以在各种平台上运行&#xff0c;包括桌面计算机、服务器…

Dyna-slam复现(保姆级详细图文版,百分百成功)

因最近论文要和这些算法做对比,故配置了一下,在此记录 因为是老的算法,cuda版本现在的显卡都不能使用,所以笔者找的电脑是华硕飞行堡垒17年的电脑,1080的显卡 深度学习及maskrcnn配置 先将dyna-slam git下来,终端执行 git clone https://github.com/BertaBescos/Dyna…

数据结构之红黑树实现(全)

一、红黑树 红黑树是一种自平衡的二叉搜索树&#xff0c;它通过约束节点的颜色和结构来保持平衡。红黑树是由 Rudolf Bayer 在1972年发明的&#xff0c;被认为是一种优秀的平衡树结构&#xff0c;广泛应用于各种数据结构和算法中。 1.红黑树的性质 1. 每个结点是红的或者黑的…

PhotoMaker部署文档

一、介绍 PhotoMaker&#xff1a;一种高效的、个性化的文本转图像生成方法&#xff0c;能通过堆叠 ID 嵌入自定义逼真的人类照片。相当于把一张人的照片特征提取出来&#xff0c;然后可以生成你想要的不同风格照片&#xff0c;如写真等等。 主要特点&#xff1a; 在几秒钟内…

前端工程化 - Vue

环境准备 Vue-cli是Vue官方提供的一个脚手架&#xff0c;用户快速生成一个Vue的项目模板。 Vue-cli提供了如下功能&#xff1a; 统一的目录结构本地调试热部署单元测试集成打包上线 需要安装Node.js 安装Vue-cli npm install -g vue/cli通过vue --version指令查看是否安装成…

常见排序详解(历时四天,哭了,必须释放一下)

目录 1、插入排序 1.1 基本思想 1.2 直接插入排序 1.2.1 思路 1.2.2 代码实现 1.2.3 性质 1.3 希尔排序 1.3.1 思路 1.3.2 代码实践 1.3.3 性质 2、选择排序 2.1 基本思想 2.2 直接选择排序 2.2.1 思路 2.2.2 代码实践 2.2.3 性质 2.3 堆排序 2.3.1 思路 2.…