我遇到了必须存储数百万条记录的情况。同时,我还需要对这些记录进行排序。我的脑海中有以下问题。
当有人问我百万条记录中第n个最小/第n个最高的数据时,我需要从排序后的数据中返回数据。我需要将此数据存储在内存中。
我确实尝试找到了答案,但是找不到任何具体的答案。任何帮助表示赞赏吗?
答案 0 :(得分:0)
地图是您可以使用的数据结构。它以排序的方式存储数据。它存储可以通过键访问的(键,值)对的数据。
在不同的编程语言中,您可以看到它们的核心库内置了映射或哈希映射,它们在每个实现中可能具有不同的名称。
Map是Java中的接口,其具体实现称为HashMaps和Hashtables。
Python-字典
C ++-hash_map,unordered_map等是不同的实现
哈希映射是使用数组实现的。这个想法是将键从数学上转换为数值(称为哈希),该数值在我们数组的大小之内,并将该值存储在数组中的该索引处。在表中添加或删除元素时,可以分别减小或增大数组的大小。对于不同的密钥,此哈希函数的范围可能不同。哈希函数的几个示例是:
整数键:使用表(数组)的大小修改键以获取唯一键。
字符串键:取字符串中字符的ASCII值,加起来并用表的大小对其进行修改。
解决冲突-很自然,您可能会遇到2个或更多键散列到表中相同位置(索引)的情况。您可以使用不同的方法来解决此问题。一些众所周知的技术是线性探测或单独链接。例如,单独的链接不过是在每个索引处存储链接列表而已。该列表的一个节点将存储(键,值)对。因此,所有哈希到相同索引的键都将存储在相同的链表中。
哈希图的许多实际应用是由于它在插入数据,搜索数据和删除数据的三大方面的效率!它们广泛用于构建其他复杂的系统,组件或数据结构,例如缓存(LRU缓存),数据库索引,集合等。