我想对 SAS 哈希表中存储桶的定义做一点澄清。问题正是关于hashexp参数。
根据 SAS DOCs,hashexp是:
哈希对象的内部表大小,其中哈希表的大小为 2n。
HASHEXP 的值用作创建哈希表大小的二次幂指数。例如,HASHEXP 的值为 4 等于哈希表大小为 24 或 16。HASHEXP 的最大值为 20。
哈希表大小不等于可以存储的项目数。将哈希表想象成一个“桶”数组。大小为 16 的哈希表将有 16 个“桶”。每个桶可以容纳无限数量的项目。哈希表的效率在于哈希函数将项目映射到桶并从桶中检索项目的能力。
您应该根据散列对象中的数据量设置散列表大小,以最大限度地提高散列对象查找例程的效率。尝试不同的 HASHEXP 值,直到获得最佳结果。例如,如果哈希对象包含一百万个项目,那么大小为 16 (HASHEXP = 4) 的哈希表可以工作,但效率不高。大小为 512 或 1024(HASHEXP = 9 或 10)的哈希表会产生最佳性能。
问题是哈希表大小到底是什么,而不是哈希对象中的数据量?
是否应该将其理解为好像我们想分配尽可能多的内存,但不能少,不能更多。让事情快速运转是二的力量。但它并没有限制可能使用的数据量,它只是表明将要使用多少,对吧?