请教hash的映射

FSB 2002-07-28 05:03:13
请问将key缩到0 -- (size-1) 用下面那个好?
h = key % (size-1) ;
h = key & (size-1) ;
...全文
6 点赞 收藏 8
写回复
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
FSB 2002-07-29
to quicmous(快鼠)
通过对源代码的观察,确发觉size的动态增长是以2的倍数.
多谢.
回复
许野平 2002-07-29
to FSB(游民):
如果size是2的n次幂,则h = key % size与h = key & (size-1)等价.
回复
jack4liang 2002-07-29
两种方法都一样啊,也许求bitand 会跟快一点,毕竟生成的汇编代码好一点。

#include "stdio.h"
void main(void)
{

unsigned short i = 0x0000;
unsigned short j = 0x000F;
short n;

for(int k=0;k<100;k++)
{
n = (i++) & j;
printf("\n %d",n);
}
}
回复
FSB 2002-07-28
但在lua的源代码中,使用的是h = key & (size-1) ; 这使到我感到疑惑.
不知作者出于怎样的考虑?


ps: lua在http://www.lua.org/中有下载
回复
许野平 2002-07-28
更正:应该是 h = key % size
回复
许野平 2002-07-28
h = key % (size-1) 较好,第二个严格讲是错误的。
回复
LeeMaRS 2002-07-28
h = key % (size-1) ; 好
回复
LeeMaRS 2002-07-28
h = key % (size-1) ; 好
回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告