算法——数学建模中的“上帝掷骰子”:蒙特卡罗算法
一、从原子弹到《原神》:随机算法的封神之路
1946年洛斯阿拉莫斯实验室,冯·诺伊曼团队用掷骰子的方式,成功预测了氢弹的中子扩散——这是蒙特卡罗算法首次震惊世界。
2023年《原神》物理引擎,角色技能特效的光线追踪计算,同样依赖蒙特卡罗模拟。
算法本质:
解 = 1 N ∑ i = 1 N f ( x i ) 其中 x i ∼ 概率分布 \text{解} = \frac{1}{N}\sum_{i=1}^N f(x_i) \quad \text{其中} x_i \sim \text{概率分布} 解=N1i=1∑Nf(xi)其中xi∼概率分布
看似暴力随机,实则暗藏高维破局智慧
传统网格法和蒙特卡罗采样是两种不同的数值方法,它们在解决复杂问题时各有优势和局限。以下是对这两种方法的对比分析:
传统网格法
定义与应用
传统网格法通常指的是基于离散化的方法,例如有限差分法(FDM)、有限元法(FEM)或有限体积法(FVM),这些方法通过将连续的空间划分成许多小的单元(即网格),然后在每个单元上近似求解偏微分方程(PDEs)。这种方法广泛应用于工程、物理模拟等领域。
优点
- 高精度:对于规则形状和光滑函数,可以达到较高的精度。
- 稳定性好:当网格足够细密时,数值解往往非常稳定。
- 易于理解:原理直观,适合处理边界条件明确的问题。
缺点
- 计算资源消耗大:随着问题维度增加,所需的计算资源呈指数级增长(维数灾难)。
- 对非规则几何适应性差:复杂的几何形状可能导致网格生成困难。
- 固定分辨率:一旦网格确定,分辨率固定,难以动态调整。
蒙特卡罗采样
定义与应用
蒙特卡罗采样是一种基于概率论的数值方法,它利用随机抽样的方式来估计积分或其他数学量。这种方法特别适用于高维空间中的问题以及解析解难以获得的情况。
优点
- 维度无关性:其效率不受问题维度的影响,因此非常适合处理高维问题。
- 灵活性强:能够处理复杂的几何形状和不规则分布。
- 并行计算友好:由于每个样本点独立于其他点,容易实现并行化。
缺点
- 收敛速度慢:误差通常以(O(1/\sqrt{N}))的速度减少,其中(N)是样本数量,这意味着为了提高精度需要大量的样本。
- 结果波动大:由于依赖于随机性,不同运行之间可能会有较大的结果差异。
- 初始化要求高:为了得到较好的结果,可能需要精心设计的概率分布和采样策略。
对比总结
特性 | 传统网格法 | 蒙特卡罗采样 |
---|---|---|
精度 | 在适当条件下非常高 | 受样本数量影响,但维度无关 |
计算成本 | 随着维度增加迅速上升 | 维度无关,但需大量样本 |
处理复杂几何的能力 | 较弱,尤其是非规则形状 | 强,能有效处理复杂几何 |
并行化潜力 | 中等,部分步骤可并行 | 高,几乎完全并行 |
在实际应用中,选择哪种方法取决于具体问题的需求和约束条件。例如,在金融建模中,蒙特卡罗方法常用于风险评估和期权定价,而在流体力学领域,传统网格法则更常用。同时,近年来也出现了结合两者优点的新算法,如多重网格算法和自适应蒙特卡罗方法,旨在提供更加高效和准确的解决方案。
二、三大核心法则:掌握随机中的确定性
法则1:高质量随机数是王道
线性同余生成器(LCG)的周期性陷阱
线性同余生成器(Linear Congruential Generator, LCG)是一种常见的伪随机数生成算法,它通过一个简单的递归公式来产生一系列数字。尽管LCG因其简单性和高效性而在历史上被广泛使用,但它也存在一些显著的局限性,尤其是周期性陷阱的问题。
周期性陷阱
LCG的核心是通过以下公式生成下一个伪随机数:
[ X_{n+1} = (aX_n + c) \mod m ]
这里,(X_n)是第(n)个伪随机数,(a)是乘数,(c)是增量,而(m)是模数。LCG的一个关键特性是它的周期长度,即在不重复的情况下可以产生的最大伪随机数数量。理论上,LCG的最大周期为(m),但在实践中,为了达到这个最大周期,参数的选择至关重要。如果参数选择不当,LCG的周期会远小于(m),导致序列过早地开始重复,这就是所谓的“周期性陷阱”。
参数选择的重要性
为了确保LCG能够达到其最大周期,参数(a)、(c)和(m)需要满足特定条件:
- (c)与(m)互质;
- (a-1)能被(m)的所有素因子整除;
- 如果(m)是4的倍数,则(a-1)也是4的倍数。
如果不满足这些条件,LCG的周期将大大缩短,从而影响生成序列的质量。例如,当(c=0)时(称为乘法线性同余发生器),即使其他参数设置得当,其周期也仅为(\phi(m)),其中(\phi)是欧拉函数,表示小于(m)且与(m)互质的正整数的数量。
实际应用中的挑战
在实际应用中,周期性陷阱可能导致严重的后果。例如,在仿真和建模中,如果使用的伪随机数序列周期太短,可能会导致模拟结果出现偏差或失去代表性。同样,在加密领域,由于LCG的可预测性,攻击者可能利用已知的部分随机数序列来推断后续的数值,进而破解加密系统。
此外,LCG生成的伪随机数还表现出一定的序列相关性,这意味着连续的随机数之间可能存在某种形式的相关性。这种相关性在某些应用场景下(如统计抽样或密码学)是不可接受的,因为它破坏了随机数应有的独立性要求。
解决方案与替代方案
为了避免LCG的周期性陷阱和其他局限性,现代应用通常采用更为复杂的伪随机数生成算法,如梅森旋转算法(Mersenne Twister)。这类算法不仅具有较长的周期,而且提供了更好的统计性质和更高的安全性。
总之,虽然LCG因其简便易用而仍然有一定的应用场景,但考虑到其潜在的周期性陷阱和其他限制,对于需要高质量随机性的场合,建议采用更先进的伪随机数生成方法。这不仅能提高结果的准确性和可靠性,还能增强系统的整体安全性。
Mersenne Twister(Python默认算法)的219937-1超长周期
Mersenne Twister(梅森旋转算法)是一种伪随机数生成器(PRNG),以其超长的周期和高质量的随机数生成而闻名。在Python中,Mersenne Twister通常是随机数生成模块的默认算法。关于其2^19937-1的超长周期,以下是一些详细的分析和解释:
一、周期长度
- Mersenne Twister算法的主要变种MT19937的周期长度为2^19937-1。
- 这是一个非常大的数,确保了在实际应用中几乎不可能遇到周期重复的情况。
- 周期长度之所以能达到这么大,是因为Mersenne Twister算法内部状态数组的长度为624,且其设计基于梅森素数(形如2^n-1的素数)。
二、超长周期的意义
- 避免周期性重复:在实际应用中,超长的周期意味着生成的随机数序列在很长时间内都不会重复,这对于需要长时间运行或大量样本的模拟实验尤为重要。
- 提高随机数质量:长周期有助于随机数在统计上更接近真正的随机数,表现出良好的均匀性和低偏差特性。
三、Mersenne Twister在Python中的应用
- Python的random模块默认使用Mersenne Twister算法作为随机数生成器。
- 可以通过创建一个Random实例并传入一个种子来生成随机数序列。如果种子相同,则每次运行代码时生成的随机数序列也会相同,这有助于重现结果和调试。
四、代码示例
以下是一个简单的Python代码示例,展示了如何使用Mersenne Twister算法生成随机数:
import random# 创建一个Random实例,使用Mersenne Twister作为随机数生成器(实际上这是默认行为)
rng = random.Random()# 生成一个随机数
random_number = rng.random()
print(random_number)# 如果需要指定种子,可以在创建Random实例时传入
# rng = random.Random(42) # 使用种子42
请注意,虽然上述代码中没有显式指定使用Mersenne Twister,但Python的random模块默认就是使用的该算法。
实战测试:不同随机种子的分布均匀性
在探讨蒙特卡罗算法时,随机种子的选择对于结果的分布均匀性至关重要。随机种子决定了随机数生成器的起始状态,从而影响后续生成的随机数序列。一个优质的随机数生成器应该能够产生在给定范围内均匀分布的随机数,无论使用哪个种子。然而,在实际应用中,我们可能会发现不同种子导致的随机数分布有所差异。
为了直观地展示不同随机种子对随机数分布均匀性的影响,我们可以使用Matplotlib库进行可视化。以下是一个Python示例代码,它使用不同的随机种子生成一组随机数,并使用直方图来展示这些随机数的分布。
import numpy as np
import matplotlib.pyplot as plt# 设置随机种子列表(这里使用三个不同的种子作为示例)
seeds = [42, 12345, 987654321]# 设置随机数生成的数量和范围
num_samples = 10000
range_min = 0
range_max = 10# 创建一个图形和一组子图
fig, axs = plt.subplots(len(seeds), 1, figsize=(10, len(seeds) * 3))
fig.suptitle('Distribution of Random Numbers with Different Seeds')# 对于每个种子,生成随机数并绘制直方图
for i, seed in enumerate(seeds):# 设置随机种子np.random.seed(seed)# 生成随机数random_numbers = np.random.uniform(range_min, range_max, num_samples)# 绘制直方图axs[i].hist(random_numbers, bins=30, edgecolor='black', alpha=0.7)axs[i].set_title(f'Seed: {seed}')axs[i].set_xlabel('Value')axs[i].set_ylabel('Frequency')axs[i].set_xlim(range_min, range_max)axs[i].grid(True)# 调整布局以防止重叠
plt.tight_layout(rect=[0, 0, 1, 0.96])# 显示图形
plt.show()
在这个示例中,我们使用了三个不同的随机种子(42、12345和987654321)来生成10000个在0到10之间均匀分布的随机数。然后,我们使用Matplotlib的hist
函数绘制每个种子生成的随机数的直方图。
通过观察这些直方图,我们可以评估不同随机种子对随机数分布均匀性的影响。理论上,如果随机数生成器是良好的,那么无论使用哪个种子,生成的随机数都应该在指定范围内均匀分布。在实际应用中,我们可能会发现一些微小的差异,但这些差异通常不会显著影响蒙特卡罗算法的结果,除非种子选择得非常糟糕或随机数生成器本身存在问题。
请注意,在实际应用中,我们通常不会手动选择随机种子,而是让随机数生成器自动选择一个种子(通常是基于系统时间或某个不可预测的事件)。这样做可以确保每次运行程序时都能获得不同的随机数序列,从而增加结果的随机性和不可预测性。然而,在调试或测试时,使用固定的随机种子可以帮助我们重现结果并验证算法的正确性。
法则2:方差缩减=算力节省
# 重要性采样:聚焦关键区域
def importance_sampling(f, p, q, samples): return np.mean(f(samples) * p(samples) / q(samples)) # 对比普通蒙特卡罗
n_samples = 1e6
普通MC误差 = 1.23%
重要性采样误差 = 0.17%
法则3:维度诅咒的破解之道
当维度 > 10,传统数值积分效率断崖式下跌,蒙特卡罗误差仅以 O ( 1 / N ) O(1/\sqrt{N}) O(1/N)衰减(图2:维度与计算效率关系曲线)
三、两大实战场景:代码级解析
场景1:高维积分(30维超立方体体积计算)
def high_dim_integral(dim=30, n=1e6): points = np.random.rand(n, dim) in_sphere = np.sum(points**2, axis=1) <= 1 volume = 2**dim * np.mean(in_sphere) return volume
# 输出:理论值≈0.0025,蒙特卡罗估计≈0.0023
场景2:期权定价(Black-Scholes模型)
期权价格 = e − r T ⋅ E [ max ( S T − K , 0 ) ] \text{期权价格} = e^{-rT} \cdot \mathbb{E}[\max(S_T-K, 0)] 期权价格=e−rT⋅E[max(ST−K,0)]
def monte_carlo_option(S0=100, K=105, r=0.05, sigma=0.2, T=1, n=1e5): z = np.random.normal(size=int(n)) ST = S0 * np.exp((r - 0.5*sigma**2)*T + sigma*np.sqrt(T)*z) payoff = np.maximum(ST - K, 0) price = np.exp(-r*T) * np.mean(payoff) return price
# 输出:≈8.02 (与解析解7.97误差0.6%)
四、性能飞跃:GPU加速实战
CPU vs GPU百万级样本测试
平台 | 计算时间 | 加速比 |
---|---|---|
Intel i9 | 2.3s | 1x |
NVIDIA 3090 | 0.07s | 32x |
CUDA核函数代码片段:
__global__ void monte_carlo_kernel(float *d_results) { int idx = blockIdx.x * blockDim.x + threadIdx.x; curandState state; curand_init(clock64(), idx, 0, &state); float sum = 0; for(int i=0; i<1000; i++){ sum += curand_uniform(&state); } d_results[idx] = sum / 1000;
}
五、领域融合:最新应用前沿
- AlphaFold2:蛋白质折叠模拟中的马尔可夫链蒙特卡罗(MCMC)
- 自动驾驶:基于粒子滤波的实时路况预测
- 量子计算:量子蒙特卡罗求解多体薛定谔方程
- 区块链:PoW共识机制中的随机数生成挑战
六、新手避坑指南
常见错误 | 解决方案 |
---|---|
忽略随机数质量检测 | 使用NIST统计测试套件 |
样本量不足导致偏差 | 计算误差带并动态调整N |
高维度下效率低下 | 应用拉丁超立方采样 |
未利用现代硬件加速 | 使用CuPy/Numba并行化 |
相关文章:
算法——数学建模中的“上帝掷骰子”:蒙特卡罗算法
一、从原子弹到《原神》:随机算法的封神之路 1946年洛斯阿拉莫斯实验室,冯诺伊曼团队用掷骰子的方式,成功预测了氢弹的中子扩散——这是蒙特卡罗算法首次震惊世界。 2023年《原神》物理引擎,角色技能特效的光线追踪计算ÿ…...
洗牌加速!车规MCU“冷热交加”
汽车芯片赛道,正在经历新一轮震荡期。 本周,全球汽车芯片巨头—NXP对外披露了不及资本市场预期的四季度的财报,营收同比下降9%,全年下降5%,表明工业和汽车市场需求的低迷仍在持续。 公开信息显示,该公司一…...
面试整理-Java中常见创建线程池的方法
使用 Executors 工具类 Executors.newFixedThreadPool(int nThreads) 特点:创建一个固定大小的线程池,线程池中的线程数始终保持不变。 适用场景:适用于任务量已知且相对固定的场景,可以有效控制资源的使用。…...
计算机毕业设计——springboot教师人事档案管理系统
📘 博主小档案: 花花,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 花花在深度学习任务中展现出卓越的能力,包括但不限于java、python等技术。近年来,花花更…...
ASP.NET Core程序的部署
发布 不能直接把bin/Debug部署到生产环境的服务器上,性能低。应该创建网站的发布版,用【发布】功能。两种部署模式:“框架依赖”和“独立”。独立模式选择目标操作系统和CPU类型。Windows、Linux、iOS;关于龙芯。 网站的运行 在…...
Python练习11-20
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 题目:判断101-200之间有多少…...
【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪
文章目录 【Android 开发 AI 实战】选择目标跟踪基于 opencv 实现 —— 运动跟踪一、引言二、Android 开发与 AI 的融合趋势三、OpenCV 简介四、运动跟踪原理(一)光流法(二)卡尔曼滤波(三)粒子滤波 五、基于…...
深入浅出:Python 中的异步编程与协程
引言 大家好,今天我们来聊聊 异步编程 和 协程,这是近年来编程语言领域中的热点话题之一,尤其在 Python 中,它作为一种全新的编程模型,已经成为处理 IO密集型 任务的强力工具。尽管很多人对异步编程望而却步࿰…...
iOS Swift算法之KDF2
后端用Java开发的,用到了org.bouncycastle.crypto.generators.KDF2BytesGenerator,一开始在网上各种搜,没找到相关的接口或第三方库,白白浪费了几天时间,后面才想到照着Java代码自己实现,于是乎参考BaseKDF…...
PyQt6/PySide6 QImage 类
PyQt6/PySide6 QImage 类详解 一、QImage 概述 QImage 是 Qt 框架中用于处理图像数据的核心类,提供: 独立于硬件的图像表示像素级访问和操作多种图像格式支持(PNG/JPEG/BMP等)图像转换和基本处理功能 from PyQt6.QtGui import…...
Java8新特性Optional,Function,Supplier,Consumer
Java8新特性 1.Optional 首先,Optional 它不是一个函数式接口,设计它的目的是为了防止空指针异常(NullPointerException),要知道在 Java 编程中, 空指针异常可是臭名昭著的。 让我们来快速了解一下 Opti…...
腾讯云服务器中Ubuntu18.04搭建python3.7.0与TensorFlow1.15.0与R-4.0.3环境
所有踩过的坑,都化成了这条平坦的路 云服务器配置 基础配置选择竞价实例(便宜/需求小) 选择地区(距离自己近的就行) 实例配置选择异构计算(能力较强,性价比高)根据GPU显存需求选择…...
01.Docker 概述
Docker 概述 1. Docker 的主要目标2. 使用Docker 容器化封装应用程序的意义3. 容器和虚拟机技术比较4. 容器和虚拟机表现比较5. Docker 的组成6. Namespace7. Control groups8. 容器管理工具9. docker 的优缺点10. 容器的相关技术 docker 官网: http://www.docker.com 帮助文档…...
DedeBIZ系统审计小结
之前简单审计过DedeBIZ系统,网上还没有对这个系统的漏洞有过详尽的分析,于是重新审计并总结文章,记录下自己审计的过程。 https://github.com/DedeBIZ/DedeV6/archive/refs/tags/6.2.10.zip 📌DedeBIZ 系统并非基于 MVC 框架&…...
docker运行perplexica
序 本文主要研究一下如何用docker运行perplexica 步骤 git clone git clone https://github.com/ItzCrazyKns/Perplexica.gitapp.dockerfile FROM docker.1ms.run/node:20.18.0-alpineARG NEXT_PUBLIC_WS_URLws://127.0.0.1:3001 ARG NEXT_PUBLIC_API_URLhttp://127.0.0.1…...
【ThreeJS Basics 1-3】Hello ThreeJS,实现第一个场景
文章目录 环境创建一个项目安装依赖基础 Web 页面概念解释编写代码运行项目 环境 我的环境是 node version 22 创建一个项目 首先,新建一个空的文件夹,然后 npm init -y , 此时会快速生成好默认的 package.json 安装依赖 在新建的项目下用 npm 安装依…...
解决珠玑妙算游戏问题:C 语言实现
一、引言 珠玑妙算游戏(the game of master mind)是一个有趣的逻辑推理游戏。在编程领域,我们可以通过编写代码来模拟游戏中计算猜中与伪猜中次数的过程。本文将详细介绍如何使用 C 语言实现这一功能,并对核心代码进行解析。 二、…...
【清晰教程】本地部署DeepSeek-r1模型
【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面-CSDN博客 目录 Ollama 安装Ollama DeepSeek-r1模型 安装DeepSeek-r1模型 Ollama Ollama 是一个开源工具,专注于简化大型语言模型(LLMs)的本地部署和管理。它允许用户在本地计算机…...
Java/Kotlin 使用 Chrome 无头浏览器
1. 概念 无头浏览器在类似于流行网络浏览器的环境中提供对网页的自动控制,但是通过命令行界面或使用网络通信来执行。 它们对于测试网页特别有用,因为它们能够像浏览器一样呈现和理解超文本标记语言,包括页面布局、颜色、字体选择以及JavaSc…...
AI前端开发:赋能开发者,提升解决实际问题的能力
近年来,人工智能技术飞速发展,深刻地改变着各行各业。在软件开发领域,AI写代码工具的出现更是引发了一场革命,尤其是前端开发领域,AI的应用正在显著提升开发者的解决实际问题的能力。本文将探讨AI前端开发如何提升效率…...
【Elasticsearch】Elasticsearch检索方式全解析:从基础到实战(二)
接着上一篇文章;我们继续来研究es的复杂检索 文章目录 (1) bool用来做复合查询(2)Filter【结果过滤】(3)term(4)Aggregation(执行聚合) (1) bool用来做复合查询 复合语…...
ASP.NET Core SignalR的分布式部署
假设聊天室程序被部署在两台服务器上,客户端1、2连接到了服务器A上的ChatRoomHub,客户端3、4连接到服务器B上的ChatRoomHub,那么客户端1发送群聊消息时,只有客户端1、2能够收到,客户端3、4收不到;在客户端3…...
kafka的架构和工作原理
目录 Kafka 架构 Kafka 工作原理 Kafka 数据流 Kafka 核心特性 总结 Kafka 架构 1. 生产者(Producer) 2. 消费者(Consumer) 3. 主题(Topic) 4. 分区(Partition) 5. 副本(Replica) 6. 代理(Broker) 7. ZooKeeper(旧版本)/KRaft(新版本) Kafka 工作…...
当没有OpenGL时,Skia如何绘制?
Skia 是可以在没有 OpenGL 的情况下进行图形绘制的,但是具体能否成功绘制图形,取决于 Skia 是如何配置的,以及平台上是否提供了其他的底层图形 API。 Skia 的底层依赖 Skia 的目标是提供一种跨平台的 2D 图形绘制接口。为了加速图形渲染&…...
Java小白入门基础知识(一)
1.初识Java java源程序通过javac 编译生成字节码文件,通过java命令运行java程序 总结: 1)在一个Java文件中,只能有一个public class 2)public class一定要和文件名一致 3)类里面包含方法 4)…...
游戏内常见加密
加密只是增大破解难度,没法说绝对安全,避免过度加密导致性能消耗过大。 通用算法库 lua的加密算法库:https://github.com/somesocks/lua-lockbox/tree/master 比如通信协议就用到里面一些算法cry.encrypt 算法优劣:AES加解密-CBC…...
【Java八股文】02-Java集合面试篇
【Java八股文】02-Java集合面试篇 概念数组与集合区别常用集合Java中的线程安全的集合是什么?Collections和Collection的区别 Listjava中list的几种实现把ArrayList变成线程安全的有哪些方法?CopyOnWriteArrayList是如何保证线程安全的? Mapj…...
springCloud-2021.0.9 之 GateWay 示例
文章目录 前言springCloud-2021.0.9 之 GateWay 示例1. GateWay 官网2. GateWay 三个关键名称3. GateWay 工作原理的高级概述4. 示例4.1. POM4.2. 启动类4.3. 过滤器4.4. 配置 5. 启动/测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收…...
公然上线传销项目,Web3 的底线已经被无限突破
作者:Techub 热点速递 撰文:Yangz,Techub News 今天早些时候,OKX 将上线 PI 的消息在圈内引起轩然大波,对于上线被板上钉钉为传销盘子的「项目」 ,Techub News 联系了 OKX 公关,但对方拒绝置评…...
SQL数据清理:去除字段值中的多余符号(Demo例子)
目录 前言1. 基础2. 进阶 前言 Excel中有大量不合法的符号,导入到系统之后,数据库有很多脏数据,对此下述展开sql的清洗教程 在数据库的文本字段中,可能会存在多余的逗号或符号,如,销售,, 或 二手车,销售,,这种情况 希…...
MongoDB 的使用场景
一、内容管理系统 1. 博客平台 文章内容、作者信息、标签、评论等数据结构多样,MongoDB 的无模式特性可轻松应对。比如 WordPress 等博客系统,使用 MongoDB 能灵活存储不同格式和长度的文章内容,以及与文章相关的各种元数据。 2. 新闻网站…...
STM32 RTC 实时时钟说明
目录 背景 RTC(实时时钟)和后备寄存器 32.768HZ 如何产生1S定时 RTC配置程序 第一次上电RTC配置 第1步、启用备用寄存器外设时钟和PWR外设时钟 第2步、使能RTC和备份寄存器访问 第3步、备份寄存器初始化 第4步、开启LSE 第5步、等待LSE启动后稳定状态 第6步、配置LSE为…...
微服务SpringCloud Alibaba组件nacos教程【详解naocs基础使用、服务中心配置、集群配置,附有案例+示例代码】
一.Nacos教程 文章目录 一.Nacos教程1.1 Nacos简介1.2 nacos基本使用直接下载打包服务源码方式启动 1.3 创建nacos客服端1.4 nacos集群配置1.5 nacos配置中心 1.1 Nacos简介 nacos是spring cloud alibaba生态中非常重要的一个组件,它有两个作用: 1:注册…...
深度整理总结MySQL——Expalin指南(二)
Expalin指南(二 前言Extrano tables usedImpossible whereNo matching min/max rowUsing indexUsing index conditionUsing whereUsing join buffer (Block Nested Loop)Not existsUsing intersect(...)、Using union(...)和Using sort_union(...)Zero limitUsing filesortUsin…...
【机器学习】常见采样方法详解
在机器学习领域,数据采样(Sampling)是一项至关重要的技术。它不仅影响模型的训练效率,还直接关系到模型的性能与泛化能力。本文将从基础概念出发,逐步深入介绍机器学习中常见的采样方法,帮助读者全面理解并…...
Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案
1. 如何在 Kubernetes 中设置资源请求和限制? 资源请求确保容器有最小资源量(CPU/内存),而限制则强制容器消耗的最大资源量。这有助于高效资源分配并防止资源争用。 示例: resources:requests:memory: "256Mi&…...
Python自动化办公之Excel拆分
在日常办公中,我们经常需要将包含多个Sheet页的Excel文件拆分成多个独立的Excel文件。例如,当我们要把一份Excel表格发给各部门确认时,出于控制信息知悉范围、确保数据保密性等方面的考虑,每个部门仅需查看和确认与自己部门对应的…...
Mac上搭建宝塔环境并部署PHP项目
安装Docker Desktop》搭建Centos版本的宝塔环境》部署PHP项目 1. 下载Docker for mac 软件:https://www.docker.com/ 或使用终端命令:brew install --cask --appdir/Applications docker 2. 使用命令安装宝塔环境的centos7系统: docker pul…...
qt 控件的焦点事件
在 Qt 中,设置焦点策略是通过 QWidget 的 setFocusPolicy() 方法来实现的。焦点策略控制了一个控件何时和如何获取焦点。Qt 提供了几种常见的焦点策略,以帮助管理控件的焦点行为。 常见的焦点策略 Qt::NoFocus:控件不接受焦点。Qt::TabFocus&…...
深度学习_学习笔记
pandas Pandas 是一个强大的数据分析库,它封装和集成了多个其他库的功能,以便为用户提供更加便捷的数据处理能力。 pandas与csv 都可用于处理csv文件(注意csv文件不是excel文件) csv 是 Python 标准库的一部分,适合…...
如何在 Elasticsearch 中设置向量搜索 - 第二部分
作者:来自 Elastic Valentin Crettaz 了解如何在 Elasticsearch 中设置向量搜索并执行 k-NN 搜索。 本文是三篇系列文章中的第二篇,深入探讨了向量搜索(也称为语义搜索)的复杂性以及它在 Elasticsearch 中的实现方式。 第一部分重…...
leetcode 面试经典 150 题:跳跃游戏 II
链接跳跃游戏 II题序号45题型数组题解贪心算法难度中等熟练度✅✅✅ 题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums…...
C++20 新特性解析
1. 概念(Concepts) 概念是 C++20 引入的一项重要特性,它允许程序员定义类型约束,从而在编译时检查模板参数是否符合某些要求。概念提供了模板参数的限制,使得模板代码更加可读和易于维护。 示例代码: #include <iostream> #include <concepts>// 定义一个…...
vue不是内部或外部命令?
问题:当我们在使用脚手架创建项目之前,执行了npm i vue/cli -g或yarn global add vue/cli之后,再执行vue --version无法执行,vue不是内部或外部命令。 前几天在学vue时也是遇到了这个问题,现在来分享一下解决方法。 …...
C#中的Frm_Welcome.Instance.Show(),是什么意思
Frm_Welcome.Instance.Show() 是一种常见的单例模式(Singleton Pattern)实现方式,通常用于在应用程序中确保某个窗体(Form)只有一个实例,并通过该实例显示窗体。以下是对这段代码的详细解释: 代…...
k8s优雅操作pod容器组
k8s优雅操作pod容器组 回退备份 kubectl get deploy deployName -o yaml>>deployName-bak-date "%Y-%m-%d".yaml获取副本数 replicasecho | kubectl get -o template deploy/deployName --template{{.spec.replicas}}停止容器组 kubectl scale deployment …...
【LeetCode: 1760. 袋子里最少数目的球 + 二分】
🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...
动态规划LeetCode-416.分割等和子集
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] 和 [11] 。 示例 2&…...
kotlin-kapt
kotlin-kapt kotlin-kapt 是 Kotlin 的一个插件,专门用于处理注解处理器(Annotation Processor)。以下是对该插件的详细解释和指南: kotlin-kapt 是什么? kotlin-kapt 是 Kotlin 官方提供的一个插件,用于在…...
网络安全技术复习总结
1|0第一章 概论 1.网络安全发展阶段包括四个阶段:通信安全、计算机安全、网络安全、网络空间安全。 2.2017年6月1日,我国第一部全面规范网络空间安全的基础性法律《中华人民共和国网络安全法》正式实施。 3.2021年 6月10日,《中华人民共和…...