编码:将不同的实数表示成不同的0,1二进制串表示就完成了编码。这个是比较简单的。
解码:将编码后的二进制串转换为我们理解的十进制串,所以我们需要的是y = f (x)的逆映射,也就是将二进制转化为十进制并映射到某个区间,也就是解码。

例如:十进制与二进制相互映射的关系表示如下:

对于一个长度为10的二进制串,如[0,0,0,1,0,0,0,0,0,1],将其映射到[1,3]这个区间的步骤为:

  1. 首先将二进制数按权展开:BIOS二进制解析 二进制解码怎么解_BIOS二进制解析
  2. 然后将其压缩到区间[0,1]:BIOS二进制解析 二进制解码怎么解_BIOS二进制解析_02
  3. 最后将[0,1]区间的数映射到我们想要的区间[1,3]:BIOS二进制解析 二进制解码怎么解_BIOS二进制解析_03,可以看出规律为:num * (high-low)+low 其中num为[0,1]之间的数对应此处的0.0635386,high和low表示我们想要映射的区间的上边界和下边界,分别对应此处的3和1。

分析:
上述步骤包含了编码与解码的过程:首先我们将65编码为一个具有10位长度的二进制数,然后将其压缩到区间[0, 1],最后将[0, 1]区间的数映射到[1, 3]这个范围,即编码之后求一个逆映射将这个二进制串映射到[-3,3]区间,这个过程也就是解码。


关于编码:这里有个问题,即编码为了10位长度的二进制数,如果用更长的二进制数编码,又有什么变化呢?

10位二进制可以表示BIOS二进制解析 二进制解码怎么解_解码_04种不同的状态,可以看成是在最后要转化为的十进制区间 [ 1 , 3 ] 切分BIOS二进制解析 二进制解码怎么解_解码_04个点,每个点对应的数据对应着一个二进制编码。可看出,如果我们增加二进制串的长度,那么我们对区间的切分可以更加精细,每个二进制编码对应的切分的点位置也就更加精确,意即对应的十进制数也更加精确。

例如:
10位的二进制编码1111111111(全1),将其按权展开为1023,最后映射到[-3, 3]区间时为3,而1111111110(前面9个1)按权展开为1022,BIOS二进制解析 二进制解码怎么解_二进制数_06,BIOS二进制解析 二进制解码怎么解_二进制数_07。如果编码为12位二进制,111111111111(12个1)最后转化为3,而111111111110(前面11个1)按权展开为4094,BIOS二进制解析 二进制解码怎么解_二进制数_08BIOS二进制解析 二进制解码怎么解_二进制与十进制_09

3−2.994134=0.005866;3 − 2.998534 = 0.001466
所以用10位二进制编码划分区间后,每个二进制状态改变对应的实数大约改变0.005866,而用12位二进制编码这个数字下降到0.001466,所以DNA长度越长,解码为10进制的实数越精确。