对于下面的问题,我想用c语言给出一个建议:
我需要字符串和整数之间的关联,如下所示:
"foo" => 45,
"bar" => 1023,
etc...并且能够使用相关联的整数找到该字符串,并且能够使用相关联的字符串找到该整数。对于字符串到整数,我可以使用哈希表,但我将失去返回的方法。
我使用的简单解决方案是创建一个表: static bar params [] ={{ "foo",45 },{“param_t”,1023 },... };然后使用两个函数比较每个条目(字符串或整数),以获得字符串或整数。这就是线性搜索,它非常慢。我可以使用什么来使用O(1)中的搜索算法来查找字符串和O(字符串的大小)来查找整数?有什么想法吗?
发布于 2014-06-05 19:39:31
最简单的方法是实现查找表,最好是按整数值(“主键”)排序。
typedef enum
{
FOO_INDEX,
BAR_INDEX,
...
N
} some_t;
const int int_array [] = // values sorted in ascending order, smallest first
{
45,
1023,
...
};
const char* str_array [] =
{
"foo",
"bar",
...
};现在,您可以使用int_array[FOO_INDEX]和str_array[FOO_INDEX]来获取所需的数据。
由于这些表是在编译时设置的常量表,因此可以对数据进行排序。然后,所有的查找都可以用二进制搜索O(log )完成。如果您有整数值,但需要知道索引,请在int_array上执行二进制搜索。一旦你找到了索引,你就可以从那里得到即时的查询。
为此,两个数组必须具有完全相同的N大小。要确保数组大小和这些数组中的数据完整性,请使用编译时断言:
static_assert(sizeof(int_array)/sizeof(*int_array) == N, "Bad int_array");
static_assert(sizeof(str_array)/sizeof(*str_array) == N, "Bad str_array");发布于 2014-06-05 19:29:58
首先使用qsort对列表进行排序,然后使用bsearch查找项目。它不是O(1),但至少是O(log(n))。
发布于 2014-06-05 19:50:21
使用两个哈希图。一个用于从整数到字符串的关联,另一个用于从字符串到整数的关联。
https://stackoverflow.com/questions/24058784
复制相似问题