流形学习(Manifold Learning)

基本概念

Manifold Learning(流形学习)是一种机器学习和数据分析的方法,它专注于从高维数据中发现低维的非线性结构。流形学习的基本假设是,尽管数据可能在高维空间中呈现,但它们实际上分布在一个低维的流形上。这个流形是数据的真实结构,它捕捉了数据中的内在关系和模式。

流形是一个数学概念,指的是在局部类似于欧几里得空间的拓扑空间。在高维数据分析中,流形可以被看作是数据点自然聚集的低维表面或曲线。例如,人脸图像可能在成千上万个像素维度上表示,但实际上它们可能分布在一个远低于这个维度的流形上,因为人脸的形状和表情变化是有限的。

流形学习的目标是从高维观测数据中恢复出这个低维流形的结构,这通常涉及到以下几个步骤:

  1. 数据预处理:包括归一化、去噪等,以确保数据的质量。
  2. 流形构造:通过各种算法(如Isomap、局部线性嵌入(LLE)、拉普拉斯特征映射(Laplacian Eigenmaps)等)来构造或近似表示数据的流形结构。
  3. 降维:将高维数据映射到低维流形上,以便于可视化、分析或进一步的机器学习任务。
  4. 分析与应用:在低维流形上进行数据分析,如聚类、分类、异常检测等。

流形学习在处理非线性数据结构时特别有效,它能够揭示数据背后的复杂关系,而不仅仅是通过线性变换来简化数据。这种方法在计算机视觉、生物信息学、社交网络分析等领域都有广泛的应用。

流行学习与表示学习的联系和区别

流形学习和表示学习都是机器学习领域中用于处理和理解数据的方法,它们之间存在紧密的联系,但侧重点和方法有所不同。

流形学习(Manifold Learning)

流形学习是一种非线性降维技术,它假设高维数据实际上分布在一个低维流形上。流形学习的目标是从高维观测数据中恢复出这个低维流形的结构,从而揭示数据的内在几何关系。流形学习算法通常包括Isomap、局部线性嵌入(LLE)、拉普拉斯特征映射(Laplacian Eigenmaps)等。

表示学习(Representation Learning)

表示学习是一种更广泛的概念,它关注的是如何自动地从数据中学习到有用的特征表示。表示学习的目标是找到一种能够捕捉数据重要特征的低维表示,这种表示可以用于后续的机器学习任务,如分类、回归或聚类。表示学习的方法包括自动编码器(Autoencoders)、受限玻尔兹曼机(RBMs)、深度神经网络等。

联系

  1. 降维:流形学习和表示学习都涉及到将高维数据映射到低维空间,以便于理解和处理。

  2. 特征提取:两者都旨在从原始数据中提取有意义的特征,这些特征可以更好地反映数据的内在结构和模式。

  3. 非线性:流形学习和表示学习都处理非线性数据结构。流形学习通过假设数据分布在低维流形上来处理非线性,而表示学习通过使用非线性变换(如神经网络中的激活函数)来学习非线性特征。

  4. 数据驱动:两者都是数据驱动的方法,不需要手动设计特征,而是依赖于算法从数据中自动学习特征。

区别

  1. 目标:流形学习主要关注于发现数据的几何结构,而表示学习更侧重于为后续的机器学习任务提供有用的特征表示。

  2. 方法:流形学习通常使用特定的几何和拓扑方法来揭示流形结构,而表示学习使用更广泛的机器学习技术,包括深度学习方法。

  3. 应用:流形学习在可视化和高维数据分析中较为常见,而表示学习在各种机器学习任务中都有应用,如图像识别、语音识别和自然语言处理等。

总的来说,流形学习和表示学习都是为了更好地理解和处理复杂数据而发展起来的方法,它们在实践中经常相互补充,共同推动了机器学习领域的发展。

多维尺度分析(MDS)

多维尺度分析(Multidimensional Scaling,简称MDS)是一种统计技术,用于探索和可视化数据集中的相似性或距离关系。MDS的目标是在低维空间中找到数据点的表示,使得这些点在低维空间中的距离尽可能地反映它们在原始高维空间中的相似性或距离。

基本步骤

  1. 距离矩阵的构建:首先,需要一个表示数据点之间相似性或距离的矩阵。这个矩阵可以是直接测量的距离(如欧氏距离),也可以是基于相似性度量的转换(如将相似性转换为距离)。

  2. 低维表示:MDS的目标是在一个较低维度的空间中找到数据点的坐标,使得这些坐标之间的距离尽可能地与原始距离矩阵中的距离相匹配。这通常通过最小化一个特定的目标函数来实现,该函数衡量低维空间中的距离与原始距离之间的差异。

  3. 压力函数:在MDS中,通常使用压力函数(Stress function)来衡量低维表示的质量。压力函数定义为低维空间中距离与原始距离之间差异的某种度量。MDS算法的目标是最小化这个压力函数。

  4. 特征值分解:在经典(或度量)MDS中,通常使用特征值分解来找到低维表示。这涉及到计算距离矩阵的平方并进行中心化,然后计算其内积矩阵的特征值和特征向量。低维表示可以通过选择最大的特征值对应的特征向量来获得。

  5. 非度量MDS:在非度量MDS中,重点是保持数据点之间的相对距离关系,而不是精确的距离值。这通常涉及到一个迭代过程,其中通过单调变换来调整低维表示,以更好地匹配原始距离的排序。

类型

  • 度量MDS:适用于距离可以精确测量的情况,如欧氏距离。
  • 非度量MDS:适用于距离或相似性只能通过排序或等级来表示的情况。

应用

MDS广泛应用于各种领域,包括心理学(如感知研究)、市场研究(如产品定位)、生物信息学(如基因表达数据的分析)和社交网络分析等。它特别适合于可视化复杂的数据集,帮助研究人员理解数据点之间的关系。

限制

MDS的一个主要限制是它对异常值敏感,并且可能不适用于高度非线性的数据结构。此外,MDS的结果可能依赖于所选的距离度量和压力函数的具体形式。

总的来说,多维尺度分析是一种强大的工具,用于在保持数据点间距离关系的同时,将高维数据映射到低维空间,从而实现数据的可视化和分析。

等度量映射(Isomap)

等度量映射(Isometric Feature Mapping,简称Isomap)是一种流形学习算法,用于非线性降维。Isomap结合了多维尺度分析(MDS)和图论的概念,旨在找到高维数据集的低维表示,同时保持数据点之间的测地距离。

基本原理

Isomap的核心思想是,尽管高维数据可能分布在一个非线性流形上,但流形上的点之间的最短路径(测地距离)可以提供关于数据内在结构的有用信息。Isomap通过以下步骤实现降维:

  1. 构建邻域图:首先,对于数据集中的每个点,确定其最近的邻居(使用欧氏距离或其他距离度量)。这些邻居构成了该点的局部邻域。然后,构建一个图,其中数据点是节点,而边连接每个点的邻居。

  2. 计算测地距离:在构建的图上,计算每对点之间的最短路径。这通常通过Dijkstra算法或Floyd-Warshall算法来实现。这些最短路径近似于流形上的测地距离。

  3. 应用MDS:使用计算得到的测地距离矩阵,应用多维尺度分析(MDS)来找到一个低维表示,使得低维空间中的距离尽可能地与测地距离相匹配。

  4. 可视化或进一步分析:得到的低维表示可以用于可视化数据集,或者作为其他机器学习算法的输入。

关键特点

  • 全局结构保持:与仅考虑局部结构的算法(如局部线性嵌入LLE)不同,Isomap旨在保持数据的全局几何结构。
  • 非线性流形:Isomap特别适用于揭示嵌入在高维空间中的非线性流形的低维结构。
  • 计算复杂性:Isomap的计算复杂性相对较高,特别是在处理大型数据集时,因为需要计算图上的最短路径。

应用

Isomap已被应用于各种领域,包括计算机视觉、生物信息学和机器人技术。它特别适合于可视化高维数据集,并揭示数据中的复杂结构。

限制

  • 计算成本:对于大型数据集,计算测地距离可能非常耗时。
  • 对参数敏感:Isomap的性能可能对邻域大小等参数的选择非常敏感。
  • 不适用于噪声数据:Isomap可能不适用于包含大量噪声或异常值的数据集。

总的来说,等度量映射是一种强大的非线性降维技术,它通过保持数据点之间的测地距离来揭示高维数据的低维结构。然而,它的计算成本和参数敏感性限制了其在某些情况下的应用。

局部线性嵌入(LLE)

局部线性嵌入(Local Linear Embedding,简称LLE)是一种流行的非线性降维方法,由Sam Roweis和Lawrence Saul于2000年提出。LLE的核心思想是假设数据集中的每个点和它的近邻是线性相关的,并试图在低维空间中保持这些局部线性关系。这种方法特别适用于当数据位于一个内在的低维流形上时。

基本步骤

  1. 选择邻居:首先确定每个点的邻居。这可以通过固定最近的K个邻居或固定半径ε来确定邻域内的所有点来完成。

  2. 计算权重:对于每个点,找到一组权重,这些权重用来线性重建该点从其邻居。也就是说,我们试图找到一个权重矩阵W,对于每个数据点Xi,它的邻居的线性组合可以尽可能地重建Xi。这个步骤通常涉及到解一个局部的最优化问题。

  3. 嵌入到低维空间:在保持权重固定的情况下,寻找数据点在低维空间中的坐标Y,使得原高维中的局部线性关系在低维空间中尽可能地得到保持。这一步是通过最小化重建误差的全局代价函数来实现的,这个代价函数衡量的是在整个数据集上使用固定的权重W时,低维表示的点如何重建自身。

关键特点

  • 重建权重:LLE算法的第一个关键步骤是计算局部重建权重,这些权重反映了每个点和它邻居之间的局部几何结构。
  • 保持邻域结构:在降维过程中,LLE试图保持数据的局部线性结构,而不是全局的几何结构。

计算流程

  1. 构建邻居矩阵:对于每个数据点,找出K个最近邻居。
  2. 计算重建权重:最小化每个点与其K个邻居的线性重建误差来计算重构权重。
  3. 优化低维映射:在低维空间中,最小化一个代价函数,该函数衡量了使用相同的重建权重在低维空间中的重建误差。

优势

  • 无需全局参数调整:LLE只需要邻居的数量这一个参数,这相对于其他需要全局参数的方法来说简单很多。
  • 能揭示复杂结构:LLE能够从高维数据中揭示出复杂的非线性结构。

限制

  • 邻居选择敏感性:LLE的性能对邻居的选择很敏感,错误的选择可能导致较差的降维结果。
  • 不适合分布不均的数据:如果数据在不同区域的密度差异很大,LLE可能无法良好地工作。
  • 优化问题可能难以求解:在寻找低维表示时,可能会遇到一些困难,比如局部最小值问题。

总地来说,局部线性嵌入是一种有效的降维技术,尤其适合分析和可视化位于低维流形上的高维数据。尽管如此,它仍然存在一些局限性,例如对参数选择的敏感性和在处理某些类型数据时的表现。

拉普拉斯特征映射(Laplacian Eigenmaps)

拉普拉斯特征映射(Laplacian Eigenmaps)是一种非线性降维技术,用于发现高维数据中的低维结构。这种方法基于图论,特别是利用图的拉普拉斯矩阵来捕捉数据点之间的局部邻域关系。Laplacian Eigenmaps的目标是在低维空间中找到数据点的表示,使得局部邻域内的点在低维空间中的距离尽可能小。

基本步骤

  1. 构建邻域图:首先,对于数据集中的每个点,确定其最近的邻居(使用欧氏距离或其他距离度量)。这些邻居构成了该点的局部邻域。然后,构建一个图,其中数据点是节点,而边连接每个点的邻居。边的权重通常基于点之间的相似性或距离。

  2. 计算拉普拉斯矩阵:拉普拉斯矩阵L定义为L = D - W,其中D是度矩阵(对角矩阵,其对角线元素是图中每个节点的边的权重之和),W是权重矩阵(表示图中边的权重)。

  3. 特征映射:通过求解拉普拉斯矩阵的最小非平凡特征值对应的特征向量来找到低维表示。具体来说,我们寻找满足以下优化问题的特征向量:
    [ \min_{f} \sum_{i, j} (f(x_i) - f(x_j))^2 W_{ij} ]
    约束条件是:
    [ \sum_i f(x_i) = 0 ]

    [ \sum_i f^2(x_i) = 1 ]
    通常,我们取第二小的特征值(即拉普拉斯算子的第二小的特征值,也称为Fiedler值)对应的特征向量作为一维表示,而取接下来的几个最小特征值对应的特征向量作为多维表示。

关键特点

  • 局部邻域保持:Laplacian Eigenmaps特别关注保持数据点之间的局部邻域关系,而不是全局距离。
  • 非线性降维:这种方法能够揭示数据中的非线性结构。
  • 图论基础:算法的核心是基于图的拉普拉斯矩阵,这使得它能够有效地处理复杂的数据结构。

优势

  • 揭示复杂结构:Laplacian Eigenmaps能够有效地揭示嵌入在高维空间中的复杂非线性流形。
  • 简单且直观:算法的实现相对简单,且其原理直观易懂。

限制

  • 参数敏感性:算法的性能可能对邻居的选择和边的权重定义敏感。
  • 计算成本:对于大型数据集,计算拉普拉斯矩阵的特征向量可能非常耗时。
  • 不适用于噪声数据:Laplacian Eigenmaps可能不适用于包含大量噪声或异常值的数据集。

总的来说,拉普拉斯特征映射是一种强大的非线性降维技术,特别适合于分析和可视化位于低维流形上的高维数据。然而,它的计算成本和参数敏感性限制了其在某些情况下的应用。

t-分布随机邻域嵌入(t-SNE)

t-分布随机邻域嵌入(t-SNE)是一种流行的非线性降维技术,特别适用于可视化高维数据。由Laurens van der Maaten和Geoffrey Hinton在2008年提出,t-SNE通过在低维空间中模拟高维数据点之间的相似性分布来工作。这种方法在可视化高维数据集(如文本数据、图像数据和生物信息数据)时非常有效。

基本步骤

  1. 测量高维空间中的相似性:首先,计算高维空间中每对数据点之间的相似性。这通常通过计算点之间的条件概率来实现,其中每个点与其最近邻居的相似性较高。使用高斯分布来定义这种相似性,即:
    p j ∣ i = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 / 2 σ i 2 ) ∑ k ≠ i exp ⁡ ( − ∣ ∣ x i − x k ∣ ∣ 2 / 2 σ i 2 ) p_{j|i} = \frac{\exp(-||x_i - x_j||^2 / 2\sigma_i^2)}{\sum_{k \neq i} \exp(-||x_i - x_k||^2 / 2\sigma_i^2)} pji=k=iexp(∣∣xixk2/2σi2)exp(∣∣xixj2/2σi2)
    其中, σ i \sigma_i σi 是根据数据点 x i x_i xi 的邻居数量动态确定的参数。

  2. 定义低维表示的相似性:在低维空间中(通常是二维或三维),为每对点定义相似性。这里使用t分布(自由度为1的t分布,即柯西分布)来定义相似性,以避免在低维表示中出现拥挤问题:
    q i j = ( 1 + ∣ ∣ y i − y j ∣ ∣ 2 ) − 1 ∑ k ≠ l ( 1 + ∣ ∣ y k − y l ∣ ∣ 2 ) − 1 q_{ij} = \frac{(1 + ||y_i - y_j||^2)^{-1}}{\sum_{k \neq l} (1 + ||y_k - y_l||^2)^{-1}} qij=k=l(1+∣∣ykyl2)1(1+∣∣yiyj2)1
    其中, y i y_i yi y j y_j yj是数据点 x i x_i xi x j x_j xj 在低维空间中的表示。

  3. 优化:通过最小化高维空间中的相似性分布和低维空间中的相似性分布之间的Kullback-Leibler散度(KL散度)来找到最佳的低维表示。这通常通过梯度下降法来实现。

关键特点

  • 非线性映射:t-SNE能够捕捉和映射高维数据中的复杂非线性结构。
  • 局部结构保持:t-SNE特别关注保持数据点之间的局部结构,即相似的点在低维空间中应该靠近。
  • 对异常值鲁棒:由于使用t分布来定义低维空间中的相似性,t-SNE对异常值相对鲁棒。

优势

  • 高维数据可视化:t-SNE在可视化高维数据集方面非常有效,能够揭示数据中的簇和结构。
  • 灵活性:t-SNE可以灵活地应用于各种类型的数据,包括文本、图像和生物信息数据。

限制

  • 计算成本高:t-SNE的计算成本相对较高,特别是在处理大型数据集时。
  • 参数敏感性:t-SNE的性能对参数(如困惑度)的选择敏感。
  • 不适用于特征选择或降维:t-SNE主要用于可视化,而不是用于特征选择或作为其他机器学习算法的预处理步骤。

总的来说,t-SNE是一种强大的非线性降维技术,特别适合于可视化高维数据集。尽管其计算成本较高且对参数敏感,但它在揭示数据中的复杂结构方面表现出色。

统一流形近似和投影(UMAP)

统一流形近似和投影(UMAP,Uniform Manifold Approximation and Projection)是一种相对较新的非线性降维和数据可视化技术,由Leland McInnes、John Healy和James Melville在2018年提出。UMAP基于黎曼几何和代数拓扑的理论,旨在高效地找到高维数据的低维表示,同时保持数据的局部和全局结构。

基本步骤

  1. 构建高维空间中的图:首先,UMAP通过计算数据点之间的距离来构建一个图。这个图的节点是数据点,而边则根据距离来确定。边的权重通常基于高斯核函数,即:
    [ \exp(-||x_i - x_j||^2 / 2\sigma^2) ]
    其中,( \sigma ) 是一个根据数据点的局部密度动态确定的参数。

  2. 图的简化:UMAP使用模糊集合的概念来简化这个图。每个数据点被视为一个模糊集合,其隶属度由边的权重决定。通过这种方式,UMAP能够在保持数据局部结构的同时,减少计算复杂度。

  3. 低维表示:在低维空间中(通常是二维或三维),UMAP尝试找到一个图,该图的节点是高维数据点的低维表示,而边则基于点之间的距离。这个低维图应该尽可能地保持高维图的拓扑结构。

  4. 优化:通过最小化高维图和低维图之间的交叉熵来找到最佳的低维表示。这通常通过梯度下降法来实现。

关键特点

  • 高效性:UMAP在计算上比t-SNE更高效,特别是在处理大型数据集时。
  • 全局结构保持:UMAP不仅关注保持数据的局部结构,还尝试保持全局结构,这使得它在揭示数据的全局分布方面更为有效。
  • 参数较少:UMAP通常需要较少的参数调整,这使得它更易于使用。

优势

  • 速度快:UMAP的计算速度通常比t-SNE快,特别是在大型数据集上。
  • 可扩展性:UMAP能够有效地处理大型数据集,这使得它在实际应用中非常有用。
  • 全局和局部结构保持:UMAP在保持数据的局部结构的同时,也关注全局结构,这有助于更好地理解数据的整体分布。

限制

  • 理论基础复杂:UMAP的理论基础涉及黎曼几何和代数拓扑,这可能对一些用户来说较为复杂。
  • 可视化效果可能不如t-SNE:虽然UMAP在速度和可扩展性方面有优势,但在某些情况下,其可视化效果可能不如t-SNE直观。

总的来说,UMAP是一种强大的非线性降维技术,特别适合于处理大型数据集。它在速度和可扩展性方面优于t-SNE,但在可视化效果方面可能略有不足。UMAP的广泛应用证明了其在数据分析和机器学习领域的重要性。

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

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

相关文章

摩尔线程MTT S4000 AI GPU助力30亿参数大模型训练,性能比肩英伟达同类解决方案

中国国产GPU制造商摩尔线程(Moore Threads)在AI加速器领域取得了显著进展,其最新推出的MTT S4000 AI GPU在训练大规模语言模型时表现突出,据称相较于其前代产品有着显著的性能提升。根据cnBeta的报道,搭载S4000 GPU的全新“酷鹅千卡智能计算集…

装机必备——截图工具Snipaste安装教程

装机必备——截图工具Snipaste安装教程 软件下载 软件名称:Snipaste2.7 软件语言:简体中文 软件大小:15.37M 系统要求:Windows7或更高, 32/64位操作系统 硬件要求:CPU2GHz ,RAM2G或更高 下载通…

探索AES对称加密:Python代码实战

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、引言:从非对称到对称 二、AES加密机制概述 三、Python实现AES加密与解密 …

三十三、openlayers官网示例Drawing Features Style——在地图上绘制图形,并修改绘制过程中的颜色

这篇讲的是使用Draw绘制图形时根据绘制形状设置不同颜色。 根据下拉框中的值在styles对象中取对应的颜色对象,new Draw的时候将其设置为style参数。 const styles {Point: {"circle-radius": 5,"circle-fill-color": "red",},LineS…

Llama改进之——RoPE旋转位置编码

引言 旋转位置编码(Rotary Position Embedding, RoPE)将绝对相对位置依赖纳入自注意力机制中,以增强Transformer架构的性能。目前很火的大模型LLaMA、QWen等都应用了旋转位置编码。 之前在[论文笔记]ROFORMER中对旋转位置编码的原始论文进行了解析,重点…

Inno Setup 深入浅出-注册表

【1】注册表:安装时写入 #define MyAppVersion "1.0.0.111" #define MyRegInstall "Software\产品名称\发布者\install" #define MyRegInstallVersion "installVersion" [Registry] Root:HKCU;Subkey: "{#MyRegInstall }&quo…

kubeadm极速搭建kubernetes集群

# 卸载docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine # 安装docker需要的依赖 sudo yum install -y yum-utils # 设置docker yum源 sudo yum-config-manager…

数据与结构——红黑树

目录 红黑树的概念 性质 结点的定义 插入 验证 查找 删除 红黑树与AVL树的比较 红黑树的概念 红黑树是一种自平衡二叉搜索树(Binary Search Tree, BST),其每个节点带有颜色属性,可以是红色或黑色。红黑树通过约束节点颜色…

Redis 常用基本命令

查看所有键 keys命令可用于查看所有键,语法如下 pattern用于匹配key,其中*表示任意个任意字符 keys pattern键总数 dbsize可用于查看键的总数,语法如下 dbsize判断键是否存在 exists命令可用于判断一个键是否存在,语法如下 ex…

【ARM Cache 系列文章 7.1 – ARMv8/v9 MMU 页表配置详细介绍 02 】

文章目录 Translation table descriptorTable descriptor format页面粒度和地址长度粒度(Granules)48位和52位地址TCR_ELx.DSVTCR_EL2.DSFEAT_LPA块描述符|页描述符紧接上篇文章【ARM Cache 系列文章 7 – ARMv8/v9 MMU 页表配置 01 】 Translation table descriptor</

Flutter 中的 ShrinkWrappingViewPort 小部件:全面指南

Flutter 中的 ShrinkWrappingViewPort 小部件&#xff1a;全面指南 Flutter 是一个由 Google 开发的 UI 框架&#xff0c;它允许开发者使用 Dart 语言来构建跨平台的移动应用。在 Flutter 的布局体系中&#xff0c;ShrinkWrappingViewport 是一个特殊的滚动视图&#xff0c;它…

未来已来:Facebook的数字革命与社交转型

在当今数字化时代&#xff0c;Facebook作为全球最大的社交网络之一&#xff0c;不仅扮演着连接人们的桥梁&#xff0c;更是引领着社交行业的数字革命与转型。本文将深入探讨Facebook如何通过创新技术、改变用户体验以及应对挑战&#xff0c;塑造了未来社交的面貌&#xff0c;以…

ozon卖家精灵,ozon卖家怎么使用

在跨境电商的浪潮中&#xff0c;OZON作为俄罗斯领先的电商平台&#xff0c;吸引了众多卖家争相入驻。然而&#xff0c;面对日益激烈的市场竞争&#xff0c;如何提升店铺的运营效果&#xff0c;成为卖家们迫切需要解决的问题。而OZON卖家精灵作为一款专为OZON卖家打造的辅助工具…

java高级——Collection集合之List探索(包含ArrayList、LinkedList、Vector底层实现及区别,非常详细哦)

java高级——Collection集合之List探索 前情提要文章介绍提前了解的知识点1. 数组2. 单向链表3. 双向链表4. 为什么单向链表使用的较多5. 线程安全和线程不安全的概念 ArrayList介绍1. 继承结构解析1.1 三个标志性接口1.2 AbstractList和AbstractCollection 2. ArrayList底层代…

民国漫画杂志《时代漫画》第32期.PDF

时代漫画32.PDF: https://url03.ctfile.com/f/1779803-1248635561-0ae98a?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

java —— 克隆对象、枚举

一、克隆对象 &#xff08;一&#xff09;在基本数据类型中&#xff0c;直接将对象 A 的值赋给对象 B&#xff0c;当更改对象 B 的时候&#xff0c;对象 A 的值保持不变。例如&#xff1a; public static void main(String[] args) {int a5;int ba; //将…

去除字符串中的空格和特殊字符

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 用户在输入数据时&#xff0c;可能会无意中输入多余的空格&#xff0c;或在一些情况下&#xff0c;字符串前后不允许出现空格和特殊字符&#xff0c;…

Beego 使用教程 7:Web 文件上传下载和错误处理

beego 是一个用于Go编程语言的开源、高性能的 web 框架 beego 被用于在Go语言中企业应用程序的快速开发&#xff0c;包括RESTful API、web应用程序和后端服务。它的灵感来源于Tornado&#xff0c; Sinatra 和 Flask beego 官网&#xff1a;http://beego.gocn.vip/ 上面的 bee…

「清新题精讲」Skiers

更好的阅读体验 Skiers Description 给定 n n n 个点的有向无环平面图&#xff0c;求最少多少条从 1 1 1 到 n n n 的路径能覆盖原图的所有边&#xff1f; 1 ≤ n ≤ 5 1 0 3 1\le n\le 5\times10^3 1≤n≤5103 Solution 考虑从 1 1 1 到 n n n 的路径其实是边的链覆…

如何让你的网站能通过域名访问

背景 当我们租一台云服务器&#xff0c;并在上面运行了一个Web服务&#xff0c;我们可以使用云服务器的公网IP地址进行访问&#xff0c;如下&#xff1a; 本文主要记录如何 实现让自己的网站可以通过域名访问。 买域名 可以登录腾讯云等主流公有云平台的&#xff0c;购买域名…