Sam*_*Sam 1 algorithm encoding integer numbers transformation
我对数字及其表示有疑问。
我有一组最大可能值为 1 000 000 的自然数,称之为 NUM。从集合 NUM 中取 1-50 个数字,其中相同的数字可以包含多次,称为 IN。使用以下条件将集合 IN 转换为单个数字 (OUT):
OUT 将唯一标识集合 IN。
可以使用两个 OUT 编号 (<,>,<=,>=) 的比较,完全取决于 OUT 的创建时间(一次只创建一个 OUT)
(3. 优选) 可以将 OUT 转换为原始集合 IN。
例子:
NUM={1,2,3,4,5,6,7,8,9,10,......,1000000}
IN1={2,4,6}, creation time 1
IN2={1,3,8}, creation time 2
IN3={4,4,4}, creation time 3
OUT1=function(IN1,time 1)
OUT2=function(IN2,time 2)
OUT3=function(IN3,time 3)
输出 1 != 输出 2 != 输出 3
输出1 < 输出2 < 输出3
IN1=reverse_function(OUT1)
有没有办法找到这个function()或reverse_function()???
有几种方法。一个非常常见的方法是将每个不同的数字映射到一个素数,然后编码这个数字在指数中出现的频率。
它被称为哥德尔编号
如果每个数字只能出现一次,您甚至可以摆脱从数字到素数的映射。比您可以将数字本身存储在素数的指数中(每个数字的不同素数)例如您想存储 {123,47,2} 你可以这样做:
result=(2^123)*(3^47)*(5^2)
Run Code Online (Sandbox Code Playgroud)
您可以通过进行素数分解并查看指数来扭转这一点。