居然有那么多人组团来这里跌倒 也不知道是哪家的包包 居然能塞下那么多工控模块 我不过是控制个42电机 说实在的 就算皇帝 有时候也会只喝一碗粥吧 感觉都是鸡同鸭讲
抛开无效沟通 今天尝试看看格雷码是否能用到地址120上的三进制编码上 虽然它和另一种编码不同 (那种具备滚动性 基本上就是2345601234这样的数据 应该可以用来纠错)
我原本的打算是 对三进制先找到一个排序 使得相邻数字 其步进区别只要一步 或者最少的部数 我这里1表示前进 2表示后退 0表示不动 比如 (1,1,0,1)和(1,1,2,1)就只有一步差距 但是和(2,1,0,1)就从前进变成后退 差了两步 ... 另外再找个二进制的格雷编码 作为前面排序的索引 ... 总之 尽量使得 编码后 步数只差一步的 位上也只有一个位不同
因为数量不是二的整数幂 甚至是个奇数(81) 而且三进制的要求并不等同格雷码 常规3进制格雷码(先不考虑前进后退 就认为0后退 1不动 2前进) 是循环的 从2到0认为是一步 但我这里认为是两步 所以我采用计算机写个perl脚本 来个深度搜索 硬找硬算 以为最好有几个数字之间有最多两步误差 就满足了
没想到居然存在完美解 得到一张表 相邻之间只相差一步
0,1,4,3,5,2,8,6,7,16,15,17,11,9,10,13,12,14,41,39,40,
37,36,38,44,42,43,34,33,35,29,27,28,31,30,32,50,48,
49,46,45,47,53,51,52,25,24,26,20,18,19,22,21,23,77,
75,76,73,72,74,80,78,79,61,60,62,56,54,55,58,57,59,
68,66,67,64,63,65,71,69,70
然后是二进制格雷码 因为不是2个整数次幂 所以网上也没有生成算法 于是我用0-63的格雷码 0-15的格雷码加64 还有80这个数 进行分段 颠倒 拼接尝试 居然也出结果了 存在0-80的格雷编码 相邻数字也只差一位
0,32,33,35,34,38,39,37,36,44,45,47,46,42,43,41,
40,56,57,59,58,62,63,61,60,52,53,55,54,50,51,
49,48,16,80,64,65,67,66,70,71,69,68,76,77,79,
78,74,75,73,72,8,24,25,27,26,30,31,29,28,20,
21,23,22,18,19,17,1,3,2,6,7,5,4,12,13,15,14,10,11,9
但是可惜的结果并不理想 我模拟每个位分别产生误差 比较普通编码和格雷码最终产生的MSE 格雷码并没有带来益处 相反 格雷码虽然会产生更多的小误差 但是也会使得大的误差变大 就是拉大了误差分布的...基尼系数? 折算到MSE上 反而吃亏了
可惜了两张奇迹般的表 就放着留作纪念吧 有两个问题
是不是所有数量的数 都存在 或者都能找到它的格雷排序呢 数学上能否证明 我感觉太难 放弃了
是否有另外一种编码 能使得误差分摊更均匀 然后降低整体MSE呢 研究一下
200字以内,仅用于支线交流,主线讨论请采用回复功能。