公司新闻

连在一起的指令文字怎样找最低成本切分:状态推演第18例

2026-11-12 1

把一串没有分隔符的文字切成已知指令时,最长前缀未必让整串成本最低。记录每个前缀的最佳结果,可以比较多种切分并在无法解释的后缀处明确报无解。

先把规则写清楚

字典给每个合法片段一个正整数成本。状态dp位置i表示前i个字符的最低总成本,从零开始;尝试所有能在i之后匹配的片段,并更新结束位置。成本相同优先片段更少,再按完整片段序列的字母顺序确定唯一结果。

本例输入与推演结果

输入串ACBCACABCA;字典及成本{'A': 4, 'B': 7, 'C': 5, 'AB': 3, 'BC': 9, 'CA': 8, 'ABC': 8, 'BCA': 9, 'AA': 5, 'CC': 9, 'CAB': 7}。

前缀长度 | 前缀 | 最低成本、片段数、片段序列 0 | 空串 | (0, 0, ()) 1 | A | (4, 1, ('A',)) 2 | AC | (9, 2, ('A', 'C')) 3 | ACB | (16, 3, ('A', 'C', 'B')) 4 | ACBC | (18, 3, ('A', 'C', 'BC')) 5 | ACBCA | (18, 3, ('A', 'C', 'BCA')) 6 | ACBCAC | (23, 4, ('A', 'C', 'BCA', 'C')) 7 | ACBCACA | (26, 4, ('A', 'C', 'BCA', 'CA')) 8 | ACBCACAB | (25, 4, ('A', 'C', 'BCA', 'CAB')) 9 | ACBCACABC | (30, 5, ('A', 'C', 'BCA', 'CAB', 'C')) 10 | ACBCACABCA | (33, 5, ('A', 'C', 'BCA', 'CAB', 'CA'))

这里的编号只用来辨认本例中的对象,不能当成另一份记录里的固定身份。阅读表格时先找到输入,再顺着运算顺序对照输出;空列表、零值和不存在的结果有不同含义,不能混用。表中分数保留精确值,小数显示仅为阅读方便。

怎样自己复核

每个结果中的片段连接后必须恰好等于输入串,不能漏字、多字或交换顺序。不可达位置标为空,而不是成本零。表中的前缀最佳解只服务于自己的结束位置,不能把不同位置的状态直接拿来比较长短。

从最终位置沿片段重建完整解释,再把所有成本相加核对。练习时加入一个字典不包含的字符,应得到无解而不是静默丢弃它。若成本依赖前一个片段,就要把前一片段的信息加入状态,当前只按位置记录的表不再足够。

适用范围

这是一种明确给定的文字切分模型,没有语义推断、拼写纠错或上下文语法。成本不是概率,贪心选择最长片段或最便宜的单个片段都未必最优。

本例是一套可复现的游戏机制练习,不依赖具体品牌或某个软件的默认设置。修改任何边界约定、输入参数或操作顺序后,应重新推演并保存中间状态。发现差异时先定位第一处不一致,再判断是规则不同还是计算错误,不要只把最终答案调整到看起来相同。