离散无记忆信源发出a,b两种符合,若信源输出的序列为babbabbbbabbabbb,对其进行LZ编码
时间: 2023-06-10 14:06:50 浏览: 182
LZ编码是一种无损数据压缩算法,可以将重复出现的字符串用更短的编码表示。对于给定的序列babbabbbbabbabbb,LZ编码的过程如下:
1. 初始化字典,将所有单个字符添加到字典中:{a: 1, b: 2}。
2. 从左到右扫描序列,找到最长的重复字符串。在这个例子中,最长的重复字符串是"bb",它在位置2和位置5开始,长度为2。因此,我们将其替换为字典中的第3个条目,即"2,2",表示从位置2开始的长度为2的字符串是字典中的第2个条目。
3. 继续扫描序列,找到下一个重复字符串。在这个例子中,下一个重复字符串是"bb",它在位置7和位置9开始,长度为2。因此,我们将其替换为字典中的第4个条目,即"2,2",表示从位置7开始的长度为2的字符串是字典中的第2个条目。
4. 继续扫描序列,找到下一个重复字符串。在这个例子中,下一个重复字符串是"ab",它在位置12和位置14开始,长度为2。因此,我们将其替换为字典中的第5个条目,即"1,2",表示从位置12开始的长度为2的字符串是字典中的第1个条目。
5. 继续扫描序列,找到下一个重复字符串。在这个例子中,下一个重复字符串是"bb",它在位置15和位置17开始,长度为2。因此,我们将其替换为字典中的第6个条目,即"2,2",表示从位置15开始的长度为2的字符串是字典中的第2个条目。
6. 最后的编码结果为:2,1,2,1,2,3,3,2,4,2,5,2,6,2。
这个编码结果可以用来还原原始序列,只需要按照编码结果的顺序将每个条目替换为对应的字符串即可。
相关问题
离散无记忆信源发出a,b两种符号,其概率分布为1/4,3/4.若信源输出的序列为babba,对其进行算术编码并计算编码效率
首先,我们需要计算这个序列的概率。根据独立性假设,整个序列的概率可以通过各个符号的概率相乘得出:
P(babba) = P(b) × P(a) × P(b) × P(b) × P(a) = (3/4) × (1/4) × (3/4) × (3/4) × (1/4) = 27/1024
接下来,我们可以使用算术编码来对这个序列进行编码。算术编码将整个序列编码为一个小数,范围在0到1之间。因为编码后的小数越长,它所代表的信息就越多,所以编码效率可以通过编码后的小数的位数来衡量。
具体实现步骤如下:
1. 初始化编码范围为[0,1)。
2. 对于序列中的每一个符号,将编码范围按照符号的概率进行等比例分割。例如,对于第一个符号b,如果它的概率是3/4,那么将编码范围分割为[0,3/4)和[3/4,1)两个部分,其中第一个部分对应的是b这个符号。
3. 重复步骤2,直到处理完整个序列。
4. 最后,编码结果为编码范围的中点。
对于这个序列,我们可以按照如下方式进行编码:
1. 初始化编码范围为[0,1),即0 <= 编码结果 < 1。
2. 对于第一个符号b,将编码范围分割为[0,3/4)和[3/4,1),其中第一个部分对应的是b这个符号。因此,编码范围更新为[0,3/4),编码结果取中点为0.375。
3. 对于第二个符号a,将编码范围分割为[0,1/4)和[1/4,3/4),其中第二个部分对应的是a这个符号。因此,编码范围更新为[1/4,3/4),编码结果取中点为0.5。
4. 对于第三个符号b,将编码范围分割为[1/4,5/16)和[5/16,3/4),其中第一个部分对应的是b这个符号。因此,编码范围更新为[1/4,5/16),编码结果取中点为0.3125。
5. 对于第四个符号b,将编码范围分割为[1/4,35/64)和[35/64,3/4),其中第一个部分对应的是b这个符号。因此,编码范围更新为[1/4,35/64),编码结果取中点为0.3984375。
6. 对于第五个符号a,将编码范围分割为[1/4,9/64)和[9/64,35/64),其中第二个部分对应的是a这个符号。因此,编码范围更新为[9/64,35/64),编码结果取中点为0.484375。
因此,整个序列的编码结果为0.375 × 0.5 × 0.3125 × 0.3984375 × 0.484375 = 0.0072345733642578125。
编码效率可以用编码结果的位数来衡量。将编码结果转化为二进制后,位数为22位。因此,编码效率为22/5 ≈ 4.4位/符号。
5-16离散无记忆信源发出a、b两种符号,其概率分布为1/4、3/4。若信源输出的序列为babba,对其进行算术编码并计算编码效率。
根据算术编码的方法,首先需要计算出整个序列的概率。假设a的编码区间为[0,1/4),b的编码区间为[1/4,1),则babba的编码区间为:
[1/4 * (3/4)^2 * 1/4 * (3/4)^2, 1/4 * (3/4)^2 * 1/4 * (3/4)^2 + 1/4 * (3/4)^2 * 3/4 * (1/4) * (3/4)^2 + 1/4 * (3/4)^2 * 3/4 * (1/4) * (3/4) + 1/4 * (3/4) * (1/4) * (3/4) + 1/4 * (1/4) * (3/4)]
= [0.01397705, 0.01446533)
因此,对于这个序列的算术编码,只需要输出这个编码区间的任意一个数即可。假设选择编码区间的中间值,则编码结果为0.01422119。
编码效率可以定义为每个符号所需的平均比特数。根据算术编码的性质,对于一个概率为p的符号,它需要的比特数为-log2(p)。因此,对于本题中的信源,编码效率为:
(1/4)*log2(4) + (3/4)*log2(4/3) = 0.81128
因此,平均每个符号需要0.81128比特的编码长度。
阅读全文