C 哈希函数在同一位置发送关闭键

C 哈希函数在同一位置发送关闭键,c,hash,hashmap,hashtable,C,Hash,Hashmap,Hashtable,我知道这个问题已经被问过了,但我没有找到适合我的问题的答案。 我在字母表{A,C,G,T}中有一些很长的字母串,我想把它们散列到一个有q个槽的数组中。到目前为止我还不错,问题是我还需要一个字母不同的字符串映射到同一个东西,例如Hash(ACTGTT)和Hash(ATTGTT)必须具有相同的输出。我已经分别将值{0,1,2,3}归属于字母(可以随意更改它们),并尝试了一些求和和和素数相乘的方法,但没有真正起作用;有什么想法吗?这就是我目前所处的位置(有点复杂,但我想你明白了): intfash(字

我知道这个问题已经被问过了,但我没有找到适合我的问题的答案。 我在字母表{A,C,G,T}中有一些很长的字母串,我想把它们散列到一个有q个槽的数组中。到目前为止我还不错,问题是我还需要一个字母不同的字符串映射到同一个东西,例如Hash(ACTGTT)和Hash(ATTGTT)必须具有相同的输出。我已经分别将值{0,1,2,3}归属于字母(可以随意更改它们),并尝试了一些求和和和素数相乘的方法,但没有真正起作用;有什么想法吗?这就是我目前所处的位置(有点复杂,但我想你明白了):

intfash(字符r){
如果(r=='A')返回0;
如果(r=='C')返回1;
如果(r=='G')返回2;
如果(r=='T')返回3;
}
整数散列(字符kmero[],整数p,整数q,整数k){
int c=0;

对于(int u=0;uWelcome!请向我们展示您的代码,以及两个示例,说明您所期望的和实际得到的都是相同长度的字符串?的原则可能很有用。是的,所有字符串都有相同的长度如果所有有一个字符差异的字符串都有相同的哈希,那么所有与其中一个不同的字符串都有相同的哈希由一个字符组成的字符串也必须具有相同的哈希值,依此类推。您的哈希函数将变为
返回0;
。欢迎!请向我们展示您的代码,以及两个示例,说明您所期望的和实际得到的都是相同长度的字符串?的原理可能很有用。是的,所有字符串都具有相同的长度如果所有具有一个字符差异的字符串都具有相同的哈希值,则与这些字符串中的一个字符差异一个字符的所有字符串也必须具有相同的哈希值,依此类推。哈希函数变为
返回0;
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;
}