给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位;再用除留余数法将整数映射到长度为P的散列表中。例如将字符串AZDEG插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25;再通过移位将其映射为3×322+...
7-14 字符串关键字的散列映射 (25 分) 除留余数法设计哈希表: 由该式子得到value在哈希表中的存储位置:index = value % p;这里为了尽量的减少冲突,而且让value在哈希表中尽可能的均匀分布,p的选择就至关重要了。而合理选择p的经验是:若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数或不包...
7-43字符串关键字的散列映射(25分)7-43字符串关键字的散列映射(25分)注意:第i次冲突后第i次探测的散列地址 Hi=(H(key)+di)%p #include <stdio.h>
usingnamespacestd; constintmaxn=1e6; boolvis[maxn]; strings; intn,p; map<string,int>m; intmain() { scanf("%d %d",&n,&p); memset(vis,false,sizeof(vis)); for(inti=1;i<=n;i++) { cin>>s; intlen=s.size(); intx=0; if(len==1)x=(s[0]-'A'); elseif(len==2)x...
简介: 数据结构与算法题目集(中文) - 7-43 字符串关键字的散列映射(25 分) 题目链接:点击打开链接 题目大意:略。 解题思路: 注意1:对于重复的数字,只输出它第一次出现的位置,而不是实际存储的位置。 注意2:每个字符串长度可能小于3。 注意3:每个字符占5位意义:类似二进制 (1位,即:2^1==2) 转十进制...
在一行内输出每个字符串关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。 输入样例1: 4 11 HELLO ANNK ZOE LOLI 输出样例1: 3 10 4 0 输入样例2: 6 11 LLO ANNA NNK ZOJ INNK AAA 输出样例2: 3 0 10 9 6 1 这是一道字符串散列问题,使用平方探测解决冲突即可。
这时,我们就可以通过数组的索引,来对这些正整数进行访问,而相应的搜索的时间复杂度也就变成了O(1)。 11.2 散列 散列(hashing)是将搜索关键字映射到特定范围内的数组,来提供对该关键字直接访问的过程。其中的数组就称为散列表(hashing table),其中的映射就是散列函数(hash function)。
在这种情况下,散列函数必须把按照字母顺序排列的字符串映射到为散列表的内部数组所创建的索引上。下面我们将说明为什么对于上面三种用途, MD5都不适用。MD5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的MD5信息摘要。MD5算法可以很好地解决这个问题,因为它可以将任意长度的输入串经过计算...
7.3 映射类型的内建函数和工厂函数 7.3.1 标准类型函数[type()、str()和 cmp()] 如你所料,对一个字典调用type()工厂方法,会返回字典类型,“<type ‘dict’>”。调用str()工厂方法将返回该字典的字符串表示形式,这些都很容易理解。 在前面的章节里,我们已经讲述了用cmp()内建函数来操作数字、字符串、列表...