我想对 SAS 哈希表中存储桶的定义进行一些澄清。问题正是关于hashexp范围。
根据 SAS DOC 的说法,hashexp is:
哈希对象的内表大小,其中哈希表的大小为2n。
HASHEXP 的值用作 2 的指数来创建哈希表大小。例如,HASHEXP 的值为 4 相当于哈希表大小为 24 或 16。HASHEXP 的最大值为 20。
哈希表的大小不等于可以存储的项数。将哈希表想象为“桶”数组。哈希表大小为 16 将有 16 个“桶”。每个桶可以容纳无限数量的物品。哈希表的效率在于哈希函数将项目映射到桶以及从桶中检索项目的能力。
您应该根据哈希对象中的数据量设置哈希表大小,以便最大限度地提高哈希对象查找例程的效率。尝试不同的 HASHEXP 值,直到获得最佳结果。例如,如果哈希对象包含一百万个项目,则哈希表大小为 16 (HASHEXP = 4) 可以工作,但效率不高。哈希表大小为 512 或 1024(HASHEXP = 9 或 10)将获得最佳性能。
问题是到底是什么哈希表大小,而它不是哈希对象中的数据量?
是否应该理解为我们想要分配尽可能多的内存,但不能少,不能多。要让事情快速运转,需要二的力量。但它并不限制可能使用的数据量,它仅表明将使用多少数据,对吗?
Paul Dorfman(哈希大师)在本白皮书第 10 页上进行了相当详细的介绍:
http://www2.sas.com/proceedings/forum2008/037-2008.pdf http://www2.sas.com/proceedings/forum2008/037-2008.pdf
据我了解,哈希表将数据存储在二叉树中。 hashexp 创建的每个桶代表将用于存储数据的二叉树的数量。 0 的 hashexp 将使用单个树,而 8 的 hashexp 将使用 256 棵树。当对哈希对象执行查找时,内部算法会确定键应存在于哪棵树中(基于哈希值)。然后它检查该树的值。例如,通过自动知道要查看 256 棵树中的哪一棵,与单个二叉树相比,它可以节省 8 次比较 (2^8)。
整个事情看起来比这复杂得多,但这就是我对为什么它运行得更快的解释。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)