摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1496这个方法好快哦。View Code #include "iostream"#include "string"using namespace std;#define MAX 40000typedef struct hash{ int key; //乘积 int num; //乘积个数}hash;hash h[MAX];int Line(int k){ //线性探查法 int d = k%MAX; if(d<0){ d+=MAX; } while(h[..
阅读全文
摘要:先来了解一下Hash的基本思路:设要存储对象的个数为num, 那么我们就用len个内存单元来存储它们(len>=num);以每个对象ki的关键字为自变量,用一个函数h(ki)来映射出ki的内存地址,也就是ki的下标,将ki对象的元素内容全部存入这个地址中就行了。这个就是Hash的基本思路。Hash为什么这么想呢?换言之,为什么要用一个函数来映射出它们的地址单元呢?This is a good question.明白了这个问题,Hash不再是问题。下面我就通俗易懂地向你来解答一下这个问题。现在我要你存储4个元素 13 7 14 11显然,我们可以用数组来存。也就是:a[1] = 13; a
阅读全文
摘要:DescriptionConsider equations having the following form:a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0The coefficients are given integers from the interval [-50,50].It is consider a solution a system (x1, x2, x3, x4, x5) that verifies the equation, xi∈[-50,50], xi != 0, any i∈{1,2,3,4,5}.Determine how many sol
阅读全文
摘要:暴雪公司有个经典的字符串的hash公式先提一个简单的问题,假如有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为止,我想只要学过程序设计的人都能把这样一个程序作出来,但要是有程序员把这样的程序交给用户,我只能用无语来评价,或许它真的能工作,但也只能如此了。最合适的算法自然是使用HashTable(哈希表),先介绍介绍其中的基本知识,所谓Hash,一般是一个整数,通过某种算法,可以把一个字符串"压缩"成一个整数,这个数称为Hash,当然,无论如何,一个32位
阅读全文
摘要:在看哈希之前还是来看看“散列函数(哈希函数)”吧,后面会用到的。解决冲突的方法。 开放定址法。如果h(k)已经被占用,按如下序列探查: (h(k)+p(1))%TSize, (h(k)+p(2))%TSize, …,(h(k)+p(i))%TSize,… 其中,h(k)为哈希函数,TSize为哈希表长,p(i)为探查函数。 在 h(k)+p(i-1))%TSize的基础上,若发现冲突, 则使用增量 p(i) 进行新的探测,直至无冲突出现为止。 其中,根据探查函数p(i)的不同,开放定址法又分为 (1)线性探查法(p(i) = i : 1 , 2 , 3 , …), ...
阅读全文