Хэш-функция отправки ключей закрытия в том же месте - PullRequest
1 голос
/ 27 сентября 2019

Я видел, что этот вопрос уже задавался, но я не нашел подходящего ответа для своего случая.У меня есть несколько очень длинных цепочек букв в алфавите {A, C, G, T} и я хочу хэшировать их в массив с q слотами.Пока все хорошо, проблема в том, что мне также нужны строки, которые различаются для сопоставления одной буквы одной и той же вещи, например, хэш (ACTGTT) и хэш (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;
}
...