散列函数在同一位置发送关闭键

时间:2019-09-27 17:18:25

标签: c hash hashmap hashtable

我已经看到已经问过这个问题,但是我没有找到适合我的情况的答案。 我的字母{A,C,G,T}中有一些很长的字母字符串,想将它们散列到带有q个槽的数组中。到目前为止,我很好,问题是我还需要仅将一个字母映射到同一对象的不同字符串,例如Hash(ACTGTT)和Hash(ATTGTT)必须具有相同的输出。我分别将字母值{0,1,2,3}赋予了字母(可以随意更改它们的值),并尝试了一些求和并乘以质数,但这实际上并没有用。有任何想法吗?这是我到目前为止的位置(这有点复杂,但是我想你明白了):

int fash(char r){
  if (r=='A') return 0;
  if (r=='C') return 1;
  if (r=='G') return 2;
  if (r=='T') return 3;
}

int hash(char kmero[], int p, int q, int k){
  int c=0;
  for (int u=0; u<k; u++)
    c=((c+ fash(kmero[u]))*p)% q; 
  return c;
}

int main(){
  char* kmero1={'A', 'C', 'G', 'T'};
  char* kmero2={'A', 'T', 'G', 'T'};
  if (hash(kmero1, 5, 2, 4)==hash(kmero2, 5, 2, 4))
    return 1;
   else return 0;
}

0 个答案:

没有答案