存储一百万个值的最佳数据结构?

时间:2010-08-23 19:19:32

标签: algorithm sorting data-structures

当值为:

时,请提及时间复杂度和最佳数据结构来存储这些值
  1. 整数
  2. 字符串(字典如排序)
  3. 我知道当整数在一个小范围内时,Counting sort是首选。

    感谢。

    修改 对不起,我问了一个不同的问题。实际问题是存储这些值的最佳数据结构,如果整数是电话号码(字符串是名称),然后找到最佳排序算法。

5 个答案:

答案 0 :(得分:2)

排序算法wiki链接:Sorting Algorithm Wiki

合并排序和快速排序非常好,在最佳情况下它们是n log n。

答案 1 :(得分:2)

看看: Btreesred-black trees

您应该能够找到每个这些的开源实现。 (注意,我假设您要维护一个排序结构,而不是只排序一次而忘记。)

答案 2 :(得分:1)

heap怎么样?相对容易实现,速度非常快。对于字符串,你可以使用Trie和Burst sort这样的东西,它被认为是同类中最快的字符串排序算法。

答案 3 :(得分:0)

对于大多数排序算法,都有一个就地版本,因此一个简单的数组就足够了。对于字符串,您可以考虑http://en.wikipedia.org/wiki/Trie,这可以节省空间。正确的排序算法取决于很多因素,例如:如果结果可能已经排序或部分排序。当然,如果您只有几个不同的值,可以使用Countingsort,Bucketsort等。

答案 4 :(得分:0)

在32位机器上,一百万个整数可以容纳400万字节的数组。 4MB并不是那么多;它将在这个系统的存储器中适应500次(现代标准并没有那么强劲)。除了这些字符串的存储空间外,一百万个字符串的大小相同;对于短字符串,它仍然没有问题,所以将它全部淹没。你甚至可以拥有一个指向结构的指针数组,这些指针包含一个整数和一个字符串的引用;一切都很合适。只有当你处理的数据远远多于那些(例如十亿个项目)时,你需要采取特殊的措施,数据结构。

为了排序那么多东西,选择一个O( n log n )的算法而不是O( n < SUP> 2 )。 O( n )算法仅在您拥有特别紧凑的密钥空间时才有用,这在实践中非常罕见。从集合中选择O( n log n )中的算法是平衡速度和其他良好属性(如稳定性)的问题。

如果您是真的这样做,请使用具有适当索引的数据库,而不是手动执行此操作。