按内存约束对唯一数字进行排序

时间:2013-08-14 05:50:00

标签: algorithm sorting bitmap

这是一个面试问题,我在很多地方都找到了答案。我必须承认我无法理解解决方案,所以我在这里提出问题寻求帮助:

Given an array having 16000 unique integers, each lying within the range 1 to 20000, how
do u sort it. U can load only 1000 numbers at a time in memory.

以下是我遇到的解决方案,但我无法理解:http://www.careercup.com/question?id=23123665

具体问题:

  • 作者是如何选择' 625'。我知道20000/32是625,但背后的逻辑是什么?
  • 作者如何使用除法和模数运算对数组进行排序?

1 个答案:

答案 0 :(得分:1)

链接的解决方案实质上是存储数字列表的紧凑直方图。每个直方图桶只接受一个数字,并且列表中的数字是唯一的,因此存储桶只需要从0到1(一位)计数。因此,每个桶只有一个数字,需要存储在内存中的20,000个桶。

您可以将20,000个一位桶装入625个32位整数。您可以将整数数组视为一位值的二维数组,包含625行和32列。要查找特定数字的存储桶,请使用数字/ 32找到该行,使用数字%32找到该列。

一旦您完成并计算列表中数字的存在,您的直方图就可以按顺序写回。