我已经看到已经问过这个问题,但是我没有找到适合我的情况的答案。 我的字母{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;
}