我想确认一下我的理解是否正确 . .
如果我想避免为浮点数据数组 x
中的每个元素计算一个计算复杂度高的 someExpensiveFun(x)
,比如设定在零到一之间。那么可以先预计算昂贵函数的输出结果,并将其存储在表格中 . . .
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
则是相应的哈希函数这样说概念上是正确的(不算术语滥用)吗?
(int) floor(x * 1000.f)
可以被视为哈希函数。@H2CO3 在指出哈希表仅是一种查找表的形式方面是正确的。 - obatakuarray[hash(key)]
,就像您对于x [0,1)的lookup[x*1000]
一样。 - obataku