A[0]的编码为0;
A[i]的编码为:在 A[0],A[1],…A[i-1]中比A[i]的值小的个数(i =1,2,…… N-1)
因此得到A的编码为:B=(0,0,0,3,1,2)
要求程序实现:
(1) 译码:给出数组A后,求出其编码;
(2) 破译:给出数组A的编码后,求出A中的原数据。
(1) 译码 是简单的.
用个for循环就搞定了.
(2) 有些难,想了一下,发现有个规律.
我是从0找到N
首先找0
让我们来看个例子, 原码 4 3 0 5 1 2 1 4 3 0 5 2 5 4 3 2 1 0
编码 0 0 0 3 1 2 0 1 1 0 4 2 0 0 0 0 0 0
后一个0就是我们要找的0的位置啊.对不对,因为原码0在前面的话后面的数的译码不可能是0 这样就找到0了.
然后找1
看译码以0为分界,如果在0的后面可以找到1那么说明白,1最右边的一个1 是1的位置.原因同上.如果又说在0的后面没有1的话说明1在0的左边.这样的话在0的左边的译码中最后一个0译码就是1了.这样就找到1了.这里要说有时候0的左右边都有1那么只要确定在0的后面有1的话原码1就一定在0后面.
我这样说你能懂吗?
我也是刚才研究的,有什么我们商量一下..
(1) 译码 是简单的.
用个for循环就搞定了.
(2) 有些难,想了一下,发现有个规律.
我是从0找到N
首先找0
让我们来看个例子, 原码 4 3 0 5 1 2 1 4 3 0 5 2 5 4 3 2 1 0
编码 0 0 0 3 1 2 0 1 1 0 4 2 0 0 0 0 0 0
后一个0就是我们要找的0的位置啊.对不对,因为原码0在前面的话后面的数的译码不可能是0 这样就找到0了.
然后找1
看译码以0为分界,如果在0的后面可以找到1那么说明白,1最右边的一个1 是1的位置.原因同上.如果又说在0的后面没有1的话说明1在0的左边.这样的话在0的左边的译码中最后一个0译码就是1了.这样就找到1了.这里要说有时候0的左右边都有1那么只要确定在0的后面有1的话原码1就一定在0后面.
我这样说你能懂吗?
我也是刚才研究的,有什么我们商量一下..
很好,我回去研究下,谢谢楼上的兄弟!