算法将整数的线性范围扩展到更大的数组

问题描述

问题

  1. 例如有整数。 i = ,代表49个数字(102,103,... 150)
  2. 一个空数组a [60],因此大小为60个可用的“插槽”
  3. 需要一种算法,如何将49个数字尽可能均匀地分布到60个插槽的阵列中,很明显,必须重复一些数字才能填充全部60个插槽,恰好是12个
  4. 没有可用内存来对所有前期进行计数(a []的大小也可以为10000),该算法必须像流一样工作,因此它将返回特定索引a [0],a [1]的数字],a [2],...当需要时。
  5. 必须很快,因为消费者有一个时隙来获取

示例

在下面的示例中,所有内容都经过精美排列

    i = <10,14> => 5 numbers  
    a[10]  => 10 slots

预期结果

    a[0] = 10  
    a[1] = 10  
    a[2] = 11  
    a[3] = 11  
    a[4] = 12  
    a[5] = 12  
    a[6] = 13  
    a[7] = 13  
    a[8] = 14  
    a[9] = 14

希望我已经清楚地描述了它,以便理解:-)

我已经完成了一些实现,但是并没有达到我希望的平均分布

感谢所有答案或至少指出正确的方向

解决方法

研究如何将二叉树存储为数组。

基本上,在流式传输数字时,您将构建二进制数组,在任何时候都可以扩展二进制树。只需将父值复制到它的值即可,该二进制树仅需要占用49个点到60个点。孩子(如果孩子没有价值)。

棘手的一点可能是确保您知道什么是“复制值”以及什么是实际值。

这里的想法是尽可能避免扩展,因为这会使其他所有内容花费更长的时间。

通过将数组包装在一个实用程序中,可以使a[0],a[1],a[2]根据需要工作,该实用程序可以根据请求的索引确定元素的位置。 IE:a[45] = a.at_index(45)。另外,您可能表示实际上想要的是a.next()之类的东西(第一个电话给a[0],第二个电话给a[1],依此类推。