我有一个非常大的可能数据集,我试图立即可视化。集合本身由数十万个段组成,每个段都映射到一个id。
我收到了第二个数据源,为每个段提供了更多的实时信息,但是id与我的id不对应。
我将数据id(9个字符的字符串)的1:1映射到当前的id(长整数)。问题是有很多id,而且进来的数据没有特定的顺序。
我提出的解决方案是使用哈希映射将字符串映射到道路ID。问题是我不知道哈希映射是否足够有效以获得所有166k数据条目。
有没有人可以使用任何建议和/或哈希算法?
答案 0 :(得分:1)
Judy Arrays是为这类事情而设计的:“Judy的主要优点是可扩展性,高性能和内存效率。[...] Judy可以取代许多常见的数据结构,例如数组,稀疏数组,哈希表,B树,二叉树,线性列表,跳过列表,其他排序和搜索算法以及计数功能。“
答案 1 :(得分:1)
如果你只处理成千上万的数据点,那么采用天真的方式并坚持使用哈希映射可能不会有问题。
即使你有500,000个9个字符的字符串和相同数量的long
s,每个项目仍然只有16个字节,或总共8,000,000个字节。即使你将开销增加一倍,16 MB也不会太大而无法在内存中使用。
基本上,首先尝试简单的方法,只有当你的分析告诉你它花了太长时间时才会担心它。
答案 2 :(得分:1)
由于对问题的评论表明主要关注点可能是内存使用情况:
您采取的路径应该受到您可以收集的信息的影响 - 尝试获取分配数量和分配大小/对齐开销的图片。
你可以设置你的分配器或插入一些元素,看看你的做法与你认为你应该在内存使用方面的表现相比。
答案 3 :(得分:0)
由于你的字符串是预先知道的并且具有固定的长度,理论上和实际上最好的解决方案是完美哈希。您可以使用cmph生成它。
根据维基百科,你的密钥需要2.5比特/密钥,或大约50KB。与价值664KB相比,这是可以忽略不计的。
答案 4 :(得分:0)
虽然166k数据条目相当小IMO,但您可以查看google-sparsehash