问题描述
问题
- 例如有整数。 i = ,代表49个数字(102,103,... 150)
- 有一个空数组a [60],因此大小为60个可用的“插槽”
- 需要一种算法,如何将49个数字尽可能均匀地分布到60个插槽的阵列中,很明显,必须重复一些数字才能填充全部60个插槽,恰好是12个
- 没有可用内存来对所有前期进行计数(a []的大小也可以为10000),该算法必须像流一样工作,因此它将返回特定索引a [0],a [1]的数字],a [2],...当需要时。
- 必须很快,因为消费者有一个时隙来获取值
示例
在下面的示例中,所有内容都经过精美排列
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]
,依此类推。