块编码
块编码(block coding)是将信源输出序列按固定长度 分块,对每个块整体进行编码的方法。与逐个符号编码不同,块编码的核心思想是通过扩展信源(即考虑信源的 次扩展),打破单个符号整数码长的限制,通过将概率进一步细分来减少因取整造成的额外开销。
对单个符号进行编码时,由于码长必须为整数,平均码长 与信源熵 之间最多存在 1 bit 的差距。但当对 个符号组成的块进行编码时,每个符号的平均码长可以满足:
其中 是 长序列块编码的总平均码长。随着块长度 的增大,取整造成的额外开销 可以无限趋近于零。这背后的直观原因是:将多个符号捆绑在一起后,原本被截断的概率细节得以保留——长序列的概率分布比单个符号的概率分布有更多可能的概率值,从而让整数码长的取整误差被分摊到多个符号上。例如,若某符号概率 ,其单符号最优整数码长为 2(因为 ),浪费了约 0.26 bit;但将两个符号捆绑后,序列 的概率为 0.09,其最优码长为 ,每个符号仅浪费约 0.09 bit。
在实际应用中,块编码面临计算复杂度随块长 指数增长的问题。当 较大时,可能的信源序列数量 极其庞大,直接为每个序列分配码字在计算上不可行。因此实际系统中往往采用算术编码(arithmetic coding)或 Lempel-Ziv 算法来近似实现块编码的效果,在保持较高压缩率的同时避免指数级增长的复杂度。