模型、算法、数据模型、模型结构是什么?它们之间有什么关联和区别?

news2025/1/12 18:40:35

模型、算法、数据模型、模型结构是什么?它们之间有什么关联和区别?

  • 导读
  • 一、算法
    • 1、算法定义
    • 2、机器学习算法定义
  • 二、模型
    • 1、模型定义
    • 2、数据模型定义
    • 3、机器学习模型定义
  • 三、模型结构
    • 1、线性模型
    • 2、基于实例的模型
    • 3、决策树模型
    • 4、支持向量机
    • 5、集成方法
    • 6、神经网络及其变种
    • 7、贝叶斯模型
    • 8、聚类模型
    • 9、降维方法
    • 10、其他
  • 四、训练(学习)
  • 五、算法和模型的区别
  • 六、算法、模型和训练的关系
  • 小结

参考:大数据与人工智能

导读

我们在看一些机器学习、人工智能、数据仓库方面的资料时,经常会出现“神经网络”、“深度学习算法”、“非监督学习”、“大模型”、“逻辑模型”等高频词汇。这些词语有时会在同一篇文章中交叉出现,看似描述的是同一件事情,但所要表达的意思似乎又不尽相同,很容易就被绕晕了。

这里先给出“模型 、算法、模型结构、数据模型、训练”5个概念的精简定义:

  • 模型:现实世界的数学表示或模拟,它是指一种结果。

  • 算法:执行特定任务的明确步骤序列。

  • 模型结构:模型的特定框架或架构。

  • 数据模型:描述数据对象、其关系及与其相关的操作的抽象结构。

  • 训练:使用数据调整模型参数以改进模型性能的过程。

很抽象,这里先提个问题:“支持向量机到底是指什么?模型、算法亦或其它?”答案会在最后揭晓。

一、算法

1、算法定义

算法的定义有许多版本,但其核心思想是一致的。算法可以被定义为:一个明确的、有序的、有限的步骤集合,用于解决一个特定的问题或执行一个特定的任务。这个定义是非常通用的,适用于从最简单的日常生活任务(例如烹饪食谱)到复杂的计算机科学问题的算法。

让我们详细分析这个定义:

  1. 明确 (Clear):算法的每一步都应该是清晰、无歧义的,这样任何人都可以理解并按照算法的指示进行。

  2. 有序 (Ordered):步骤的顺序是固定的,这确保了每次运行算法时,它都会产生相同的结果(如果输入和初始条件保持不变)。、

  3. 有限 (Finite):算法的执行不能无限期地进行;经过一定数量的步骤后,它应该结束。

  4. 解决问题或执行任务:算法的目的是解决某个特定的问题或执行某个特定的任务,无论是计算数字、排序列表,还是其他更复杂的任务。

事实上,我们可以把任何使计算机能够按照我们预定目标运行的方法称为“算法”,不仅仅包括上面的举例,在计算机领域常见的“冒泡排序”等基础算法都可以算作“算法”的范畴,以下是冒泡算法的步骤流程:

在这里插入图片描述

2、机器学习算法定义

在机器学习和人工智能领域,"算法"这一词语通常具有特定的含义和上下文。在这些领域,算法通常指的是:一种通过数据或经验自动改进性能或逐渐适应某一任务的方法这个算法定义相对于传统算法的特殊之处在于"学习"和"适应"。让我们详细分析这个定义:

  1. 通过数据或经验:机器学习算法通常需要数据集来进行训练。这些数据允许算法识别模式、做出预测或完成其他任务。

  2. 自动改进性能:随着时间的推移和更多的数据输入,机器学习算法旨在提高其任务的完成质量,无论是分类准确率、预测精度还是其他度量标准。

  3. 逐渐适应某一任务:这一点突出了机器学习算法的"学习"能力,即它们随着时间的推移会变得更加擅长于特定的任务。

在机器学习和AI的上下文中,算法可能包括决策树算法、神经网络算法、遗传算法等。每种算法都有其特定的学习方法和适用的任务类型。下面示例了决策树ID3算法的实现步骤:

在这里插入图片描述

为了更快更好地实现自己的算法,很多时候,人们喜欢把已经实现的、效果良好的算法做一些封装,这样,下次编写算法的时候就可以直接拿来用了。我们常用的TensorFlowPyTorchMindSpore都是。

现在大模型中很热的Transformer 可以被认为是一种算法,因为Transformer 描述了如何执行自注意力计算、如何结合输入数据、如何通过神经网络层传递数据等等,这个意义上的 “算法” 是描述模型在前向传播和反向传播期间所采取的计算步骤

二、模型

1、模型定义

在更广泛、跨学科的背景下,模型可以被定义为:对现实世界某一部分的简化和抽象表示,用于模拟、描述、预测或理解该部分的行为或现象。这个定义的关键点包括:

  1. 简化和抽象:由于完全模拟现实是不可能的或不切实际的,模型是对现实的简化。它只包括对特定目的有关的部分,并忽略了不相关或次要的细节。

  2. 表示现实世界的某一部分:这可以是物理系统、经济过程、生物实体、或任何其他可以观察和描述的事物。

  3. 模拟、描述、预测或理解:模型的目的可以多种多样。一些模型用于模拟真实世界的行为(如飞行模拟器),其他模型可能用于预测(如气象模型),还有一些模型用于理论研究和理解基本原理。

2、数据模型定义

数据模型和一般意义上的模型都是对现实世界事物的简化和抽象表示,但数据模型体现的是现实世界或业务逻辑在数据层面的投影,是将数据元素以标准化的模式组织起来,用来模拟现实世界的信息框架和蓝图

比如通过抽象,数据模型可以为世界的系统交互提供一个更易于理解和操作的视图,可以专注于对特定任务或目标至关重要的实体和关系,从而忽略不相关或不重要的细节。

在这里插入图片描述

更具体的说,数据模型是对数据、数据关系、数据语义和数据约束的抽象描述和组织。它为数据的结构化提供了一个框架,并确定了数据如何存储、组织和处理。数据模型可以帮助确保数据的完整性、准确性和可用性。数据模型可以分为不同的级别或类型,包括概念数据模型、概念逻辑模型及物理数据模型。下面是反映运营商业务的概念模型。

在这里插入图片描述

3、机器学习模型定义

机器学习模型也是对某种现象或数据的描述和抽象,与一般的基于某种理论、原则或经验建立的模型不同,机器学习模型通过利用数据进行训练得到某种数学结构,它旨在捕捉和代表数据间的模式或关系,以便对新的、未见过的数据进行预测或决策,它的关键点在于:

  1. 通过数据训练得到:在机器学习中,模型通常不是手工创建或编程完成特定任务的,而是使用数据和特定的学习算法自动"学习"或调整其参数。

  2. 数学结构:模型在其核心是数学的,无论是线性回归中的线性方程,神经网络中的权重和偏差,还是决策树中的节点决策。

  3. 捕捉和代表数据间的模式或关系:模型的主要任务是理解数据中的潜在模式,并能够基于这些模式做出决策或预测。

  4. 对新的、未见过的数据进行预测或决策:一个好的机器学习模型不仅可以很好地处理其在训练期间看到的数据,而且可以推广到其在训练期间未见过的新数据。

逻辑回归模型的一个示例

逻辑回归模型通常是通过一组特征权重来定义的。它在某些软件或库中可能会保存为特定格式的文件,例如在Pythonscikit-learn中,可以使用joblib库来保存模型。

在更广泛的范围内,逻辑回归模型可以简单地表示为一个权重向量。假设我们有一个模型,用于根据两个特征(例如年龄和薪水)来预测一个人是否会购买某产品。我们的模型文件内容可能有以下结构:

Model: Logistic Regression

w1: 0.05

w2: -0.03

b: 2

w1对应年龄的权重,w2对应薪水的权重,b代表偏置,通过这些参数就可以基于输入的数据进行预测了。但在真实环境中,这个文件会包含更多的元数据和附加信息,并且通常会以二进制或特定格式保存,以方便快速加载和使用。

决策树模型的一个示例

下面示例了一个鸢尾花数据集上训练的决策树模型,这个模型以二进制文件的形式存储,我将它转化成了文本描述,如下示例:

在这里插入图片描述

可以看到,决策树首先查看"petal width (cm)"特征。如果其值小于或等于0.80,则该样本属于类0。如果大于0.80,它将进一步检查该特征与其他特征的值来决定样本的类别。

三、模型结构

模型结构,通常在机器学习和深度学习的上下文中提及,指的是模型的设计或框架,它定义了模型的核心组件以及它们是如何相互连接的。模型结构包括模型的各个层、节点、权重、连接等元素,以及它们的布局和组织

以下是对模型结构的一些进一步解释:

  1. 层的定义:例如,在神经网络中,模型结构将定义有多少层、每层有多少节点。对于卷积神经网络,模型结构还会定义卷积层、池化层、全连接层等的数量和顺序。

  2. 连接方式:模型结构定义了如何连接各个节点或层。例如,全连接、局部连接、跳跃连接等。

  3. 参数:模型结构还定义了模型的参数。例如,在神经网络中,这包括每个连接的权重和每个节点的偏差。

  4. 激活函数:模型结构中,每个节点或某些层可能会有激活函数,如ReLU、sigmoid或tanh。

  5. 其他组件对于复杂的模型:例如长短时记忆网络(LSTM),模型结构会涉及更多的组件,如门控单元。

模型结构提供了模型的概览,并为模型的训练和应用提供了框架。一旦定义了模型结构,您可以使用数据和算法来“训练”模型,即找到模型参数的最优值。以下是一些常用的模型结构:

1、线性模型

线性回归(Linear Regression)

逻辑回归(Logistic Regression)

2、基于实例的模型

K最近邻(K-Nearest Neighbors, K-NN)

3、决策树模型

决策树(Decision Trees)

随机森林(Random Forests)

梯度提升树(Gradient Boosting Trees)

4、支持向量机

线性支持向量机(Linear Support Vector Machines, SVM)

非线性支持向量机(Non-linear SVM)

5、集成方法

Bagging

Boosting(例如:AdaBoost,GBM,XGBoost, LightGBM)

6、神经网络及其变种

多层感知机(Multilayer Perceptrons, MLP)

卷积神经网络(Convolutional Neural Networks, CNN)

循环神经网络(Recurrent Neural Networks, RNN)

长短时记忆网络(Long Short-Term Memory, LSTM)

Transformer Networks

GANs(生成对抗网络, Generative Adversarial Networks)

7、贝叶斯模型

朴素贝叶斯(Naive Bayes)

高斯过程(Gaussian Processes)

8、聚类模型

K-means

高斯混合模型(Gaussian Mixture Model, GMM)

DBSCAN

9、降维方法

主成分分析(Principal Component Analysis, PCA)

t-SNE (t-distributed Stochastic Neighbor Embedding)

10、其他

强化学习模型(Reinforcement Learning Models)

时间序列模型(例如:ARIMA,Prophet)

关联规则学习模型(例如:Apriori,FP-Growth)

这些模型结构具有不同的应用领域和优势。例如:

  • CNN通常用于图像处理任务。

  • RNNLSTM常用于序列数据,如时间序列和自然语言处理任务。

  • 决策树和其集成版本(如随机森林)则在许多分类和回归任务中表现良好。

选择哪种模型结构通常取决于问题的性质(例如,是分类回归聚类还是其他类型的问题),数据的类型(例如,是表格数据图像文本序列数据)以及项目的需求(例如,解释性实时性准确性等)。

四、训练(学习)

在机器学习中,训练是一个核心概念,指的是利用数据来“教”机器学习模型,从而使模型能够为特定的任务做出预测或决策的过程。以下是训练的详细解释:

  1. 目标:训练的主要目标是调整模型的参数,使其能够尽可能准确地表示或拟合训练数据,并在新的、未见过的数据上做出有效的预测。

  2. 过程

    • 开始时,模型通常是未经训练的,具有随机或预设的参数值。

    • 在训练过程中,模型会反复查看训练数据,并尝试调整其参数,以减少其预测与实际标签之间的误差。

    • 使用一个优化算法(如梯度下降)来指导如何更新参数。

  3. 误差/损失:为了量化模型的预测与实际值之间的差异,通常会使用一个损失函数。训练的目标是最小化这个损失函数。

  4. 迭代:训练通常涉及多次迭代,每次迭代都会对模型的参数进行微调,以减少误差。

  5. 过拟合与正则化:虽然模型可能在训练数据上表现得很好,但有时它可能过于复杂,导致在新数据上表现不佳。这种现象称为过拟合。为了避免过拟合,可以使用各种正则化技巧。

简而言之,训练就是使用数据来“教”模型,使其能够根据输入做出有意义的预测。这通常通过调整模型的参数来实现,直到模型在训练数据上的性能达到满意的水平。

五、算法和模型的区别

从前面的定义可知,在机器学习中,算法是一种过程或方法,用于从数据中学习模式,而模型是这种学习的结果,它封装了从数据中学到的知识,也是后期用于推理预测的基础,是一套推理“规则”,它们的主要区别可以总结如下:

  1. 本质

    算法:算法是一种解决问题的方法或过程。在机器学习中,算法通常描述如何从数据中学习,并如何调整模型的参数以优化其性能。

    模型:模型是某种现象的简化表示或描述。在机器学习中,模型是算法在特定数据集上训练后的输出,它能够对新的输入进行预测或分类。

  2. 形态

    算法:是一组明确的步骤或规则,通常可以用数学公式、伪代码或实际编程代码来描述。

    模型:可能是一组参数(例如线性回归中的权重和偏差)、一个决策树结构、神经网络的权重和偏置等。

  3. 持久性

    算法:算法是静态的,它不会因为训练数据的变化而变化。

    模型:模型是动态的,它基于训练数据和算法生成。不同的训练数据或算法变化可能会产生不同的模型。

  4. 应用场景

    算法:通常是通用的,可以应用于多个数据集和问题。

    模型:是特定于某一任务或数据集的。例如,一个用于识别猫的模型可能不适用于预测房价。

因此,在我们说决策树这个概念的时候,到底是指算法和模型,其实取决于上下文和你想表达的重点:

  1. 决策树作为模型 (Model)

    当我们谈论到一个特定的决策树(例如,一个经过训练的决策树,用于分类某种数据),我们通常是在将其视为一个模型。这个模型可以对新的数据进行预测或分类。

    这种意义下的决策树是一个表示决策规则和路径的结构。

  2. 决策树作为算法 (Algorithm)

    当我们谈论如何从数据中构建决策树时,我们是在描述一个算法过程。例如,ID3、C4.5和CART等都是决策树学习的算法。

    这些算法为如何根据数据集选择合适的特征、如何进行分裂、以及如何构造树提供了明确的步骤。

因此,决策树既可以被认为是一种模型(当描述其代表的决策规则时)也可以被认为是算法(当描述如何从数据中构建决策树时)。

一般来讲,我们说决策树模型的时候,如果没有特别指定,应该指的是决策树模型结构,如果有实例,那一般指用决策树算法实现的某个具体的业务模型,比如鸢尾花决策树模型。

而当我们在说决策树算法的时候,除非特别指明,往往是指决策树的算法集,包括ID3、C4.5、CART等等。

六、算法、模型和训练的关系

从模型视角看,模型是算法的输出和训练过程的产物。算法定义了如何从数据中更新模型的参数,而训练则是这一过程的实际执行。

从算法视角看,算法是训练模型的指导策略。通过不断地调整模型的参数,算法努力使模型更好地拟合训练数据。

从训练视角看,训练使用某种算法作为指导,根据训练数据调整模型的参数。训练结束后,我们获得了一个调整过的、用于预测或分类的模型。

1、在机器学习的过程开始时,研究者选择或设计一个模型结构,这通常是基于问题的性质和可用数据的类型。

2、接下来,选择一个算法来调整模型的参数。算法的选择通常基于模型的性质和所需的优化策略。

3、有了模型结构和算法后,可以开始训练过程。在训练过程中,算法反复调整模型的参数,使其更好地拟合数据,直到达到某种停止标准(例如,误差下降到某个阈值或达到预定的迭代次数)。

让我们以一个常见的例子来说明:手写数字识别(例如,识别0-9的手写数字)进行说明

1、选择或设计模型结构

  • 问题的性质:手写数字识别是一个多分类问题,因为我们想要从10个类别中(0到9)选择一个。

  • 可用数据的类型:我们有手写数字的图片,每张图片是一个二维的像素阵列。

  • 选择的模型:考虑到问题的性质和数据类型,我们选择一个卷积神经网络(Convolutional Neural Network, CNN)为模型结构。CNN在图像分类任务中表现出色,因为它可以捕捉到图像的局部模式。

2、选择一个算法来调整模型的参数

  • 模型的性质:CNN是一个深度神经网络,包含多个卷积层、池化层和全连接层。

  • 选择的算法:基于模型的性质,我们选择使用随机梯度下降(Stochastic Gradient Descent, SGD)及其变种,如Adam或RMSprop,作为优化算法。这些算法已被证明在深度神经网络的训练中效果很好。

3、开始训练过程

  • 使用MNIST数据集(一个手写数字的标准数据集),我们将每个手写数字图片的像素值输入到我们的CNN模型中。

  • 在训练过程中,算法(例如Adam)反复调整模型的权重和偏置,使其更好地拟合训练数据。

  • 停止标准:我们可以设置当验证集上的分类准确率不再提高或者误差不再显著下降时,停止训练。或者简单地设置训练迭代10,000次为停止标准。

经过这三个步骤后,我们就有了一个训练好的CNN模型,可以用于识别新的手写数字图片。

小结

最后,让我们回到前面提出的问题,支持向量机到底是是指什么?

这其实是要看上下文的。

当你想表达"试图找到一个超平面(在高维空间中)来分割数据,使得该超平面到两个类别的距离(即间隔)最大化“这个意思的时候,它是指SVM模型。

当你想表达”为了找到这个最优的超平面,需要解决一个凸优化问题,通常使用例如序列最小优化(SMO)算法“这个意思的时候,它是指SVM算法。

当我们没有特指,仅仅说“使用SVM”时,通常意味着我们使用了SVM定义的模型(最大间隔超平面)以及与之相关的优化算法(如SMO)来进行训练。

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

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

相关文章

WebRTC:真正了解 RTP 和 RTCP

介绍 近年来,通过互联网进行实时通信变得越来越流行,而 WebRTC 已成为通过网络实现实时通信的领先技术之一。WebRTC 使用多种协议,包括实时传输协议 (RTP) 和实时控制协议 (RTCP)。 RTP负责通过网络传输音频和视频数据,而RTCP负责…

网络原理(2)——TCP协议

目录 一、TCP协议段格式 二、确认应答 三、超时重传 TCP全称为:"传输控制协议 Transmission Control Protocol)"。协议如其名,要对数据的传输进行一个详细的控制。 一、TCP协议段格式 源 / 目的端口号:表示数据从哪个进程来&am…

稀碎从零算法笔记Day20-LeetCode:回文链表

题型:链表、双指针 链接:206. 反转链表 - 力扣(LeetCode) 234. 回文链表 - 力扣(LeetCode) 来源:LeetCode 题目描述(红字为笔者添加) 给你一个单链表的头节点 head &…

.rmallox勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 近年来,勒索病毒的威胁日益增加,其中一种名为.rmallox的勒索病毒备受关注。这种病毒通过加密文件并勒索赎金来威胁受害者。本文将介绍.rmallox勒索病毒的特点,以及如何恢复被其加密的数据文件,并提供预防措施&a…

三、传输层拥塞控制、差错控制

3.1 概述和传输层服务 传输服务和协议: 为运行在不同主机上的应用进程提供逻辑通信; 传输协议运行在端系统-发送方:将应用层的报文分成报文段,然后传递给网络层;接收方:将报文段重组成报文,然后传递给应用…

【C#图解教程】笔记

文章目录 1. C#和.NET框架.NET框架的组成.NET框架的特点CLRCLICLI的重要组成部分各种缩写 2. C#编程概括标识符命名规则: 多重标记和值格式化数字字符串对齐说明符格式字段标准数字格式说明符标准数字格式说明符 表 3. 类型、存储和变量数据成员和函数成员预定义类型…

【图论】计算图的n-hop邻居个数,并绘制频率分布直方图

计算图的n-hop邻居个数,并绘制频率分布直方图 在图论中,n-hop邻居(或称为K-hop邻居)是指从某个顶点出发,通过最短路径(即最少的边数)可以到达的所有顶点的集合,其中n(或…

git如何回退版本reset和revert命令的区别

文章目录 git回退版本的方法使用reset回退使用revert回退 总结 git回退版本的方法 Git回退到某个版本有两种方法&#xff1a;reset和revert。 使用reset回退 git reset --hard <版本号>该命令将HEAD指针移动到指定的版本&#xff0c;并重置工作目录和暂存区的内容。这…

Vue-router3.0版本跳转报错

1.路由创建之后发现控制台push路由跳转报错了 2.解决方法&#xff1a; //在router文件中添加 const originalPush VueRouter.prototype.push VueRouter.prototype.push function push(location) {return originalPush.call(this, location).catch(err > err) }3.解决了

基于单片机的DDS函数信号发生器

单片机DDS函数信号发生器设计 该设计以AT89S52为主控芯片&#xff0c;通过控制高性能DDS&#xff08;直接数字频率合成&#xff09;芯片AD9834产生不同频率的信号&#xff0c;经过6阶巴特沃兹低通滤波电路&#xff0c;连接数字电位器的运算放大电路&#xff0c;输出信号。可以…

P2036 [COCI2008-2009 #2] PERKET

题目描述 Perket 是一种流行的美食。为了做好 Perket&#xff0c;厨师必须谨慎选择食材&#xff0c;以在保持传统风味的同时尽可能获得最全面的味道。你有 &#xfffd;n 种可支配的配料。对于每一种配料&#xff0c;我们知道它们各自的酸度 &#xfffd;s 和苦度 &#xfffd…

安装Pytorch——CPU版本

安装Pytorch——CPU版本 1. 打开pytorch官网2. 选择pip安装pytorch-cpu3.复制安装命令4. 在cmd命令窗口&#xff0c;进入你的虚拟环境4.1 创建虚拟环境4.2 进行安装 5. 安装成功6. 进行测试——如下面步骤&#xff0c;如图6.1 输入 python6.2 输入 import torch6.2 输入 print …

Spring Boot中application配置文件的生效顺序

Spring Boot的一个重要特性就是它的自动配置&#xff0c;这一特性在很大程度上依赖于名称为application的配置文件。本文将详细介绍在Spring Boot中&#xff0c;这些配置文件的加载顺序以及每份文件的应用范围。 文章目录 配置文件的种类配置文件的加载顺序配置文件的环境切换 …

kubernetes学习总结

kubernetes学习大纲 kubernetes的发展历程 Kubernetes的组件和架构 Kubernetes API对象基本组成 Kubernetes中的yml详解1 Kubernetes中的yml详解2 Deployment与Service

运用html相关知识编写导航栏和二级菜单

相关代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><s…

手机网络连接性能API接口:查询手机网络连接性能状态

手机在网状态查询服务是一项非常方便的服务&#xff0c;可以帮助我们随时了解一个手机号码的在网状态。不论是查询自己的手机号码&#xff0c;还是查询他人的手机号码&#xff0c;这个服务都可以帮助我们获取准确的信息。今天&#xff0c;我想和大家介绍一个非常好用的手机在网…

如何遍历map

小王学习录 前言遍历map集合1. 使用for-each循环遍历 entrySet()2. 使用迭代器遍历 entrySet()3. 通过 keySet() 遍历4. 使用迭代器遍历 keySet()5. 仅遍历 values() 如果只关心map中的值而不关心键&#xff0c;可以遍历 values()&#xff1a;6. 使用流(Streams)进行遍历 总结 …

HarmonyOS(鸿蒙)不再适合JS语言开发

ArkTS是鸿蒙生态的应用开发语言。它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;对TS的动态类型特性施加更严格的约束&#xff0c;引入静态类型。同时&#xff0c;提供了声明式UI、状态管理等相应的能力&#xff0c;让开发者可以以更简洁、…

SpringMVC03 基础操作续与几个简单的交互

前文 第一篇 第二篇 基础操作 上篇博客我们知道了如何获取Session内容以及传输数组,json,对象,集合等的传送和获取 这节课我们可以从上篇的结束开始,其实Spring对Session进行了进一步的封装,我们可以使用其他的方式也可以读取和设置Session(更简洁的方式) 1.直接使用HTTPSessio…

力扣hot100:34. 在排序数组中查找元素的第一个和最后一个位置(二分查找的理解)

我们知道使用二分查找能找到值所在的位置。假如我们在找到值后仍然不断的更新指针会发生什么&#xff1f;我们可以利用这一点来找到最左边的以及最右边的值。 如果当nums[mid]target时&#xff0c;使得 rightmid-1&#xff0c;那么最终会使得target在right的右边。 如果当nums[…