浅谈“随机按键指定串”问题
Preface主要作为培训时该类问题的总结。Introduction这类问题的主要形式是有m mm个不同的字符按键进行n nn次或无限次随机敲打。询问n nn个字符中出现长度为k kk的指定串S SS的概率。或求无限次敲打中S SS出现位置的期望。首先这个问题是与 KMP 有关的我们知道B o r d e r \rm{Border}Border串是原串的前后缀那么从感性的角度理解B o r d e r \rm{Border}Border越长S SS越容易在匹配失败时恢复更长的前缀使得出现概率更大、位置期望更靠前。对于问题“n nn个字符中出现长度为k kk的指定串S SS的概率”题目Mivik 的标题这个问题实际上很古老B o r d e r \rm{Border}Border理论中有B o r d e r \rm{Border}Border串可分为O ( log ⁡ k ) O(\log k)O(logk)个等差数列的描述根据推出的 DP 式子使用该理论与半在线卷积、高斯消元、多项式求逆、生成函数等操作便可以有效地求出。在该题目的题解区已有丰富的解答这里不多赘言。而对于问题“无限次敲打中S SS出现位置的期望”理论上可以运用上面的结论在无限求和中使用泰勒等多项式合并的方法。但实际上对于无限问题如果是收敛的期望递推式并不会过于丑陋。记f i f_ifi​为S SS第i ii位到S SS最后一个字符出现的期望根据 KMP 自动机有这么一个函数δ ( i , c ) { i 1 , c s i 1 δ ( π i , c ) , e l s e \delta(i,c)\begin{cases} i1, cs_{i1} \\ \delta(\pi_i,c), else \end{cases}δ(i,c){i1,δ(πi​,c),​csi1​else​其中π i \pi_iπi​即位置i ii的B o r d e r \rm{Border}Border长度。所以把f i f_ifi​拆分可能的转移易得f i 1 m ∑ c f δ ( i , c ) 1 f_i\frac{1}{m}\sum_{c} f_{\delta(i,c)}1fi​m1​c∑​fδ(i,c)​1我们对比f π i f_{\pi_i}fπi​​f π i 1 m ∑ c f δ ( π i , c ) 1 f_{\pi_i}\frac{1}{m}\sum_{c} f_{\delta(\pi_i,c)}1fπi​​m1​c∑​fδ(πi​,c)​1做一次容斥f i f π i − 1 m f δ ( π i , s i 1 ) 1 m f i 1 f_if_{\pi_i}-\frac{1}{m}f_{\delta(\pi_i,s_{i1})}\frac{1}{m}f_{i1}fi​fπi​​−m1​fδ(πi​,si1​)​m1​fi1​f i f_ifi​作为期望的定义是倒着走的我们为了方便处理设g i f i − f 0 g_if_i-f_0gi​fi​−f0​那么显然g 0 0 g_00g0​0。而由前面f 0 1 m ∑ c f δ ( 0 , c ) 1 1 m f 1 m − 1 m f 0 1 f_0\frac{1}{m}\sum_{c} f_{\delta(0,c)}1\frac{1}{m}f_1\frac{m-1}{m}f_01f0​m1​c∑​fδ(0,c)​1m1​f1​mm−1​f0​1化简记f 1 − f 0 − m f_1-f_0-mf1​−f0​−m也就是g 1 − m g_1-mg1​−m。把g i g_igi​代入容斥后的式子g i f 0 g π i f 0 − 1 m ( g δ ( π i , s i 1 ) f 0 ) 1 m ( g i 1 f 0 ) g_if_0g_{\pi_i}f_0-\frac{1}{m}(g_{\delta(\pi_i,s_{i1})}f_0)\frac{1}{m}(g_{i1}f_0)gi​f0​gπi​​f0​−m1​(gδ(πi​,si1​)​f0​)m1​(gi1​f0​)不难发现f 0 f_0f0​可以消掉g i 1 m ( g i − g π i ) g δ ( π i , s i 1 ) g_{i1}m(g_i-g_{\pi_i})g_{\delta(\pi_i,s_{i1})}gi1​m(gi​−gπi​​)gδ(πi​,si1​)​B o r d e r \rm{Border}Border串预处理δ \deltaδ函数是O ( log ⁡ k ) O(\log k)O(logk)的于是这就是一个普通的O ( n log ⁡ k ) O(n \log k)O(nlogk)递推式子。我们要的位置期望就是f 0 f_0f0​也就是f k − g k f_k-g_kfk​−gk​f k f_kfk​已经代表S SS的最后一个位置了敲打次数期望为0 00则f 0 − g k f_0-g_kf0​−gk​。这样我们避免了复杂的数学推演只使用了简单的期望递推本问题就此告段落。一个古老的类似问题[CTSC2006] 歌唱王国希望本文章对你有帮助。

相关新闻

LangChain技能全景:从基础连接到生产级智能体部署全解析

LangChain技能全景:从基础连接到生产级智能体部署全解析

1. 项目概述:LangChain技能全景图 最近和不少同行交流,发现一个挺有意思的现象:大家聊起LangChain,要么是“我搭了个简单的RAG应用”,要么是“我用LangChain调了调API”,但再往深了问,比如怎么设…

2026/9/25 5:17:53 阅读更多 →
虚拟电厂优化调度:从MATLAB到GAMS的技术迁移与实践

虚拟电厂优化调度:从MATLAB到GAMS的技术迁移与实践

1. 虚拟电厂优化调度:从MATLAB到GAMS的技术迁移背景虚拟电厂(Virtual Power Plant, VPP)作为能源互联网的核心技术载体,正在重塑传统电力系统的运行范式。我最初接触这个概念是在2018年参与某微电网项目时,当时用MATLA…

2026/9/24 22:51:59 阅读更多 →
药物研发失败率高达90%?NAM新技术如何破解临床转化鸿沟

药物研发失败率高达90%?NAM新技术如何破解临床转化鸿沟

1. 一个被忽视的“常识”:药物研发的失败率到底有多高?“九死一生”这个词,用来形容创业或者高风险投资,大家可能觉得已经够残酷了。但在现代药物研发领域,这个成语的残酷程度甚至还不够格。一个更接近现实的描述是“百…

2026/9/24 23:38:51 阅读更多 →

最新新闻

图像标注工具怎么选?精灵标注助手实战指南

图像标注工具怎么选?精灵标注助手实战指南

做人工智能项目的人,多半绕不开一个活儿:给图片打标签。无论是目标检测、图像分割,还是遥感地物识别,模型的性能上限其实在标注阶段就已经被决定了。但很多人第一次接触标注时,习惯用电脑自带的画图工具去拉框&#xf…

2026/9/25 12:39:15 阅读更多 →
loop 最佳实践:从 /goal 到 /loop,用 TaoToken 统一 Key 让 Agent 工作流循环起来

loop 最佳实践:从 /goal 到 /loop,用 TaoToken 统一 Key 让 Agent 工作流循环起来

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 12:39:15 阅读更多 →
OpenClaw 人机共生记忆体系上线:用 TaoToken 统一 Key 打通专属智能体记忆割裂

OpenClaw 人机共生记忆体系上线:用 TaoToken 统一 Key 打通专属智能体记忆割裂

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 12:39:15 阅读更多 →
M3 Ultra实测MiniMax H3:MLX量化与ComfyUI工作流避坑指南

M3 Ultra实测MiniMax H3:MLX量化与ComfyUI工作流避坑指南

Mac Studio(M3 Ultra)到货那天,公司测试机的“登机口”排了一整天队。大家盯的不是新模具、不是风扇噪音,而是同一件事:MiniMax H3 到底能不能在这台机器上顺顺利利本地跑起来。先说结论:能跑,而…

2026/9/25 12:39:15 阅读更多 →
Atlas 300V AI推理加速卡部署YOLO实战全攻略

Atlas 300V AI推理加速卡部署YOLO实战全攻略

身边的朋友最近频繁问我一个词:atlas。有人把它当成普通显卡,有人问它能不能跑YOLO,还有人直接抛出一句“atlas 300v 24g 是运算加速卡吗”来让我给个准话。我干脆把这阵子把模型从GPU迁移到Atlas上的完整经历整理成一篇长文,一次…

2026/9/25 12:38:14 阅读更多 →
Atlas 300V部署YOLOv5全流程:从环境配置到推理调优

Atlas 300V部署YOLOv5全流程:从环境配置到推理调优

最近不少朋友都在私信问我同一个问题:Atlas 300V 24G到底是不是一张能跑的“运算加速卡”?还有人问它能不能拿来部署YOLO,效果怎么样。我的回答很简单:是AI推理加速卡,而且是专门干这个的;我最近刚把YOLOv5…

2026/9/25 12:38:14 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →