Я реализую хеш-функцию для проверки анаграмм, но я не получаю желаемого результата. Не могли бы вы подсказать, что пошло не так?Функция хэша не дает желаемых результатов
Выход:
key[148]:val[joy]
key[174]:val[jam]
key[294]:val[paula]
key[13]:val[ulrich]
key[174]:val[cat]
key[174]:val[act]
key[148]:val[yoj]
key[265]:val[vij]
key[265]:val[jiv]
Здесь ключевое значение 174
отлично подходит для строк act
и cat
(анаграммы), но то же самое нельзя ожидать с jam
.
Ниже приведен фрагмент кода.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
unsigned long hash(char *str, size_t size) {
unsigned long hash_val = 5381;
unsigned long sum = 0;
char *val;
int i, j;
for (j = 0; j < 9; j++) {
val = malloc(strlen(str) + 1);
memset(val, '\0', strlen(str) + 1);
strcpy(val, str);
for (i = 0; val[i] != '\0'; i++) {
sum = sum + val[i];
}
return size % sum;
}
}
int main() {
int i;
char *str[9] = { "joy", "jam", "paula", "ulrich","cat", "act","yoj", "vij", "jiv" };
unsigned long key;
size_t size = 4542; // it may be anything just for test it is being used
for (i = 0; i < 9; i++) {
key = hash(str[i], size);
printf("\nkey[%ld]:val[%s]", key, str[i]);
}
return 1;
}
Почему вниз голоса за то же самое. Я ожидал решения этой проблемы. Я знаю, каковы подводные камни нынешнего подхода, так что просто ожидалось, что правильное решение этой проблемы будет отрицательным. – pri