用1 MB空间排序1000万个整数解决方案说明 - 编程珍珠

时间:2011-08-28 07:40:46

标签: sorting programming-pearls

我正在阅读“编程珍珠”,我对其中一个解决方案的解释感到困惑。

问题是: “一个包含最多n个正整数的文件,每个小于n,其中n = 10 ^ 7.每个正整数最多可以出现十次。你会如何对文件进行排序?”

书中给出了解决方案: “如果每个整数最多出现十次,那么我们可以用四位半字节来计算它的出现。使用问题5(下面)的解决方案,我们可以在10,000,000 / 2字节的单次传递中对整个文件进行排序,或者in k传递10,000,000 / 2k字节“

问题5的解决方案:双遍算法首先使用5,000,000 / 8 = 625,000字的存储对整数0到4,999,999进行排序,然后在第二遍中对5,000,000到9,999,999进行排序。 k-pass算法在时间kn和空间n / k中对最多n个小于n的非重复正整数进行排序。)

我没有得到作者如何进入10,000,000 / 2k空间进行排序。我的意思是,基于问题5的解决方案,首先我们需要625K字节的空间来排序第一遍和每个整数额外的1/2字节来存储计数吗?

有人可以帮我理解这个吗?

非常感谢。

2 个答案:

答案 0 :(得分:1)

Each positive integer could appear at most ten times.

每个计数器可以使用4位,而不是2个字节。如果您对计数器进行分组,您甚至可以降低此值,例如,如果您对3个计数器进行分组,则为10 * 10 * 10 = 1000个组合,并且您需要10位(= 1024个值)。

答案 1 :(得分:0)

10,000,000 - 因为有10,000,000个可能的值。

2 - 因为每个字节由两个半字节组成。

相关问题