乐闻世界logo
搜索文章和话题

A minimal hash function for C?

5 个月前提问
4 个月前修改
浏览次数30

1个答案

1

在C语言中,一个最小的散列函数指的是一个简单且功能完整的散列函数,它能够将输入(通常是字符串或数字)映射到一个固定大小的整数值,这个整数值通常用作数组或数据结构中的索引。一个非常基础但通用的散列函数是使用简单的累加方法,例如将字符串中每个字符的ASCII值进行累加,然后对一个固定的数(例如散列表的大小)取模。

以下是一个简单的字符串散列函数的示例:

c
#include <stdio.h> #include <string.h> #define TABLE_SIZE 100 // 假设散列表的大小为100 unsigned int hash(const char *key) { unsigned int sum = 0; for (int i = 0; key[i] != '\0'; i++) { sum += key[i]; // 将每个字符的ASCII值加到sum中 } return sum % TABLE_SIZE; // 取模运算确保散列值在散列表大小之内 } int main() { char *keys[] = {"example", "test", "hash", "function", NULL}; for (int i = 0; keys[i] != NULL; i++) { printf("Hash for %s is %u\n", keys[i], hash(keys[i])); } return 0; }

在这个示例中,我们定义了一个散列函数hash,它接受一个字符串key作为输入,并返回一个无符号整数作为散列值。这个函数逐字符读取字符串,将每个字符的ASCII值累加到一个整数sum中,然后通过对TABLE_SIZE取模来保证结果落在散列表的有效范围内。

虽然这个函数非常简单并且在某些情况下可以工作,但它并不是一个很好的散列函数,因为它可能导致较高的碰撞率(不同的输入产生相同的输出)。在实际应用中,你可能需要一个更复杂的散列函数,如FNV-1a或MurmurHash,它们提供更好的分布性和较低的碰撞率。但是,对于演示如何实现和使用散列函数,以上示例是一个很好的起点。

2024年6月29日 12:07 回复

你的答案