我正在寻找一种聪明的解决方案,该解决方案可以将16位整数打包成至少9个3状态“位”。还应该可以轻松地设置这些三态“位”之一的值。
例如,它可以用于对井字游戏位置进行编码,树状态为木板九个正方形的_(空),X(我),O(对手)。
自然地,每平方使用2位就可以完成这项工作,但是总体上将需要18位。是否有一种编码最多每平方仅使用1.7位,并且仍然保持使用它的简单性?
答案 0 :(得分:1)
您可以在16位整数中存储10个3状态值,因为3 10 = 59049 <65536。只需将10位基数3编码为16位整数,并以其他方式拉出数字。
要对每个数字d
进行编码,重复的操作是n = 3*n + d
。要以相反的顺序解码数字,重复的操作是d = n % 3
和n /= 3
。