日期:2014-05-18  浏览次数:20755 次

帮忙解释一段编码问题
从网上看到的,搜了一下,全是一样的,没找到一个不一样的解释 -_-!
HTML code
分类编码算法

问题就出在前面我们采用了顺序编码,这是一种最简单的编码方法。大家知道,简单并不意味着效率。实际上,编码科学是程序员必修的课程。下面,我们通过设计一种编码算法,使分类的编号ID中同时包含了其父类的信息。一个五级分类的例子如下:

此例中,用32(4+7+7+7+7)位整数来编码,其中,第一级分类有4位,可以表达16种分类。第二级到第五级分类分别有7位,可以表达128个子分类。

显然,如果我们得到一个编码为 1092787200 的分类,我们就知道:由于其编码为

0100 0001001 0001010 0111000 0000000

所以它是第四级分类。其父类的二进制编码是0100 0001001 0001010 0000000 0000000,十进制编号为1092780032。依次我们还可以知道,其父类的父类编码是0100 0001001 0000000 0000000 0000000,其父类的父类的父类编码是0100 0000000 0000000 0000000 0000000。

现在我们在一般的情况下来讨论类别编码问题。设类别的层次为k,第i层的编码位数为Ni, 那么总的编码位数为N(N1+N2+..+Nk)。我们就得到任何一个类别的编码形式如下:

2^(N-(N1+N2+…+Ni))*j + 父类编码

其中,i表示第i层,j表示当前层的第j个分类。这样我们就把任何分类的编码分成了两个部分,其中一部分是它的层编码,一部分是它的父类编码。由下面公式定一的k个编码我们称为特征码:(因为i可以取k个值,所以有k个)

2^N-2^(N-(N1+N2+…+Ni))

对于任何给定的类别ID,如果我们把ID和k个特征码“相与”,得到的非0编码,就是其所有父类的编码! 


其中的 得到任何一个类别的编码形式 公式
HTML code
2^(N-(N1+N2+…+Ni))*j + 父类编码

和特征码公式
HTML code
2^N-2^(N-(N1+N2+…+Ni))

没看明白,请大家帮我解释一下吧,谢谢!
越详细越好,本人菜鸟。

------解决方案--------------------
十进制:1092787200 类 二进制:0100 0001001 0001010 0111000 0000000
十进制:1092780032 父类 二进制:0100 0001001 0001010 0000000 0000000

任何一个类别的编码形式 公式:

2^(N-(N1+N2+…+Ni))*j

===>2^(32-(4+7+7+7))* 111000 

===>2^7 * 56
 
===>128*56

===>7168

===>1092780032 + 7168 = 1092787200(0100 0001001 0001010 0111000 0000000)