Grefenstette编码的解码问题
比如我有从1到12共12个数,他们的访问次序如下:
10 9 12 11 3 4 1 2 8 7 5 6
则其Grefenstette编码为:
10 9 10 9 3 3 1 1 4 3 1 1
现在的问题是如何从Grefenstette的编码得到原始的访问次序?
即如何从
10 9 10 9 3 3 1 1 4 3 1 1
得到
10 9 12 11 3 4 1 2 8 7 5 6
?
[解决办法]
得到原始的访问次序不难;
但想不出很好的方法;
#include <stdio.h>
int main()
{
int i,j;
int a[12]={10 ,9 ,10 ,9 ,3 ,3 ,1 ,1 ,4 ,3 ,1 ,1 };
for (i=12-1;i>=0 ;i-- )
{
for (j=i-1;j>=0 ;j-- )
{
if (a[j]<=a[i]) a[i]++;
}
}
for (i=0;i<12 ;i++ ) printf("%3d",a[i]);
return 0;
}