用逐步缩小的数值区间怎样编码一串符号:规则验证第26组
符号序列可以映射到一个越来越小的数值区间。只要编码端和解码端使用相同的符号比例及边界规则,区间内的某个数值就能按顺序还原出已知长度的原文。
本例采用的规则
本例符号为A、B、C,比例由正整数频数决定,初始区间为零到一的左闭右开区间。每一步按累计比例把当前区间分成三段,再保留当前符号对应的一段。最终选一段完全落在结果区间内的二进制等宽小区间,输出它的前缀位串。
独立输入与结果
字母A、B、C频数依次为[3, 1, 4],原文BCBCAACA,长度八。
处理符号 | 保留的左闭右开区间 B | [3/8,1/2) C | [7/16,1/2) B | [59/128,15/32) C | [119/256,15/32) A | [119/256,955/2048) A | [119/256,7625/16384) C | [15241/32768,7625/16384) A | [15241/32768,121955/262144) 最终宽度27/262144;二进制前缀01110111000101,长度14位。 它代表的小区间[7621/16384,3811/8192),解码取中点15243/32768。
表中的编号仅用于区分当前案例里的对象,不能与数值大小或另一份记录中的身份混淆。先核对输入、单位和边界约定,再跟随过程检查输出。空列表、不存在和数值零各有不同含义,分数则保留精确形式便于复算。
检查与练习
解码时取该小区间的中点,用相同比例反复判断落在哪一段,并重置到选中子区间。符号数量由题目给出,不能仅靠数值无限解码。每步区间宽度应乘上该符号比例,最终宽度等于所有比例的乘积。
保留每次上下界,核对下一个区间包含于上一个。上界不包含、下界包含的约定必须一致,边界恰好相等时尤其重要。选择的是完整二进制小区间都在目标范围内,而不只是某一个端点碰巧在里面,这样该前缀代表的后续数值才保持一致。
结论适用范围
这是精确分数演示,不处理有限位整数实现中的重规范化、进位或数据封装。模型频数也需要由双方事先知道,不能把传递模型与原文长度的额外成本忽略后,宣称对所有输入都能节省空间。
这是一份可重复演算的游戏知识记录,结论只对写明的输入与规则成立。练习时可以先改变一个条件,再对照中间记录寻找变化从哪一步开始。若结果不同,应先确认操作顺序和边界定义,而不是只改最后一个数字;原始输入与完整过程应一起保留。