我想将(1,23,5,32,6,1,0,5,1,6)等并行信息序列化为一个整数(从现在开始的“索引”)。数组总是正好十个值,值的顺序很重要。
数组的值是可以从0到+ inf的整数,并且彼此完全独立。我想了几个可能的解决方案,但我无法想出一个解决方案,其中每个可能的数组都有一个可能的索引,并且每个可能的索引都有一个可能的数组。
您可以想象连续十个(有序)盒子的情况,其中放置了特定数量的球。现在存在无限数量的这些行,并且每行在框中具有不同数量的球。你如何给每一行提供一个数字(如目录),你究竟知道在哪个方框中有多少个球?
我知道索引号对于大数组值来说会非常大,但我不会使用大数组值。
的示例:
索引:数组
0:(0,0,0,0 ...,0,0)
1:(0,0,0,0 ...,0,1)
应该有一个简单的数学解决方案,但我没有看到它。
非常感谢!
Someonelse
答案 0 :(得分:0)
你可以只交错数字。使用大小为3而不是10的数组的示例:
(123, 456, 789) --> 147258369
必要时插入前导零:
(123, 4, 5) --> 100200345
答案 1 :(得分:0)
henrik的上述答案假定您知道数字的最大位数,如果您已经知道不需要交错,只需连接用零填充的数字。
我有一个通用构造:)只假设两个维度并像这样排列对并保持两个整数。
(0,0) \\offset:0 -- sum:0
(0, 1), (1, 0) \\offset:1+0 -- sum:1
(0, 2), (1, 1), (2, 0) \\ offset:1+2 -- sum:2
基本上,元组的索引是索引+偏移量,其中偏移量由级别确定(fibbonacci(级别),级别由术语的总和确定,索引由排序确定。(偏移+ index)保证是唯一的,可以通过动态编程解码
对于两个以上的维度,只需递归折叠维度,获得前两个维度的整数,这会将问题减少1维,然后您可以继续:)