我希望读者能够意识到shannon的信息理论,它指出与概率为p(a)的事件a相关的信息内容是-log(p(a))。通俗地说,如果您需要表示0-7范围内的数字,那么您至少需要-log(1/8)= log(8)(其中base为2)即3位。我需要帮助来分析这种编程技术来压缩数组
假设有一个范围从0到255的整数数组,而不是将数组存储为8位数字,我会先按照升序对数组进行排序(保留一个课程备份)。而不是编码每个数组元素作为一个8位整数我会输出其排序数组中的位置。现在的问题是让解码器或接收器知道这个有序的数组。我将输出第一个(最小)整数值作为一个8位数字,然后将增加到这个数字,并很快。首先是所有排序后的数组,即元素的顺序,即位置值。
例:原始阵列 - > 231,3,45,0,23,32,78
排序阵列 - > 0,3,23,32,45,78,231
所述经编码的信息是0(排序数组的第一个元素为8位数),然后是3(这是增量超过0),然后是20,然后是9,然后是13,然后是33,然后是153.
发送第一个数字和连续的delta后,顺序,即因为有7个整数,这里我需要一个三位数字的顺序,3(0在原始数组中的位置),然后是1(3的位置),然后是4(23的位置),然后是5(32的位置)然后2(位置45),然后6(78的位置),然后0(231的位置)。
即现在的位置的值是3,1,4,5,2,6,0
分析,看是否该方案将压缩:
第一号 - > 8位(它实际上可能因为它是最小的,所以需要更少的位)
接下来的6位数 - > 5位(问题是我们可以用5位编码0,3,20,9,13,但不是我们可能需要编码的33和153作为31(最多5位))
7位,每个3位 - > 21位
total-> 8 + 6 * 5 + 21 = 59。这比我们需要编码7个8位数据所需的56位要多,而且我们已经实现了扩展而不是压缩,并且由于我们没有能够代表一些大数目,所以我们的方案是有损的。
让我们给这个方案增加一些复杂性。
我会将第一个0编码为8位数字,紧接着是最后一个数字231的代码。然后,我将发送代码给3,下一个增量为0,然后编码为153,减少231,然后是20,然后是33, 9,13
即我在不同的命令 - 的>代替0,3,20,9,13,33,153已将我会3,153,20,33,9,13
送什么我得到这是动态范围的连续减少,你观察到我们已经发送了0,然后是231,然后是3,然后是153,这时值的范围减少了,我的意思是下一个增量为3,即20将不能大于第二个数字,即78,并且20号的数字不能超过75(如果它是那么的话) d数(3 + 76(说))将大于78明显违反我们的排序假设。
如果你明白这个想法到现在我有一个进一步的改进方案,以使用二进制搜索的想法,以进一步降低动态范围,并把这种技术类固醇。 这里是排序后的数组
0,3,23,32,45,78,231
观察到排序后的数组是具有7号和中间的一个是32。所以,现在我们将编码本32与8位,然后我们将发送三角洲预先订购。即32之后的下一个数字将是3,其将被编码为29(即32-3),并且下一个数字将被编码为46(78-32),然后0编码为3(3-0),然后23编码为20 (23-3),然后45编码为33(78-45),然后编码为153的最后一个231(231-78)。
如果你现在看到的,我们可以决定多少位为每个数字逐情形使用上的情况。我们将发送排序的数组为32(范围0-255所以8位),29(范围0-32所以6位),46(范围32-255所以8位),3(范围0-32所以8位),3(范围0-32所以6位) 3(所以2位),20(范围3-32所以5位),33(范围32-78所以6位),153(范围78-255所以8位)
所以完全8 + 6 + 8 + 2 + 5 + 6 + 8 = 43这是非有损的并且比我们的初始估计值38(8比特+5 * 6比特)多,所以这增加了三个比特的7个位置值,每个总共43 + 21 = 64更多我们的计划还在扩大。
我们可以做这是21位的位置编号什么改善。由于每次我们发送位置信息,如果我们有7个位置发送,则位数减1,那么位数是log(7)+ log(6)+ log(5)....这就是log(事实(7))位,其中所有的对数是基体2
观察到我已经使用式日志(一)+日志(b)=日志(AB)
这是等于其与添加时12.299 43等于55.299,比56低一点。但这不实际。我们至少需要3(范围7)+3(范围6)+3(范围5)+2(范围4)+2(范围3)+1(范围2)+0(范围1)= 14,有43个给出了57个扩展。
这一工作的目的是实现在数据大小至少1位的减少。如果我们将56位压缩成55而没有任何关于数据的假设,那么我们可以将55位的输出再次压缩到54位,并且很快。这看起来不可能,这个想法与永久机器类似。现在的任务是查看阻止我们压缩更多的东西。
我需要分析一个更大的数组的例子,看看排序数组的43位是否可以小于43.还有什么是将数组分割成许多部分和分别编码每个部分的优点。另一个目标是找出计算表示排序数组所需位数的公式。即给定的数组元素的数组大小和范围如何找到号码等43.
允许再次借此3,1,4,5,2,6,0作为排序的数组,并观察该序列中的一个50个从0到6的7个数字的排列。我们可以将其表示为13位数(理论表明为12.299)。
我需要知道的是,可以更压缩该阵列。
是的,它可以更多地编制它。由于序列[3,1,4,5,2,6,0]是集合{[3,1,4,5,2,6,0]}的唯一元素,我们需要log_2(1)= 0(是,零)位来表示它。那就是如果我们知道我们的数组是当然的一个元素。 – 2012-04-07 09:52:27
长问题! – 2012-04-07 10:09:21
我曾经认为这种方法除了可以将紧凑表示法用作密码学中的新技术。我曾认为13位位置值指示器可以被认为是一个安全通信的秘密密钥,没有这个密钥解码器/解密将不会正确发生。 – 2012-04-27 11:10:43