最快的整数排序实现200-300位整数

fastest integer sort implementation for 200-300 bit integers?

本文关键字:整数 实现 200-300位 排序      更新时间:2023-10-16

对于200-300位大小的整数,最快的整数排序实现是什么?int的精确大小是固定的;我有多达2gb的这样的整数(全部在RAM中)。

我听说有可能在O(n log log M)甚至O(n√(log log M))时间内对这样的集合进行平均排序,其中n为整数个数,M为最大整数。内存使用是有限的(我可能会额外使用0.5-1 GB)。分拣可以就地完成;In可能是不稳定的(重新排序dup)。

是否有这样的排序方法的C/c++实现,例如Han &Thorup (2002) ?

基数排序可用于对具有固定大小键的数据排序。由于不经常满足此条件,因此对该技术的讨论不多,但是当将密钥大小分解时,它可以是O(n)。

如果内存使用确实有限。我将把每个字节分开,并将它们存储到一个trie数据结构中,从最高有效字节到最低有效字节。如果您按排序顺序插入字节,则可以迭代该树并对所有数据进行排序。

签名排序对于具有'O (n lglgn)'预期时间复杂度的大字长很好,但是对于较小的字长,您可以获得与von Emde Boas排序相同的复杂度。最近,Han和Thorup发表了更快的排序算法,其预期时间复杂度为"O (n√t(lglgn))"。我不确定你是否能在网上找到这些算法的实现,但在麻省理工学院和哈佛大学可能有一些很棒的文章和讲座。

我认为最合理的做法是创建一个指向大整型的指针数组,并对指针数组进行排序。我建议使用模板化的快速排序,带有智能比较功能。

compare函数应该能够在大多数情况下通过查看最重要的4字节来决定。如果它们不匹配,则决定比较。如果它们匹配,则查看后面的4个字节,直到int.

结束。

我猜数据范围可能足够大,基数排序将是不切实际的。如果数据是随机的,快速排序通常足够快,并且具有优于大多数非基数排序的缓存性能。