• shouye@j909.vip
  • 深圳市龙华区龙华街道三联社区三联创业路19号弓村新城商业中心(汇海广场)C座20层01-03号
  • 17937667601

新闻中心

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

2026-11-12

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

先把规则写清楚

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

本例输入与推演结果

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

前缀长度 | 前缀 | 最低成本、片段数、片段序列 0 | 空串 | (0, 0, ()) 1 | B | (9, 1, ('B',)) 2 | BC | (2, 1, ('BC',)) 3 | BCC | (9, 2, ('BC', 'C')) 4 | BCCC | (10, 2, ('BC', 'CC')) 5 | BCCCA | (11, 3, ('BC', 'C', 'CA')) 6 | BCCCAZ | 不可达 7 | BCCCAZB | 不可达 8 | BCCCAZBC | 不可达 9 | BCCCAZBCA | 不可达 10 | BCCCAZBCAB | 不可达 11 | BCCCAZBCABC | 不可达 12 | BCCCAZBCABCA | 不可达

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

怎样自己复核

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

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

适用范围

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

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