数据结构对大数字进行查找

时间:2014-07-30 17:15:45

标签: c arrays data-structures radix-tree

我需要根据大量进行查找。该数字可能落在1 - 2 ^ 32的范围内。根据输入,我需要返回一些其他数据结构。我的问题是我应该使用什么数据结构来有效地保持这个?

我会使用一个数组给我O(1)查找,如果数字在1到5000的范围内。但是当我的输入数量变大时,使用数组变得不现实,因为内存需求将是巨大。

因此,我试图查看一个快速产生结果并且不是很重的数据结构。

任何人的线索?

编辑:

使用数组是没有意义的,因为我可能只有100或200个索引来存储。

阿布舍克巴克

2 个答案:

答案 0 :(得分:1)

unordered_map或map,具体取决于您使用的C ++版本。

http://www.cplusplus.com/reference/unordered_map/unordered_map/

http://www.cplusplus.com/reference/map/map/


C语言中的一个简单解决方案,假设您最多声明了200个元素,它只是一个带有索引和数据指针的结构数组(或两个数组,一个索引和一个数据指针,其中index [i]对应于数据[i])。线性搜索数组以查找所需的索引。使用少量元素(200),这将非常快。

答案 1 :(得分:0)

一种可能性是Judy Array,它是一个稀疏的关联数组。有一个C Implementation可用。我对这些没有任何直接经验,虽然它们看起来很有趣,如果你有时间,可能值得尝试。

另一种(可能更正统的)选择是hash table。散列表是将键映射到值的数据结构,并提供快速查找和插入时间(假设选择了良好的散列函数)。然而,他们没有提供的一件事是有序遍历。

有许多C实现。快速谷歌搜索出现uthash似乎是合适的,特别是因为它允许您使用任何值类型作为键(许多实现假设字符串作为键)。在您的情况下,您希望使用整数作为键。