c++ - 查找表是哈希表的一种形式吗?

标签 c++ c language-agnostic hashtable terminology

我想看看我在这里的概念是否正确。 .

如果我试图避免为 float 据数组 x 中的每个元素计算计算量大的 someExpensiveFun(x),假设有界值在 0 和 1 之间,可以先预先计算昂贵函数的输出并将其存储在表中。 . .

for (int nn = 0; nn < 1000; ++nn)
{
    float tmp = ((float)nn) / 1000.f;
    lookup[nn] = someExpensiveFun(tmp);
}

然后在性能关键代码的主体中我可以使用 . . .

y = lookup[(int)floor(x*1000.f)];

lookup 称为哈希表的一种形式并将 x*1000 称为相关的哈希函数在概念上是否正确(而不是滥用术语)?

最佳答案

我个人认为这是对术语的滥用。它缺乏人们自然希望从哈希表中获得的属性,特别是能够对具有相等哈希值的非相等键进行处理。而且我很确定您的“哈希函数”必须被视为 floor(x*1000.f)(int)floor(x*1000.f) ,而不仅仅是 x*1000.f

哈希表通常也可以接受其键类型的任何值作为键,而不仅仅是一个范围内的值,但也许我在那里太挑剔了。我不会将不允许 NaN 作为键的其他正常哈希表称为“不是哈希表”。

它与哈希表(一种将键映射到整数的非单射函数,表示整数用作数组中的索引)有一些共同的属性。如果有人想决定这两个东西一起表征“哈希表”,好吧,祝他们好运,这是一个哈希表:-)

关于c++ - 查找表是哈希表的一种形式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12501367/

相关文章:

c++ - 将 vector<double> 设置为 wxComboBox 的选择值

c++ - 我的中值函数无法正常运行(C++)

sql - 执行脚本图

c - 在 C 中分配指向另一个结构的指针

algorithm - 通过依次插入以下元素创建一个堆

algorithm - 短路前缀 bool 表达式

c++ - Windows 控制台应用程序在新控制台而不是同一控制台中打开

c++ - VertexShader 在 Windows 上编译失败,相同的代码在 Linux 上有效

c - sscanf() 如何查看字符串中的数字?

c - Windows 上的 Ubuntu 上的 Bash : Signal handler does not work