第 4 篇:平稳性 - 时间序列分析的基石
第 4 篇:平稳性 - 时间序列分析的基石
在上一篇中,我们学习了如何将时间序列分解为趋势、季节性和残差。我们看到,很多真实世界的时间序列(比如 CO2 浓度)都包含明显的趋势(长期向上或向下)和/或季节性(固定周期的波动)。
这些成分虽然揭示了数据的内在模式,但也带来了一个“问题”:它们使得序列的统计特性随时间而变化。例如,带有上升趋势的序列,其均值(平均水平)会随着时间推移而增加。这种“不稳定”的特性,在时间序列分析中被称为非平稳性 (Non-stationarity)。
为什么我们要关心这个?因为许多经典且强大的时间序列预测模型(如 ARIMA 模型家族)都建立在一个关键假设之上:数据是平稳的 (Stationary)。
本篇我们就来深入探讨这个时间序列分析的基石——平稳性。我们将了解:
- 什么是平稳性?
- 为什么平稳性如此重要?
- 如何判断一个序列是否平稳?
- 如果序列不平稳,最常用的处理方法是什么?
什么是平稳性 (Stationarity)?
想象一条平静的湖面(Stationary)和一条奔腾的河流(Non-stationary)。
- 平静的湖面: 在任何位置取一瓢水,它的平均深度、水面的波动程度(方差)看起来都差不多。
- 奔腾的河流: 在上游和下游取水,平均深度可能截然不同;在急流和缓滩处,水流的湍急程度(方差)也相差甚远。
平稳性 就是时间序列数据拥有类似“平静湖面”的特性。更严谨地说,一个时间序列是**(弱)平稳**的,如果它的:
- 均值 (Mean) 不随时间
t
变化。 - 方差 (Variance) 不随时间
t
变化。 - 自协方差 (Autocovariance) 只依赖于时间的间隔
k
,而不依赖于具体的时间点t
。(这保证了序列内部的相关性结构是稳定的,我们暂时不用深究数学细节,理解前两点更重要)。
看图说话:
- 平稳序列 (Stationary): 数据点围绕一个固定的水平线上下波动,且波动的幅度大致稳定。典型的例子是白噪声 (White Noise),即纯粹的随机波动。
- 非平稳序列 (Non-stationary):
- 含趋势: 数据明显呈现长期上升或下降。 (例如我们上一篇分解出的 CO2 趋势部分)
- 含季节性: 数据存在固定的周期性波动。 (例如 CO2 的季节性部分)
- 方差变化: 数据的波动幅度随时间变化(例如,早期波动小,后期波动剧烈)。
- 随机游走 (Random Walk): 一个典型的非平稳过程,下一步的位置是当前位置加上一个随机步长。股价有时被建模为类似随机游走。
为什么平稳性如此重要?
- 模型假设: 很多经典时间序列模型(如 ARMA, ARIMA)明确要求输入数据是平稳的。如果用非平稳数据直接建模,可能会导致模型参数估计不准、预测结果不可靠。
- 可预测性基础: 平稳序列意味着其统计特性在未来可能保持不变。这为我们基于历史模式进行预测提供了更坚实的基础。如果一个序列的均值和方差都在不断变化,预测其未来将非常困难。
- 简化分析: 处理平稳序列通常比处理非平稳序列更简单。我们可以专注于分析其内部的相关性结构(自相关性),而不用同时处理变化的趋势和季节性。
如何判断平稳性?
主要有两种方法:
-
视觉检查 (Visual Inspection):
- 直接绘制时间序列图: 观察是否存在明显的趋势或季节性模式?数据的均值线是否大致水平?数据的波动幅度是否大致恒定?
- 查看分解图 (来自上一篇):
seasonal_decompose
的结果可以帮助我们。如果趋势 (Trend) 成分不是水平的,或者季节性 (Seasonal) 成分很明显,那么原始序列很可能不是平稳的。
-
统计检验 (Statistical Tests):
-
肉眼观察有时会骗人,我们需要更客观的统计方法。最常用的检验之一是 ADF 检验 (Augmented Dickey-Fuller Test)。
-
ADF 检验的目的: 它的“原假设 (Null Hypothesis)”是序列存在单位根 (Unit Root),即序列是非平稳的。它的“备择假设 (Alternative Hypothesis)”是序列没有单位根,即序列是平稳的。
-
如何解读结果? 我们主要关心检验输出的 p-value:
- 如果 p-value > 0.05 (常用的显著性水平): 我们没有足够证据拒绝原假设。也就是说,我们倾向于认为序列是非平稳的。
- 如果 p-value <= 0.05: 我们拒绝原假设。也就是说,我们倾向于认为序列是平稳的。
-
Python 实现 (使用
statsmodels
):
from statsmodels.tsa.stattools import adfuller import statsmodels.api as sm import pandas as pd# 仍然使用上一篇的月度 CO2 数据 data = sm.datasets.co2.load_pandas().data data['co2'].interpolate(inplace=True) monthly_data = data.resample('M').mean()print("对原始月度 CO2 数据进行 ADF 检验:") result = adfuller(monthly_data['co2'])print('ADF Statistic: %f' % result[0]) print('p-value: %f' % result[1]) print('Critical Values:') for key, value in result[4].items():print('\t%s: %.3f' % (key, value))# 解释 p-value if result[1] > 0.05:print("\n结论:p-value > 0.05,未能拒绝原假设,数据很可能非平稳。") else:print("\n结论:p-value <= 0.05,拒绝原假设,数据很可能平稳。")
运行上述代码,你会发现 CO2 数据的 p-value 远大于 0.05,印证了我们视觉观察到的非平稳性。
-
如何让序列平稳?—— 差分 (Differencing)
如果我们的序列被判断为非平稳,怎么办?最常用、最简单的处理方法就是差分 (Differencing)。
差分的思想很简单:计算相邻时间点数据之间的差值。
-
一阶差分 (First Difference):
Y'(t) = Y(t) - Y(t-1)
- 目的: 主要用于消除序列中的线性趋势。
- 效果: 如果原序列有稳定增长或下降的趋势,差分后的序列通常会围绕 0 值上下波动。
-
季节性差分 (Seasonal Difference):
Y'(t) = Y(t) - Y(t-s)
,其中s
是季节性周期长度(例如,对于月度数据年度季节性,s=12)。- 目的: 主要用于消除序列中的季节性。
-
高阶差分: 有时需要进行多次差分(例如,对一阶差分后的序列再做一次差分,称为二阶差分),或者结合使用普通差分和季节性差分,来达到平稳。但通常一阶或二阶差分就足够了。过度差分可能会引入不必要的模式。
Python 实现一阶差分 (.diff()
):
import matplotlib.pyplot as plt
import seaborn as sns# 对 CO2 数据进行一阶差分
monthly_data['co2_diff'] = monthly_data['co2'].diff()# 差分后第一个值是 NaN,需要去掉或填充
monthly_data_diff = monthly_data.dropna() # 去掉 NaN 值print("\n差分后的数据 (前几行):")
print(monthly_data_diff.head())# 绘制差分后的序列图
plt.figure(figsize=(12, 6))
sns.lineplot(data=monthly_data_diff, x=monthly_data_diff.index, y='co2_diff')
plt.title('First Difference of Monthly CO2 Data')
plt.xlabel('Date')
plt.ylabel('First Difference')
plt.axhline(0, color='red', linestyle='--') # 添加 0 值参考线
plt.show()# 对差分后的序列再次进行 ADF 检验
print("\n对一阶差分后的 CO2 数据进行 ADF 检验:")
result_diff = adfuller(monthly_data_diff['co2_diff'])
print('ADF Statistic: %f' % result_diff[0])
print('p-value: %f' % result_diff[1])
print('Critical Values:')
for key, value in result_diff[4].items():print('\t%s: %.3f' % (key, value))if result_diff[1] > 0.05:print("\n结论:p-value > 0.05,差分后数据仍可能非平稳 (可能需要进一步处理,如季节性差分)。")
else:print("\n结论:p-value <= 0.05,拒绝原假设,差分后数据很可能平稳。")# 注意:CO2 数据同时有强趋势和强季节性,仅一阶差分可能不足以完全平稳,
# ADF检验的 p-value 可能会显著降低,但仍可能大于 0.05 或略小于 0.05。
# 完全平稳化可能需要再做季节性差分: .diff(12)
# monthly_data['co2_diff_seasonal'] = monthly_data['co2'].diff().diff(12).dropna()
# 但我们这里主要演示一阶差分的效果。
解读结果:
- 差分后的图形: 你会看到,原始 CO2 数据那个明显的上升趋势消失了!差分后的序列现在看起来更像是在 0 附近波动,尽管可能还保留着一些季节性模式。
- 差分后的 ADF 检验: 运行 ADF 检验,你会发现差分后序列的 p-value 显著降低了(可能已经小于 0.05,或者非常接近)。这表明一阶差分有效地移除了大部分非平稳性(主要是趋势)。如果 p-value 仍然偏高,可能意味着还需要处理季节性(进行季节性差分)。
重要提醒: 我们的目标是使用尽可能少的差分次数来使序列平稳。过度差分会丢失信息。
小结
今天我们学习了时间序列分析中一个至关重要的概念——平稳性:
- 定义: 平稳序列的均值、方差和自协方差结构不随时间改变。
- 重要性: 是许多经典时间序列模型的基础假设。
- 判断方法:
- 视觉检查: 观察时间序列图和分解图中的趋势、季节性及波动幅度。
- 统计检验: 使用 ADF 检验,通过 P-value 判断是否存在单位根(非平稳)。
- 处理方法: 最常用的使序列平稳的方法是差分(一阶差分消除趋势,季节性差分消除季节性)。
理解并能够处理数据的平稳性,是进行有效时间序列建模的关键一步。
下一篇预告
到目前为止,我们已经掌握了如何加载、可视化、分解时间序列,以及如何处理非平稳性。现在,我们终于可以开始尝试做一些简单的预测 (Forecasting) 了!
下一篇,我们将学习几种最基础、最直观的预测方法,比如朴素预测、平均法、移动平均法等。它们虽然简单,但有时效果惊人,并且是理解更复杂模型的重要起点。
准备好迎接你的第一个时间序列预测模型了吗?敬请期待!
(对你的数据进行 ADF 检验和差分,结果如何?差分后的序列看起来平稳了吗?欢迎在评论区分享你的实践!)
相关文章:
第 4 篇:平稳性 - 时间序列分析的基石
第 4 篇:平稳性 - 时间序列分析的基石 在上一篇中,我们学习了如何将时间序列分解为趋势、季节性和残差。我们看到,很多真实世界的时间序列(比如 CO2 浓度)都包含明显的趋势(长期向上或向下)和/…...
KRaft面试思路引导
Kafka实在2.8之后就用KRaft进行集群管理了 Conroller负责选举Leader,同时Controller管理集群元数据状态信息,并将元数据信息同步给各个分区的Leader 和Zookeeper管理一样,会选出一个Broker作为Controller去管理整个集群,但是元数…...
怎么建立自然语言领域的评价标准
怎么建立自然语言领域的评价标准 明确评价目标与对象 首先要清晰界定评价的目标,比如是评估模型对文本语义的理解能力、生成文本的质量,还是系统在信息检索中的表现等。同时,明确评价对象,可能是一个语言模型、一个问答系统、一个机器翻译工具等。确定评价维度与指标 语言…...
EMQX学习笔记
MQTT简介 MQTT是一种基于发布订阅模式的消息传输协议 消息:设备和设备之间传输的数据,或者服务和服务之间传输的数据 协议:传输数据时所遵循的规则 轻量级:MQTT协议占用的请求源较少,数据报文较小 可靠较强ÿ…...
组件是怎样写的(1):虚拟列表-VirtualList
本篇文章是《组件是怎样写的》系列文章的第一篇,该系列文章主要说一下各组件实现的具体逻辑,组件种类取自 element-plus 和 antd 组件库。 每个组件都会有 vue 和 react 两种实现方式,可以点击 https://hhk-png.github.io/components-show/ …...
CGAL 计算直线之间的距离(3D)
文章目录 一、简介二、实现代码三、实现效果一、简介 这里的计算思路很简单: 1、首先将两个三维直线均平移至过原点处,这里两条直线可以构成一个平面normal。 2、如果两个直线平行,那么两条直线之间的距离就转换为直线上一点到另一直线的距离。 3、如果两个直线不平行,则可…...
定期检查滚珠丝杆的频率是多久?
定期检查滚珠丝杆的频率通常是每半年进行一次,根据不同的使用环境和设备类型,滚珠丝杆的检查周期有所不同。接下来我们一起看看滚珠丝杆的维护保养方法: 1、清洗:每隔一段时间对滚珠丝杆进行清洁,将滚珠丝杆拆…...
Spark-SQL连接Hive全攻略
在大数据处理领域,Spark-SQL与Hive的结合能发挥强大的功能。今天就来给大家分享一下Spark-SQL连接Hive的多种方式。 Spark SQL编译时可选择包含Hive支持,这样就能使用Hive表访问、UDF、HQL等特性,而且无需提前安装Hive。其连接方式丰富多样…...
在Ubuntu 18.04下编译OpenJDK 11
在Ubuntu 18.04下编译OpenJDK 11 源码下载地址: 链接: https://pan.baidu.com/s/1QAdu-B6n9KqeBakGlpBS3Q 密码: 8lho Linux下的环境要求 不同版本的jdk会要求在不同版本的Ubuntu下编译,不要用太高版本的Ubuntu或者gcc,特别是gcc…...
Spring MVC 一个简单的多文件上传
原始代码逐行解释 PostMapping("/uploads") // ① 声明处理POST请求,路径为"/uploads" ResponseBody // ② 直接返回数据到响应体,不进行视图解析 public String uploads(MultipartFile[] files, // …...
FreeRTos学习记录--1.工程创建与源码概述
1.工程创建与源码概述 1.1 工程创建 使用STM32CubeMX,可以手工添加任务、队列、信号量、互斥锁、定时器等等。但是本课程不想严重依赖STM32CubeMX,所以不会使用STM32CubeMX来添加这些对象,而是手写代码来使用这些对象。 使用STM32CubeMX时&…...
Vmware esxi 给现有磁盘增加空间后并扩展系统里磁盘空间
当前EXSI上虚拟机所在的单独数据磁盘空间满了,需要对空间进行扩容,我们先在主机对磁盘容量进行调整,然后在系统里面对磁盘空间进行拓展,这些操作需要保留数据并且不改变现有的磁盘格局。 遵循大致操作流程是: 1.先登录…...
Linux基础学习--linux的文件权限与目录配置
linux的文件权限与目录配置 1.用户与用户组 在Linux中,每个文件都有相当多的属性和权限,其中最重要的概念就是文件的拥有者。 1.1 文件拥有者 Linux是一个多人多任务的系统,常常有多人共用一台主机的情况出现,因此在系统中可以…...
LLM大模型中的基础数学工具—— 约束优化
Q26: 推导拉格朗日乘子法 的 KKT 条件 拉格朗日乘子法与 KKT 条件是啥? 拉格朗日乘子法是解决约束优化问题的利器。比如,想最小化函数 ,同时满足约束 ,就构造拉格朗日函数 ( 是乘子)。KKT 条件是解这类问…...
涨薪技术|0到1学会性能测试第20课-关联技术
前面的推文我们掌握了性能测试脚本开发参数化技术一系列知识,今天开始给大家分享关联技术知识,后续文章都会系统分享干货,带大家从0到1学会性能测试! 关联是LoadRunner中一个很重要的应用,对于初学者来说也是最容易犯错的地方,但是很遗憾的是,并没有任何特定的错误与关联…...
SpringAI入门示例
AI编程简介 纯Prompt模式 纯Prompt模式是AI编程中最基础的交互架构。用户通过输入自然语言文本(即Prompt)向AI模型发出指令,模型依据自身预训练所积累的知识和语言理解能力,直接生成相应的文本响应。其工作原理是,用…...
SQL 中 ROLLUP 的使用方法
ROLLUP 是 SQL 中一种分组操作,它生成多个分组集的小计行和总计行,提供层次化的汇总数据。 基本语法 SELECT column1, column2, ..., aggregate_function(column) FROM table GROUP BY ROLLUP (column1, column2, ...); 使用示例 假设有一个销售表 sal…...
Web前端:Overflow属性(超出裁剪属性)
一、什么是 Overflow? 在网页布局中,容器(如 <div>、<section> 等)通常有固定尺寸(如 width 和 height)。当容器内的内容(文本、图片等)超出容器边界时,就会…...
20250421在荣品的PRO-RK3566开发板的Android13下使用io命令控制GPIO
20250421在荣品的PRO-RK3566开发板的Android13下使用io命令控制GPIO 2025/4/21 10:44 【本文只打开了io命令。通过io控制GPIO放到下一篇了】 缘起:需要在荣品的PRO-RK3566开发板的Android13的u-boot中来控制GPIO3A1【配置以太网RTL8211F-CG】。 直接使用GPIO库函数 …...
20250421在荣品的PRO-RK3566开发板的Android13下频繁重启RKNPU fde40000.npu: Adding to iommu gr
20250421在荣品的PRO-RK3566开发板的Android13下频繁重启RKNPU fde40000.npu: Adding to iommu gr 2025/4/21 14:50 缘起:电池没电了,导致荣品的PRO-RK3566的核心板频繁重启。 内核时间4s就重启。100%复现。 PRO-RK3566 Android13启动到这里 复位&#…...
在 8MHz 的时钟电路中挂接电阻,电容
匹配电阻:在晶体振荡电路中,用于匹配晶体和振荡电路的阻抗,确保振荡的稳定性,阻值通常在几十千欧到几百千欧,例如 1MΩ、33KΩ、47KΩ 等。 在一些电子电路中,尤其是涉及到时钟信号的产生和传输时…...
卸载工具:IObit Uninstaller Pro v14.3.0 中文绿色专业便携版
IObit Uninstaller 是一种功能强大的卸载工具,可帮助您快速方便地从计算机中移除不需要的程序和文件夹。它不仅仅可以从计算机中卸载应用程序,还可以移除它们的卸载残留。可以检测和分类所有已安装的程序,并可以批量卸载,只需一键…...
【目标检测】目标检测综述 目标检测技巧
I. 目标检测中标注的关键作用 A. 目标检测数据标注的定义 目标检测是计算机视觉领域的一项基础且核心的任务,其目标是在图像或视频中准确识别并定位出预定义类别的目标实例 1。数据标注,在目标检测的语境下,指的是为原始视觉数据࿰…...
c++基础·move作用,原理
目录 一、代码结构概览 二、逐层解析实现逻辑 1. 模板参数推导 2. 返回类型设计 3. 类型转换逻辑 三、关键特性与设计思想 1. 移动语义的本质 2. 为何必须用 remove_reference 3. 万能引用的兼容性 四、边界场景与注意事项 1. 对 const 对象的处理 2. 返回值优化&a…...
考研系列-计算机网络-第四章、网络层
一、网络层的概述和功能 1.功能概述 2.SDN的基本概念...
服务器在国外国内用户访问慢会影响谷歌排名吗?
谷歌明确将“页面加载速度”和“用户体验”作为排名核心指标,但当服务器物理距离过远时,国内用户动辄3秒以上的加载延迟,可能导致跳出率飙升、爬虫抓取困难等连锁反应。 但盲目将服务器迁回国内,又会面临备案成本、运维门槛等新难…...
iFable,AI角色扮演互动平台,自动生成沉浸式故事游戏
iFable是什么 iFable 是一个以动漫角色为主题的互动角色扮演游戏平台,旨在为用户提供沉浸式的故事冒险体验。平台允许玩家通过简单的创意输入,利用AI技术生成独特的互动故事与游戏体验。iFable 的设计宗旨在于帮助玩家与虚拟角色建立情感连接࿰…...
Nginx反向代理用自定义Header参数
【啰嗦两句】 也不知道为啥,我仅仅想在Nginx的反向代理中使用自己定义的“x-api-key”做Header参数,却发现会被忽略,网上搜的资料都是说用“proxy_set_header”,却只愿意介绍最基本的几个参数,你懂的,那些资…...
Spark SQL概述(专业解释+生活化比喻)
专业解释 一、什么是Spark SQL? 一句话定义: Spark SQL是Apache Spark中专门处理结构化数据的模块,可以让你像操作数据库表一样处理数据,支持用SQL查询或编程API(DataFrame/DataSet)分析数据。 通俗理解…...
LX3-初识是单片机
初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…...
第二章 Logback的架构(一)
Logback的架构 Logback作为一个通用框架,可以应对不同场景的日志记录。目前,Logback 被划分为三个模块:logback-core、logback-classic 和 logback-access。 Logback的core模块为其他两个模块提供基础支持。classic模块扩展了core模块&…...
开发指南:构建结合数字孪生、大语言模型与知识图谱的智能设备日志分析及生产异常预警系统
1. 引言:数字孪生、大语言模型与知识图谱在智能制造中的融合 智能制造和工业4.0的浪潮正在重塑全球制造业格局,其核心在于利用先进的数字技术实现生产过程的实时决策、效率提升、灵活性增强和敏捷性改进。在这一转型过程中,数字孪生…...
【TeamFlow】4.1 Git使用指南
以下是 Git 在 Windows 系统上的配置和使用指南,包含详细步骤和注意事项: 安装 Git for Windows 下载与安装 前往 Git 官网 下载 Windows 版安装包 双击安装,关键选项建议: 选择 Use Git from Git Bash only(推荐&…...
HADOOP 3.4.1安装和搭建(尚硅谷版~)
目录 1.配置模版虚拟机 2.克隆虚拟机 3.在hadoop102安装JDK 4.完全分布式运行模式 1.配置模版虚拟机 1.安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存2G、硬盘20G(有需求的可以配置4G内存,50G硬盘) 2.hado…...
通过Docker Desktop配置OpenGauss数据库的方法(详细版+图文结合)
文章目录 通过Docker Desktop配置OpenGauss数据库的方法**一、下载Docker Desktop,并完成安装**docker官网:https://www.docker.com/ **二、下载OpenGauss压缩包**安装包下载链接:https://opengauss.obs.cn-south-1.myhuaweicloud.com/7.0.0-…...
文件有几十个T,需要做rag,用ragFlow能否快速落地呢?
一、RAGFlow的优势 1、RAGFlow处理大规模数据性能: (1)、RAGFlow支持分布式索引构建,采用分片技术,能够处理TB级数据。 (2)、它结合向量搜索和关键词搜索,提高检索效率。 …...
SystemVerilog语法之内建数据类型
简介:SystemVerilog引进了一些新的数据类型,具有以下的优点:(1)双状态数据类型,更好的性能,更低的内存消耗;(2)队列、动态和关联数组,减少内存消耗…...
TensorFlow和PyTorch学习原理解析
这里写目录标题 TensorFlow和PyTorch学习&原理解析TensorFlow介绍原理部署适用场景 PyTorch介绍原理部署适用场景 Keras模型格式SavedModelONNX格式 TensorFlow和PyTorch学习&原理解析 TensorFlow 介绍 由 Google Brain 团队开发并于 2015 年开源。由于 Google 的强…...
悬空引用和之道、之禅-《分析模式》漫谈57
DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 “Analysis Patterns”的第5章“对象引用”原文: Unless you can catch all such references, there is the risk of a dangling reference, which often has painful con…...
江湖密码术:Rust中的 bcrypt 加密秘籍
前言 江湖险恶,黑客如雨,昔日密码“123456”早被各路大侠怒斥为“纸糊轻功”。若还执迷不悟,用明文密码闯荡江湖,无异于身披藏宝图在集市上狂奔,目标大到闪瞎黑客双眼。 为护你安然度过每一场数据风波,特献上一门绝学《Rust加密神功》。核心招式正是传说中的 bcrypt 密…...
NLP高频面试题(四十八)大语言模型中的思维链(CoT)技术详解
引言 大语言模型(LLM)在近年的飞速发展,让机器在各种任务上表现出令人瞩目的能力。然而,与人类不同,传统的语言模型往往倾向于直接给出答案,而缺乏可解释的中间推理过程。这在复杂推理任务中成为瓶颈:模型可能由于一步推理不当而得出错误结论,却没有过程可供检查。为了…...
对接点餐接口需要有哪些准备?
以下是一般点餐接口对接的相关信息,包括常见的接口功能、对接步骤及注意事项等: 常见接口功能 餐厅信息查询:获取合作餐厅的基本信息,如餐厅名称、地址、营业时间、联系电话、菜单等。菜品查询:查询具体餐厅的菜品详情…...
LintCode第192题-通配符匹配
描述 给定一个字符串 s 和一个字符模式 p ,实现一个支持 ? 和 * 的通配符匹配。匹配规则如下: ? 可以匹配任何单个字符。* 可以匹配任意字符串(包括空字符串)。 两个串完全匹配才算匹配成功。 样例 样例1 输入: "aa&q…...
uv运行一个MCP Server的完整流程
uv是一个高性能的Python包管理器,专注于性能提升。与pip相比,uv利用全局模块缓存,减少磁盘空间使用,并支持Linux、Windows和macOS系统。安装uv可以通过多种方式实现,例如使用Homebrew、Pacman、pip等。 step 1 安装uv:…...
ts中的类型
在 TypeScript 中,类型是静态类型系统的核心,用于在编译阶段检查代码的正确性。TypeScript 提供了丰富的类型系统,包括基本的原始类型、复合类型、以及用户自定义的类型。以下是对 TypeScript 中各种类型的详细分类和说明: 1. 原…...
把dll模块注入到游戏进程的方法_基于文件修改的注入方式
1、概述 本文主要是介绍两种基于文件修改的注入方式,一种是“DLL劫持”,另一种是“修改导入表”。这两种注入方式都是利用操作系统加载PE时的特点来实现的,我们在实现这两种注入方式时只需专注于注入dll的实现,而不用花费额外的精力去关注注入器的实现。要想深入了解这两种…...
判断点是否在多边形内
代码段解析: const intersect = ((yi > y) !== (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi); 第一部分:(yi > y) !== (yj > y) 作用:检查点 (x,y) 的垂直位置是否跨越多边形的当前边。 yi > y 和 yj > y 分别检查边的两个端…...
【形式化验证基础】活跃属性Liveness Property和安全性质(Safety Property)介绍
文章目录 一、Liveness Property1、概念介绍2、形式化定义二、Safety Property1. 定义回顾2. 核心概念解析3. 为什么强调“有限前缀”4. 示例说明4.1 示例1:交通信号灯系统4.2 示例2:银行账户管理系统5. 实际应用的意义三. 总结一、Liveness Property 1、概念介绍 在系统的…...
Linux——信号(2)信号保存与捕捉
一、信号的保存 上次我们说到,捕捉一个信号后有三种处理方式:默认、忽略、自定义,其中自定义我们用signal系统调用完成,至于忽略信号,也需要signal实现,比如我现在想忽略2号信号,则:…...
Vue的模板编译过程
👨 作者简介:大家好,我是Taro,全栈领域创作者 ✒️ 个人主页:唐璜Taro 🚀 支持我:点赞👍📝 评论 ⭐️收藏 文章目录 前言一、编程范式的分类1.编程范式分为声明式和命令…...