为什么计算机不能进行比较搜索才能找到哈希表值?

时间:2012-11-20 20:45:11

标签: hashtable

我正在了解散列表的工作方式,因此我理解散列函数如何计算一个唯一的(为了这个问题的目的)散列表值与存储值一起使用,所以当搜索存储的值时哈希函数为计算机提供哈希表值。

好的,现在我们有哈希表值,但这怎么样更好?在找到匹配的哈希表值之前,我们还不得不迭代吗?

3 个答案:

答案 0 :(得分:2)

哈希函数将用于直接映射到数组中的索引。所以没有搜索或迭代完成

答案 1 :(得分:1)

哈希表存储在一个数组中。哈希值映射到数组索引。根据实现情况,散列值是数组索引,或者它是一个更大范围的数字,取模数的大小。

然后,一旦它查看数组中的那个点,就必须检查那里的值是否匹配,因为多个值可能具有相同的哈希值。通常,它实际上导航已散列到散列表中相同位置的所有值的链接列表。这是一个比完整列表短得多的列表(特别是如果哈希表的大小与其中的数据量成比例)。

答案 2 :(得分:0)

有许多不同的哈希表,每个哈希表都有不同的实现细节,但最简单的哈希表使用哈希代码作为数组的索引:

#define TABLESIZE 1000

char **gHashTable[TABLESIZE];

void clearHashTable() {
  memset(gHashTable, 0, sizeof(gHashTable));
}

int calculateHashCode(char *string) {
  int val = 0;
  for (int i = 0; string[i] != '\0'; ++i)
    val += string[i];
  return val;
}

void insertInHash(char *string) {
  int hashCode = calculateHashCode(string);
  gHashTable[hashCode % TABLESIZE] = string;
}

int isInHashTable(char *string) {
  int hashCode = calculateHashCode(string);
  return gHashTable[hashCode % TABLESIZE] != 0;
}

现在这个简单的哈希支持快速查找字符串。它不能很好地处理冲突,哈希函数很糟糕,还有许多其他问题,但它会起作用。