【发布时间】:2023-03-08 17:22:01
【问题描述】:
我对数字及其表示有疑问。
我有一组最大可能值为 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
---------------------------------------------- H2>
OUT1=function(IN1,time 1)
OUT2=function(IN2,time 2)
OUT3=function(IN3,time 3)
OUT1 != OUT2 != OUT3
OUT1
IN1=reverse_function(OUT1)
有没有办法找到这个function() 或reverse_function()???
【问题讨论】:
-
有几种方法。例如,您可以让 n 由 n:th 素数表示,并使用乘法。假设您要存储
2、4和5,您将使用3*7*11 = 231。要返回2、4和5,您只需分解231。 (也适用于数字的重复。) -
OUT will uniquely identify set IN将需要 huge 值的 out,这取决于IN的基数(以及time of creation的可能值的数量)。使用OUT唯一,re/inverse 应该不是问题。 -
究竟什么叫“单数”。没有足够大的原生数据类型来打包 50 个从 1 到 100 万范围内的数字(即 300 位 ~ 997 位)。
-
如何表示“创作时间”?
标签: algorithm encoding numbers integer transformation