当前位置: 首页 > news >正文

解锁维特比算法:探寻复杂系统的最优解密码

引言

在复杂的技术世界中,维特比算法以其独特的魅力和广泛的应用,成为通信、自然语言处理、生物信息学等领域的关键技术。今天,让我们一同深入探索维特比算法的奥秘。

一、维特比算法的诞生背景

维特比算法由安德鲁・维特比在 1967 年提出。当时通信技术飞速发展,对通信系统的可靠性和传输效率要求不断提高。信号在传输时易受噪声干扰导致错误,传统解码方法效率低,无法满足卫星通信等复杂场景需求。同时,信息论和马尔可夫过程理论的成熟为其奠定了理论基础,维特比算法应运而生,用于解决通信中的解码难题。

在这里插入图片描述

在信息论中,香农提出的编码定理从理论上为通信系统的编码和解码提供了指导,让人们明白如何在有限的带宽和噪声环境下,通过合理的编码来提高信息传输的可靠性。而马尔可夫过程理论则为描述通信中的信号传输提供了有力的工具。在很多通信场景中,信号的当前状态可以看作只与前一时刻的状态有关,基于马尔可夫过程的隐含马尔可夫模型(HMM)在通信、语音处理等领域得到了广泛应用,维特比算法正是为了解决隐含马尔可夫模型中的解码问题而提出的,用于寻找最可能的隐藏状态序列。

二、维特比算法的核心人物:安德鲁・维特比

安德鲁・维特比 1935 年出生于意大利犹太家庭,1939 年移民美国。他在麻省理工学院获得电气工程学士和硕士学位,在南加州大学获博士学位。他曾在多所高校任教,创立 Linkabit 和高通公司,担任维特比集团总裁并为多家公司提供战略顾问服务。他荣获多项荣誉,还在教育领域慷慨捐赠,南加州大学工程学院以他命名。

三、维特比算法原理详解

以一个简单的天气预测例子来理解维特比算法。假设存在一个只有晴天和雨天两种天气状态的场景,并且已知以下概率信息:

天气转移概率:从晴天到晴天的概率为 0.7,从晴天到雨天的概率为 0.3;从雨天到晴天的概率为 0.4,从雨天到雨天的概率为 0.6。

活动与天气的概率:晴天时,朋友去散步的概率为 0.6,去购物的概率为 0.3,待在家的概率为 0.1;雨天时,朋友去散步的概率为 0.1,去购物的概率为 0.3,待在家的概率为 0.6。

若朋友连续三天的活动分别为散步、购物、待在家,下面我们来详细计算利用维特比算法计算最可能的天气序列的过程:

第一天

设晴天为状态 S1,雨天为状态 S2。初始时,假设晴天和雨天的概率都是 0.5。

  • 如果第一天是晴天(S1)且朋友去散步,根据公式:初始概率 × 当前天气下活动的概率,即 0.5 × 0.6 = 0.3 0.5 \times 0.6 = 0.3 0.5×0.6=0.3

  • 如果第一天是雨天(S2)且朋友去散步,计算可得: 0.5 × 0.1 = 0.05 0.5 \times 0.1 = 0.05 0.5×0.1=0.05

第二天

当第二天是晴天(S1)时:

  • 若第一天是晴天(S1),那么根据公式:第一天为 S1 且散步的概率 ×S1 到 S1 的转移概率 × 第二天 S1 时购物的概率,即 0.3 × 0.7 × 0.3 = 0.063 0.3 \times 0.7 \times 0.3 = 0.063 0.3×0.7×0.3=0.063

  • 若第一天是雨天(S2),则概率为:第一天为 S2 且散步的概率 ×S2 到 S1 的转移概率 × 第二天 S1 时购物的概率,即 0.05 × 0.4 × 0.3 = 0.006 0.05 \times 0.4 \times 0.3 = 0.006 0.05×0.4×0.3=0.006

当第二天是雨天(S2)时:

  • 若第一天是晴天(S1),概率为:第一天为 S1 且散步的概率 ×S1 到 S2 的转移概率 × 第二天 S2 时购物的概率,即 0.3 × 0.3 × 0.3 = 0.027 0.3 \times 0.3 \times 0.3 = 0.027 0.3×0.3×0.3=0.027

  • 若第一天是雨天(S2),概率为:第一天为 S2 且散步的概率 ×S2 到 S2 的转移概率 × 第二天 S2 时购物的概率,即 0.05 × 0.6 × 0.3 = 0.009 0.05 \times 0.6 \times 0.3 = 0.009 0.05×0.6×0.3=0.009

第三天

当第三天是晴天(S1)时:

  • 若第二天是晴天(S1),第一天是晴天(S1),概率为:第二天为 S1(第一天为 S1)且购物的概率 ×S1 到 S1 的转移概率 × 第三天 S1 时待在家的概率,即 0.063 × 0.7 × 0.1 = 0.00441 0.063 \times 0.7 \times 0.1 = 0.00441 0.063×0.7×0.1=0.00441

  • 若第二天是晴天(S1),第一天是雨天(S2),概率为:第二天为 S1(第一天为 S2)且购物的概率 ×S1 到 S1 的转移概率 × 第三天 S1 时待在家的概率,即 0.006 × 0.7 × 0.1 = 0.00042 0.006 \times 0.7 \times 0.1 = 0.00042 0.006×0.7×0.1=0.00042

  • 若第二天是雨天(S2),第一天是晴天(S1),概率为:第二天为 S2(第一天为 S1)且购物的概率 ×S2 到 S1 的转移概率 × 第三天 S1 时待在家的概率,即 0.027 × 0.4 × 0.1 = 0.00108 0.027 \times 0.4 \times 0.1 = 0.00108 0.027×0.4×0.1=0.00108

  • 若第二天是雨天(S2),第一天是雨天(S2),概率为:第二天为 S2(第一天为 S2)且购物的概率 ×S2 到 S1 的转移概率 × 第三天 S1 时待在家的概率,即 0.009 × 0.4 × 0.1 = 0.00036 0.009 \times 0.4 \times 0.1 = 0.00036 0.009×0.4×0.1=0.00036

当第三天是雨天(S2)时:

  • 若第二天是晴天(S1),第一天是晴天(S1),概率为:第二天为 S1(第一天为 S1)且购物的概率 ×S1 到 S2 的转移概率 × 第三天 S2 时待在家的概率,即 0.063 × 0.3 × 0.6 = 0.01134 0.063 \times 0.3 \times 0.6 = 0.01134 0.063×0.3×0.6=0.01134

  • 若第二天是晴天(S1),第一天是雨天(S2),概率为:第二天为 S1(第一天为 S2)且购物的概率 ×S1 到 S2 的转移概率 × 第三天 S2 时待在家的概率,即 0.006 × 0.3 × 0.6 = 0.00108 0.006 \times 0.3 \times 0.6 = 0.00108 0.006×0.3×0.6=0.00108

  • 若第二天是雨天(S2),第一天是晴天(S1),概率为:第二天为 S2(第一天为 S1)且购物的概率 ×S2 到 S2 的转移概率 × 第三天 S2 时待在家的概率,即 0.027 × 0.6 × 0.6 = 0.00972 0.027 \times 0.6 \times 0.6 = 0.00972 0.027×0.6×0.6=0.00972

  • 若第二天是雨天(S2),第一天是雨天(S2),概率为:第二天为 S2(第一天为 S2)且购物的概率 ×S2 到 S2 的转移概率 × 第三天 S2 时待在家的概率,即 0.009 × 0.6 × 0.6 = 0.00324 0.009 \times 0.6 \times 0.6 = 0.00324 0.009×0.6×0.6=0.00324

通过比较第三天所有的概率,发现第三天是雨天,且第二天是晴天,第一天是晴天的概率 0.01134 0.01134 0.01134是最大的。所以通过维特比算法得出,这三天最可能的天气序列是第一天晴天,第二天晴天,第三天雨天。

维特比算法的核心思想就是通过计算每一步所有可能路径的概率,保存概率最大的路径,最终找到整体概率最大的路径,即最可能的状态序列。

四、计算复杂度分析

时间复杂度

对于一个隐马尔可夫模型,假设状态空间大小为 N N N(即有 N N N个不同的隐藏状态),观测序列的长度为 T T T

在维特比算法的每一步 t t t 1 ≤ t ≤ T 1\leq t\leq T 1tT),对于每个可能的状态 i i i 1 ≤ i ≤ N 1\leq i\leq N 1iN),要计算从初始状态到当前状态 i i i的最大概率路径。在计算这个最大概率时,需要考虑前一个时刻 t − 1 t - 1 t1的所有 N N N个状态转移到当前状态 i i i的概率,并取最大值。

具体来说,计算当前状态 i i i的最大概率时,需要进行 N N N次乘法和 N − 1 N - 1 N1次比较操作(因为要从 N N N个前一时刻状态转移过来的概率中取最大值),总的操作次数约为 2 N − 1 2N - 1 2N1,在大 O 表示法中,忽略常数项和低阶项,可近似看作 O ( N ) O(N) O(N)。而每一步有 N N N个状态需要计算,所以每一步的时间复杂度为 O ( N × N ) = O ( N 2 ) O(N \times N)=O(N^2) O(N×N)=O(N2)

由于要处理整个长度为 T T T的观测序列,所以总的时间复杂度为 O ( T × N 2 ) O(T \times N^2) O(T×N2)

空间复杂度

维特比算法在运行过程中,需要保存每个时刻每个状态的最大概率以及对应的路径信息。

对于每个时刻 t t t,需要保存 N N N个状态的最大概率和路径信息,每个状态至少需要保存一个概率值和一个指向前一个状态的指针(用于回溯路径),所以每个时刻需要 O ( N ) O(N) O(N)的空间。

因为要保存所有 T T T个时刻的信息,所以总的空间复杂度为 O ( T × N ) O(T \times N) O(T×N)

五、维特比算法的广泛应用

通信领域

  • 卷积编码解码:在数字通信中,卷积编码是一种常用的信道编码方式。发送端将原始数据通过卷积编码器按照特定规则进行编码,增加冗余信息,这样在接收端就可以利用这些冗余信息来纠正传输过程中可能出现的错误。当接收端接收到编码后的信号后,维特比算法开始发挥作用。它会基于接收到的信号序列,结合卷积码的约束长度和状态转移规则,计算所有可能的状态转移路径的概率。由于卷积码的状态数是有限的(取决于约束长度),维特比算法会在这些有限的状态和路径中,根据最大似然准则找到概率最大的路径,这条路径对应的状态序列就是解码后的原始数据估计值。例如在 4G、5G 通信标准中,卷积编码解码中的维特比算法是保障数据可靠传输的关键技术之一,它能够在复杂的无线信道环境下,有效降低误码率,提高通信质量。

  • 信号检测与估计:在无线通信中,信号在传输过程中会受到多径衰落、噪声等干扰。接收端接收到的信号是多个路径信号的叠加以及噪声的混合。维特比算法通过建立信号模型和信道模型,将接收到的信号与可能发送的信号序列进行匹配。它会计算每个可能的发送信号序列在当前信道条件下产生接收到信号的概率,选择概率最大的信号序列作为估计的发送信号。比如在城市环境中的移动通信,信号会在建筑物之间反射、折射,形成多径传播,导致接收信号出现时延扩展和衰落。维特比算法可以通过分析这些复杂的信号特征,有效对抗多径效应,准确地检测和估计出发送信号,提升信号传输的质量和可靠性。

自然语言处理领域

  • 词性标注:在对一段文本进行处理时,首先要对每个单词标注其词性,如名词、动词、形容词等。维特比算法依据预先建立的词性转移概率模型和单词与词性的对应概率模型来进行标注。例如,在英语中,“the” 通常后面接名词,“run” 作为动词的概率较高,且在一般现在时中,第三人称单数后面的动词要加 “s” 等规则,都可以体现在概率模型中。它从文本的第一个单词开始,计算每个单词可能的词性以及到当前单词为止的最可能词性序列。对于句子 “我 爱 自然 语言 处理”,维特比算法会根据 “爱” 这个词在不同语境下作为动词的概率,以及 “我” 后面接动词的概率等信息,确定 “爱” 的词性为动词,以此类推标注整句单词的词性,为后续的语法分析、语义理解等任务提供基础。

  • 语音识别:在语音识别系统中,首先将语音信号转换为特征向量序列。维特比算法根据声学模型计算每个特征向量对应不同音素或单词的概率,声学模型描述了语音信号特征与音素之间的映射关系。同时,结合语言模型中单词之间的概率关系,语言模型体现了自然语言中单词出现的统计规律,比如 “我” 后面接 “喜欢”“想要” 等动词的概率较高。从第一个特征向量开始,逐步计算到最后一个特征向量,找到概率最大的单词序列作为识别结果。例如,当用户说 “打开电脑”,语音识别系统通过维特比算法分析语音特征,结合语言模型,识别出这四个单词组成的命令,实现将语音准确转换为文字。

  • 机器翻译:在统计机器翻译中,源语言句子到目标语言句子的翻译存在多种可能性。维特比算法根据源语言和目标语言之间的翻译概率模型以及目标语言的语言模型来选择最优翻译。例如,对于源语言句子 “我喜欢苹果”,算法会根据 “我” 对应 “I”“me” 等的概率,“喜欢” 对应 “like”“love” 等的概率,这些概率来自于大量的平行语料库的统计分析。同时,考虑目标语言中单词组合的合理性,如 “I like apples” 比 “I love apples” 在这个语境下更符合概率模型(如果训练数据中 “like” 在描述一般性喜好且对象为常见事物时出现频率更高),从而选择出最合适的翻译结果,实现不同语言之间的自动翻译。

生物信息学领域

  • 基因序列分析:在分析 DNA 序列时,维特比算法可以用于识别基因中的编码区域和非编码区域等重要结构。通过将已知的基因序列模式作为隐藏状态,待分析的 DNA 序列作为观测序列,建立状态转移概率和观测概率模型。例如,已知某些特定的碱基序列模式通常对应着启动子区域、外显子区域、内含子区域等,这些模式之间的转换概率以及它们与实际观测到的 DNA 序列的匹配概率可以通过对大量已知基因的分析和研究来确定。维特比算法会在这些复杂的概率模型中,找出最可能的状态序列,即最符合已知模式的基因结构划分。比如在人类基因组计划中,研究人员需要处理海量的基因序列数据,维特比算法能够帮助他们从这些数据中准确地识别出具有重要功能的基因区域,为后续的基因功能研究、疾病诊断和治疗等提供关键的信息支持。

  • 蛋白质二级结构预测:蛋白质的二级结构包括 α - 螺旋、β - 折叠等,其结构对于理解蛋白质的功能至关重要。根据蛋白质的氨基酸序列预测其二级结构时,维特比算法将不同的二级结构单元作为隐藏状态,氨基酸序列作为观测序列。依据氨基酸之间的物理化学性质和相互作用确定状态转移概率和观测概率。例如,某些氨基酸之间容易形成氢键,这会影响它们形成特定二级结构的倾向。对于一段特定的氨基酸序列,维特比算法会综合考虑这些因素,计算出最可能形成的二级结构组合,如哪些区域形成 α - 螺旋,哪些区域形成 β - 折叠,从而帮助研究人员深入了解蛋白质的折叠机制和功能,为药物研发、蛋白质工程等领域提供重要的理论依据。

其他领域

  • 故障诊断:在工业设备的故障诊断中,将设备的不同运行状态(正常运行、轻微故障、严重故障等)作为隐藏状态,设备的各种监测数据(如温度、压力、振动、电流等)作为观测序列。维特比算法根据设备正常运行和故障状态之间的转移概率以及监测数据与状态的对应概率,从监测数据序列中推断出设备最可能经历的状态变化路径。例如,对于一台大型燃气轮机,当监测到其振动值逐渐增大、温度异常升高时,维特比算法可以结合这些数据与不同故障状态的关联概率,判断出燃气轮机是否存在故障以及故障发展的路径,如是否从叶片轻微磨损逐渐发展到严重的机械故障,从而帮助维护人员提前采取措施,避免设备的严重损坏,提高设备的可靠性和运行效率。

  • 金融风险评估:在金融市场分析中,将市场的不同状态(如上涨、下跌、平稳等)作为隐藏状态,各种经济指标(如 GDP 增长率、通货膨胀率、利率等)、市场交易数据(如股票价格、成交量、汇率等)作为观测序列。维特比算法根据市场状态之间的转移概率和观测数据与市场状态的对应概率,来推断市场最可能的状态变化序列。例如,当 GDP 增长率下降、通货膨胀率上升时,结合历史数据中这些经济指标与市场状态的关系,维特比算法可以分析出市场在未来一段时间内最可能的状态演变过程,帮助投资者判断市场趋势,评估投资风险,制定合理的投资策略。比如,投资者可以根据维特比算法的分析结果,在市场可能下跌时减少股票投资,增加债券等稳健型资产的配置,以降低投资风险,实现资产的保值增值。

六、总结

维特比算法以其强大的功能和广泛的适用性,在众多领域发挥着不可替代的作用。随着技术的不断发展和数据量的不断增长,相信它将在更多领域展现出独特的价值,为解决复杂问题提供高效的解决方案。未来,维特比算法可能会与其他先进技术(如深度学习、量子计算等)相结合,进一步拓展其应用范围和提升性能,为我们的生活和社会发展带来更多的惊喜和变革。

相关文章:

解锁维特比算法:探寻复杂系统的最优解密码

引言 在复杂的技术世界中,维特比算法以其独特的魅力和广泛的应用,成为通信、自然语言处理、生物信息学等领域的关键技术。今天,让我们一同深入探索维特比算法的奥秘。 一、维特比算法的诞生背景 维特比算法由安德鲁・维特比在 1967 年提出…...

Unity游戏(Assault空对地打击)开发(2) 基础场景布置

目录 导入插件 文件夹整理 场景布置 山地场景 导入插件 打开【My Assets】(如果你刚进行上篇的操作,该窗口默认已经打开了)。 找到添加的几个插件,点击Download并Import x.x to...。 文件夹整理 我们的目录下多了两个文件夹&a…...

Office / WPS 公式、Mathtype 公式输入花体字、空心字

注:引文主要看注意事项。 1、Office / WPS 公式中字体转换 花体字 字体选择 “Eulid Math One” 空心字 字体选择 “Eulid Math Two” 使用空心字时,一般不用斜体,取消勾选 “斜体”。 2、Mathtype 公式输入花体字、空心字 2.1 直接输…...

代码随想录算法训练营第三十九天-动态规划-213. 打家劫舍 II

与上一题基本一样,只不过房间形成一个环,就需要在首尾考虑状况多一些这不是多一些状况的问题,是完全不知道如何选择的问题这种状况详细分析一下就是要分成三种情况 第一种:不考虑首元素,也不考虑尾元素,只考…...

自然语言处理-词嵌入 (Word Embeddings)

词嵌入(Word Embedding)是一种将单词或短语映射到高维向量空间的技术,使其能够以数学方式表示单词之间的关系。词嵌入能够捕捉语义信息,使得相似的词在向量空间中具有相近的表示。 📌 常见词嵌入方法 基于矩阵分解的方…...

Redis 数据备份与恢复

Redis 数据备份与恢复 引言 Redis 是一款高性能的键值对存储系统,广泛应用于缓存、消息队列、分布式锁等领域。为了保证数据的安全性和可靠性,定期对 Redis 数据进行备份与恢复是至关重要的。本文将详细介绍 Redis 数据备份与恢复的方法,帮助您更好地管理和维护 Redis 数据…...

【leetcode】T541 (两点反思)

解题反思 闷着头往,往往会写成一团浆糊,还推倒重来,谋划好全局思路再开始很重要。 熟悉C的工具库很重要,一开始看到反转就还想着用stack来着,后面突然想起来用reverse函数刚好可以用哇,这题也就迎刃而解了…...

《STL基础之vector、list、deque》

【vector、list、deque导读】vector、list、deque这三种序列式的容器,算是比较的基础容器,也是大家在日常开发中常用到的容器,因为底层用到的数据结构比较简单,笔者就将他们三者放到一起做下对比分析,介绍下基本用法&a…...

嵌入式系统|DMA和SPI

文章目录 DMA(直接内存访问)DMA底层原理1. 关键组件2. 工作机制3. DMA传输模式 SPI(串行外设接口)SPI的基本原理SPI连接示例 DMA与SPI的共同作用 DMA(直接内存访问) 类型:DMA是一种数据传输接口…...

LevelDB 源码阅读:写入键值的工程实现和优化细节

读、写键值是 KV 数据库中最重要的两个操作,LevelDB 中提供了一个 Put 接口,用于写入键值对。使用方法很简单: leveldb::Status status leveldb::DB::Open(options, "./db", &db); status db->Put(leveldb::WriteOptions…...

寒假刷题Day18

一、16. 最接近的三数之和 这一题有负数&#xff0c;没有单调性&#xff0c;不能“大了右指针左移&#xff0c;小了左指针右移&#xff0c;最后存值域求差绝对值”。 class Solution { public:int threeSumClosest(vector<int>& nums, int target) {ranges::sort(n…...

力扣219.存在重复元素每日一题(大年初一)

以一道简单题开启全新的一年 哈希表&#xff1a;我们可以使用 哈希表 来存储数组元素及其对应的索引。通过遍历数组&#xff0c;我们可以检查当前元素是否已经存在于哈希表中&#xff0c;并判断索引差是否满足条件。 具体步骤如下&#xff1a; 创建一个哈希表 map&#xff0c…...

Midjourney中的强变化、弱变化、局部重绘的本质区别以及其有多逆天的功能

开篇 Midjourney中有3个图片“微调”&#xff0c;它们分别为&#xff1a; 强变化&#xff1b;弱变化&#xff1b;局部重绘&#xff1b; 在Discord里分别都是用命令唤出的&#xff0c;但如今随着AI技术的发达在类似AI可人一类的纯图形化界面中&#xff0c;我们发觉这样的逆天…...

Blazor-选择循环语句

今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法&#xff0c;我已经创建好了一个Student类&#xff0c;以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示&#xff0c;Gender为…...

根据每月流量和市场份额排名前20 的AI工具列表

ChatGPT&#xff1a;由Open AI研发&#xff0c;是一款对话式大型语言模型。它能够理解自然语言输入&#xff0c;生成连贯且符合逻辑的回复。可用于文本创作&#xff0c;如撰写文章、故事、诗歌&#xff1b;还能解答各种领域的知识问题&#xff0c;提供翻译、代码解释等服务&…...

关于安卓greendao打包时报错问题修复

背景 项目在使用greendao的时候&#xff0c;debug安装没有问题&#xff0c;一到打包签名就报了。 环境 win10 jdk17 gradle8 项目依赖情况 博主的greendao是一个独立的module项目&#xff0c;项目目前只适配了java&#xff0c;不支持Kotlin。然后被外部集成。greendao版本…...

前端面试笔试题目(一)

以下模拟了大厂前端面试流程&#xff0c;并给出了涵盖HTML、CSS、JavaScript等基础和进阶知识的前端笔试题目&#xff0c;以帮助你更好地准备面试。 面试流程模拟 1. 自我介绍&#xff08;5 - 10分钟&#xff09;&#xff1a;面试官会请你进行简单的自我介绍&#xff0c;包括…...

网络工程师 (10)设备管理

前言 设备管理中的数据传输控制方式是确保设备与内存&#xff08;或CPU&#xff09;之间高效、准确地进行数据传送的关键。 一、程序直接控制方式 1.工作原理&#xff1a; 由CPU发出I/O指令&#xff0c;直接控制数据的传输过程。CPU需要不断查询外设的状态&#xff0c;以确定数…...

如何让一个用户具备创建审批流程的权限

最近碰到一个问题&#xff0c;两个sandbox&#xff0c;照理用户的权限应该是一样的&#xff0c;结果开发环境里面我可以左右的做各种管理工作&#xff0c;但是使用change set上传后&#xff0c;另一个环境的同一个用户&#xff0c;没有相对于的权限&#xff0c;权限不足。 当时…...

unity学习23:场景scene相关,场景信息,场景跳转

目录 1 默认场景和Assets里的场景 1.1 scene的作用 1.2 scene作为project的入口 1.3 默认场景 2 场景scene相关 2.1 创建scene 2.2 切换场景 2.3 build中的场景&#xff0c;在构建中包含的场景 &#xff08;否则会认为是失效的Scene&#xff09; 2.4 Scenes in Bui…...

【Java高并发】基于任务类型创建不同的线程池

文章目录 一. 按照任务类型对线程池进行分类1. IO密集型任务的线程数2. CPU密集型任务的线程数3. 混合型任务的线程数 二. 线程数越多越好吗三. Redis 单线程的高效性 使用线程池的好处主要有以下三点&#xff1a; 降低资源消耗&#xff1a;线程是稀缺资源&#xff0c;如果无限…...

全网首发,MacMiniA1347安装飞牛最新系统0.8.36,改造双盘位NAS,超详细.36,改造双盘位nas,超详细

全网首发&#xff0c;MacMiniA1347安装飞牛最新系统0.8.36&#xff0c;改造双盘位NAS&#xff0c;超详细 小伙伴们大家好呀&#xff0c;勤奋的凯尔森同学又双叒叕来啦&#xff0c;今天这一期也是有点特别&#xff0c;我们把MacMiniA1347安装飞牛最新系统0.8.36&#xff0c;并且…...

简要介绍C++中的 max 和 min 函数以及返回值

简要介绍C中的 max 和 min 函数 在C中&#xff0c;std::max 和 std::min 是标准库 <algorithm> 中提供的函数&#xff0c;用于比较两个或多个值并返回最大值或最小值。这些函数非常强大且灵活&#xff0c;支持多种数据类型&#xff08;如整数、浮点数、字符串等&#xff…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之用户注册

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f3af;项目基本介绍 &#x1f6a6;项…...

记忆化搜索(5题)

是什么&#xff1f; 是一个带备忘录的递归 如何实现记忆化搜索 1.添加一个备忘录&#xff08;建立一个可变参数和返回值的映射关系&#xff09; 2.递归每次返回的时候把结果放到备忘录里 3.在每次进入递归的时候往备忘录里面看看。 目录 1.斐波那契数列 2.不同路径 3.最…...

强化学习笔记——4策略迭代、值迭代、TD算法

基于策略迭代的贝尔曼方程和基于值迭代的贝尔曼方程&#xff0c;关系还是不太理解 首先梳理一下&#xff1a; 通过贝尔曼方程将强化学习转化为值迭代和策略迭代两种问题 求解上述两种贝尔曼方程有三种方法&#xff1a;DP&#xff08;有模型&#xff09;&#xff0c;MC&#xff…...

nginx目录结构和配置文件

nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参…...

Spring RESTful API 设计与实现

Spring RESTful API的设计与实现极大地提升了开发效率和系统可维护性,通过遵循RESTful设计原则,使得API结构清晰、行为一致,便于扩展和维护。它在构建微服务架构中扮演着核心角色,支持松耦合的通信,同时通过标准的HTTP协议和数据格式增强了系统的互操作性。结合Spring Sec…...

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…...

【Envi遥感图像处理】008:波段(批量)分离与波段合成

文章目录 一、波段分离提取1. 提取单个波段2. 批量提取单个波段二、波段合成相关阅读:【ArcGIS微课1000例】0058:波段合成(CompositeBands)工具的使用 一、波段分离提取 1. 提取单个波段...

数据结构-Stack和栈

1.栈 1.1什么是栈 栈是一种特殊的线性表&#xff0c;只允许在固定的一段进行插入和删除操作&#xff0c;进行插入和删除操作的一段称为栈顶&#xff0c;另一端称为栈底。 栈中的数据元素遵顼后进先出LIFO&#xff08;Last In First Out&#xff09;的原则&#xff0c;就像一…...

内容检索(2025.01.30)

随着创作数量的增加&#xff0c;博客文章所涉及的内容越来越庞杂&#xff0c;为了更为方便地阅读&#xff0c;后续更新发布的文章将陆续在此汇总并附上原文链接&#xff0c;感兴趣的小伙伴们可持续关注文章发布动态&#xff01; 博客域名&#xff1a;http://my-signal.blog.cs…...

牛客周赛 Round 77

题目目录 C-小红走网格解题思路参考代码 D-隐匿社交网络解题思路参考代码 F-计树解题思路参考代码 C-小红走网格 解题思路 根据裴蜀定理&#xff1a;设a&#xff0c;b是不全为0的整数&#xff0c;对任意整数x&#xff0c;y&#xff0c;满足gcd&#xff08;a&#xff0c;b&…...

c++面试:类定义为什么可以放到头文件中

这个问题是刚了解预编译的时候产生的疑惑。 声明是指向编译器告知某个变量、函数或类的存在及其类型&#xff0c;但并不分配实际的存储空间。声明的主要目的是让编译器知道如何解析程序中的符号引用。定义不仅告诉编译器实体的存在&#xff0c;还会为该实体分配存储空间&#…...

Oracle查看数据库表空间使用情况

Oracle RAC环境查看表空间使用情况 查询字段释义&#xff1a; NEED_ADDFILE,--是否需增加表空间文件 TABLESPACE_NAME,--表空间名称 TABLESPACE_FILE_COUNT, --表空间当前数据文件数量 NOW_FILEENABLE_BLOCKS,--表空间文件当前数据块数 NOW_FILEENABLE_BYTES_GB,--表空间文件当…...

Spring Boot 热部署实现指南

在开发 Spring Bot 项目时&#xff0c;热部署功能能够显著提升开发效率&#xff0c;让开发者无需频繁重启服务器就能看到代码修改后的效果。下面为大家详细介绍一种实现 Spring Boot 热部署的方法&#xff0c;同时也欢迎大家补充其他实现形式。 步骤一、开启 IDEA 自动编译功能…...

如何构建ObjC语言编译环境?构建无比简洁的clang编译ObjC环境?Windows搭建Swift语言编译环境?

如何构建ObjC语言编译环境? 除了在线ObjC编译器&#xff0c;本地环境Windows/Mac/Linux均可以搭建ObjC编译环境。 Mac自然不用多说&#xff0c;ObjC是亲儿子。(WSL Ubuntu 22.04) Ubuntu可以安装gobjc/gnustep和gnustep-devel构建编译环境。 sudo apt-get install gobjc gnus…...

C++——类和对象(下)

1.初始化列表 之前我们实现构造函数时&#xff0c;初始化成员变量主要使用函数体内赋值&#xff0c;构造函数初始化还有一种方式&#xff0c;就是初始化列表&#xff0c;初始化列表的使用方式是以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个…...

R 字符串:深入理解与高效应用

R 字符串:深入理解与高效应用 引言 在R语言中,字符串是数据处理和编程中不可或缺的一部分。无论是数据清洗、数据转换还是数据分析,字符串的处理都是基础技能。本文将深入探讨R语言中的字符串概念,包括其基本操作、常见函数以及高效应用方法。 字符串基本概念 字符串定…...

C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?

匿名方法本质上是一种没有显式名称的方法&#xff0c;它可以作为参数传递给需要委托类型的方法&#xff0c;常用于事件处理、回调函数等场景&#xff0c;能够让代码更加简洁和紧凑。 使用场景 事件处理&#xff1a;在处理事件时&#xff0c;不需要为每个事件处理程序单独定义…...

舵机型号与识别

舵机型号繁多&#xff0c;不同品牌和制造商有不同的命名规则。常见的舵机品牌包括 Futaba、Hitec、Tower Pro、Savox、JX Servo 等。以下是舵机型号的常见识别方法以及一些典型的型号示例&#xff1a; 一、舵机型号的识别方法 型号命名规则&#xff1a; 舵机型号通常由字母和数…...

【memgpt】letta 课程6: 多agent编排

Lab 6: Multi-Agent Orchestration 多代理协作 letta 是作为一个服务存在的,app通过restful api 通信 多智能体之间如何协调与沟通? 相互发送消息共享内存块,让代理同步到不同的服务的内存块...

《DeepSeek手机版:开启AI移动新时代》

DeepSeek 手机版爆火&#xff1a;现象与背景 在当今数字化时代&#xff0c;AI 技术的发展日新月异&#xff0c;如同一股汹涌澎湃的浪潮&#xff0c;深刻地改变着我们的生活。而在这股浪潮中&#xff0c;DeepSeek 手机版宛如一颗璀璨的新星&#xff0c;迅速崛起&#xff0c;引发…...

列表(列表是什么)

你将学习列表是什么以及如何使用列表元素。列表让你能够在一个地方存储成组的信息&#xff0c;其中可以只包含几个元素&#xff0c;也可以包含数百万个元素。 列表是新手可直接使用的最强大的Python功能之一&#xff0c;它融合了众多重要的编程概念。 列表是什么 列表 由一系列…...

C语言-运算符

1. 按位与运算符&#xff08;&&#xff09; 按位与运算符对两个整数的每一位执行“与”操作。只有当两个相应位都为 1 时&#xff0c;结果才为 1 &#xff1b;否则为 0。 // 示例 int a 5; // 二进制: 0101 int b 3; // 二进制: 0011 int result a & b; …...

yolov11、yolov8部署的7种方法(yolov11、yolov8部署rknn的7种方法),一天一种部署方法,7天入门部署

由于涉及量化、部署两个领域&#xff0c;本博文难免有不对之处&#xff0c;欢迎指正。 本博客对 yolov11&#xff08;yolov8&#xff09;尝试了7种不同的部署方法&#xff0c;在最基础的模型上一步一步的去掉解码相关的操作&#xff08;移到后处理种进行&#xff09;&#xff0…...

事务03之MVCC机制

MVCC 多版本并发控制机制 文章目录 MVCC 多版本并发控制机制一&#xff1a;并发事务的场景1&#xff1a;读读场景2&#xff1a;写写场景3&#xff1a;读写 or 写读场景 二&#xff1a;MVCC机制综述1&#xff1a;MVCC日常生活的体现2&#xff1a;多版本并发控制 三&#xff1a;M…...

Autosar-Os是怎么运行的?(时间保护)

写在前面&#xff1a; 入行一段时间了&#xff0c;基于个人理解整理一些东西&#xff0c;如有错误&#xff0c;欢迎各位大佬评论区指正&#xff01;&#xff01;&#xff01; 1.功能概述 AUTOSAR OS 的四大可定制类型凸显了时间保护&#xff08;Timing Protection&#xff09;…...

论文阅读(九):通过概率图模型建立连锁不平衡模型和进行关联研究:最新进展访问之旅

1.论文链接&#xff1a;Modeling Linkage Disequilibrium and Performing Association Studies through Probabilistic Graphical Models: a Visiting Tour of Recent Advances 摘要&#xff1a; 本章对概率图模型&#xff08;PGMs&#xff09;的最新进展进行了深入的回顾&…...

python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习了图像的常规读取和基本按位操作技巧&#xff0c;相关文章包括且不限于&#xff1a; python学opencv|读取图像-CSDN博客 python学opencv|读取图像&#xff08;四十九&#xff09;原理探究&#xff1a;使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客…...