hashexp指定的SAS HashTable中的表大小究竟是什么?

MPę*_*ski 5 hashtable sas

我想对SAS散列表中存储桶的定义进行一些澄清.问题正是关于hashexp参数.

根据SAS DOC,hashexp是:

散列对象的内部表大小,其中散列表的大小为2n.

HASHEXP的值用作二次幂指数来创建哈希表大小.例如,HASHEXP的值4等于哈希表大小为24或16.HASHEXP的最大值为20.

哈希表大小不等于可以存储的项目数.想象一下哈希表是一个'桶的数组'.哈希表大小为16将有16'桶.每个桶可以容纳无限数量的物品.哈希表的效率在于哈希函数将项目映射到桶并从桶中检索项目的能力.

您应该相对于哈希对象中的数据量设置哈希表大小,以便最大化哈希对象查找例程的效率.尝试不同的HASHEXP值,直到获得最佳结果.例如,如果哈希对象包含一百万个项目,则哈希表大小为16(HASHEXP = 4)将起作用,但效率不高.哈希表大小为512或1024(HASHEXP = 9或10)将产生最佳性能.

问题是哈希表大小究竟什么,而哈希对象中的数据量不是很多?

应该理解为我们想要分配尽可能多的内存,但不能少,不多.让事情快速发挥是两个人的力量.但它并没有限制可能使用的数据量,它只表明将要使用多少,对吧?

Rob*_*dge 6

Paul Dorfman(哈希大师)在本白皮书的第10页详细介绍了一些细节:

http://www2.sas.com/proceedings/forum2008/037-2008.pdf

据我了解,哈希表将他们的数据存储在二叉树中.hashexp创建的每个存储桶表示将用于存储数据的二叉树的数量.hashexp为0将使用单个树,而hashexp为8将使用256个树.当对散列对象执行查找时,内部算法确定密钥应存在于哪个树中(基于散列值).然后它检查该树的值.通过自动知道要查看的256个树中的哪一个(例如),与单个二叉树相比,它本身可以保存8个比较(2 ^ 8).

整个事情看起来要复杂得多,但这就是我对其解决速度更快的解释.