用于排序数百万条记录的数据结构以及使用的算法

时间:2018-10-17 15:48:51

标签: sorting data-structures collections

我遇到了必须存储数百万条记录的情况。同时,我还需要对这些记录进行排序。我的脑海中有以下问题。

  1. 用于保存如此大量记录的数据结构是什么?
  2. 我应使用哪种排序算法对上述所选数据结构上的记录进行排序?
  3. 我应该在添加数据时对数据进行排序还是继续添加并在需要时对其进行排序?
  4. 数百万条记录都是ff类型的原语和对象。因此,我需要对存储在两个不同数据结构中的两种类型的记录进行排序。

当有人问我百万条记录中第n个最小/第n个最高的数据时,我需要从排序后的数据中返回数据。我需要将此数据存储在内存中。

我确实尝试找到了答案,但是找不到任何具体的答案。任何帮助表示赞赏吗?

1 个答案:

答案 0 :(得分:0)

地图是您可以使用的数据结构。它以排序的方式存储数据。它存储可以通过键访问的(键,值)对的数据。

在不同的编程语言中,您可以看到它们的核心库内置了映射或哈希映射,它们在每个实现中可能具有不同的名称。

  1. Map是Java中的接口,其具体实现称为HashMaps和Hashtables。

  2. Python-字典

  3. C ++-hash_map,unordered_map等是不同的实现

哈希映射是使用数组实现的。这个想法是将键从数学上转换为数值(称为哈希),该数值在我们数组的大小之内,并将该值存储在数组中的该索引处。在表中添加或删除元素时,可以分别减小或增大数组的大小。对于不同的密钥,此哈希函数的范围可能不同。哈希函数的几个示例是:

  1. 整数键:使用表(数组)的大小修改键以获取唯一键。

  2. 字符串键:取字符串中字符的ASCII值,加起来并用表的大小对其进行修改。

解决冲突-很自然,您可能会遇到2个或更多键散列到表中相同位置(索引)的情况。您可以使用不同的方法来解决此问题。一些众所周知的技术是线性探测或单独链接。例如,单独的链接不过是在每个索引处存储链接列表而已。该列表的一个节点将存储(键,值)对。因此,所有哈希到相同索引的键都将存储在相同的链表中。

哈希图的许多实际应用是由于它在插入数据,搜索数据和删除数据的三大方面的效率!它们广泛用于构建其他复杂的系统,组件或数据结构,例如缓存(LRU缓存),数据库索引,集合等。