как предложено в комментариях this вопрос, я использую в качестве хэш-функции это:Atol дает те же результаты для различных строк
atol(phone) % buckets
Однако, я получил тот же самый точный результат от atol()
для всех моих телефонных номеров ! Я удалил первые две цифры (они одинаковы для всех чисел в моем случае) и получили разные результаты (конечно, столкновения были обнаружены ..).
Почему это произошло?
Проверьте выход из этого:
printf("%s %ld %ld %s %ld %d %ld\n", str, atol(str), atol(str) % N,
phone, atol(phone), N, atol(phone) % N);
Просто некоторые примеры:
48614858 48614858 58 6948614858 2147483647 200 47
61468264 61468264 64 6961468264 2147483647 200 47
54079694 54079694 94 6954079694 2147483647 200 47
48370923 48370923 123 6948370923 2147483647 200 47
52746354 52746354 154 6952746354 2147483647 200 47
Мета-вопрос: Если лучший подход может быть предложено, чтобы получить лучшую хеш-функции, я все еще открыт в изменении моего кода.
EDIT:
strtol()
дает те же результаты.
любая конкретная причина не использовать 'strtol()'? –
Я думал об этом, но комментарии предлагали 'atol()'. Дай взглянуть. – gsamaras
, чтобы соответствовать '6948614858', вам может понадобиться' strtoll() 'или' atoll() ' –