将数字编码为单个数字

Sam*_*Sam 1 algorithm encoding integer numbers transformation

我对数字及其表示有疑问。

我有一组最大可能值为 1 000 000 的自然数,称之为 NUM。从集合 NUM 中取 1-50 个数字,其中相同的数字可以包含多次,称为 IN。使用以下条件将集合 IN 转换为单个数字 (OUT):

  1. OUT 将唯一标识集合 IN。

  2. 可以使用两个 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. 输出 1 != 输出 2 != 输出 3

  2. 输出1 < 输出2 < 输出3

  3. IN1=reverse_function(OUT1)


有没有办法找到这个function()reverse_function()???

MrS*_*h42 6

有几种方法。一个非常常见的方法是将每个不同的数字映射到一个素数,然后编码这个数字在指数中出现的频率。

它被称为哥德尔编号

如果每个数字只能出现一次,您甚至可以摆脱从数字到素数的映射。比您可以将数字本身存储在素数的指数中(每个数字的不同素数)例如您想存储 {123,47,2} 你可以这样做:

result=(2^123)*(3^47)*(5^2)
Run Code Online (Sandbox Code Playgroud)

您可以通过进行素数分解并查看指数来扭转这一点。