我想从几个类属性中创建一个唯一的,可读的ID,例如:
Class A contains property c,d,e
Class B contains property f,g
所以一个ID代表
c=1
d=2
e=3
f=4
g=5
而另一个ID代表
c=7
d=3
e=4
f=0
g=11
为了论证,属性只是整数(编辑:在0到1000的范围内),而实际上它们实际上也可能是浮点数和字符串。
我正在寻找一种方法将这些值组合成一个简短的人类可读ID。另外,我希望能够从ID重建属性。此外,如果可能,属性的微小差异也会导致ID的差异很小。
这是一个我认为小而且可以考虑的例子。人类可读:
H5RT33
是否有类似的算法?
编辑: 我写下了ID示例,同时期待一个类似“什么是人类可读的?”的问题。我发现难以描述 - 例如,MD5不会,而像“树”这样的真实单词则不是必需的。 因此,给出的ID有点在中间,但我并不是要将其限制为6个字符,或仅限大写字母和数字。
另外,我谈到了整数,而我真的是指“0-1000范围内的整数”。
答案 0 :(得分:3)
你想要一个可逆变换(一个双射),这意味着原始和变换的信息内容是相同的。仅使用大写字母的六字符字母数字代码,如H5RT33
中有36个 6 可能的值;换句话说,它有6 * log236 = 31.1
个信息。另一方面,五(32位)整数包含5 * 32 = 180
位,这是相当多的(当然,除非整数具有受限范围)。而且你说你也想编码浮点数和字符串,它们包含更多的信息。
因此,在严格的信息理论基础上,我认为您将很难满足您的所有要求。