Формула / шаблон для предоставления уникального 32-разрядного типа int, представляющего путь к файлу из 512 символов? - PullRequest
0 голосов
/ 05 октября 2009

Существует ли общая формула, которая могла бы предоставить уникальное значение для пути к файлу из 512 символов, предполагая один 32-битный байт на символ и, возможно, ограничивая символы, используемые в именах?

Я знаю, что если бы вы использовали только заглавные буквы, то комбинация была бы намного больше, чем 32-битное целое, но как насчет использования поля идентификации с некоторой библиотекой, чтобы после присвоения чисел всегда то же самое, учитывая, что путь к файлу? Это идея, но я ищу какую-то стандартную формулу или, по крайней мере, кто-то успешно реализовал ее в реальном мире.

Кстати, я использую C #, но в качестве примера можно использовать любой язык или ссылку на веб-сайт.

Спасибо

Ответы [ 6 ]

3 голосов
/ 05 октября 2009

Хэш-код пути к файлу будет достаточно уникальным?

MSDN: Object.GetHashCode ()

2 голосов
/ 05 октября 2009

Вы можете использовать String.GetHashCode (). Конечно, он не будет уникальным, но две одинаковые строки будут иметь одинаковое значение хеш-функции.

Проверьте эту ссылку для примера нахождения коллизий хеша при использовании GetHashCode ().

1 голос
/ 05 октября 2009

Даже если вы используете 1 бит на символ, результат будет 512 бит, что больше 32, что означает, что в некоторых случаях два разных пути будут генерировать одно и то же значение. Если ваш набор данных «все 512 символов пути», все, что вы можете сделать, - это найти хеш-функцию с низкой вероятностью конфликтов в определенном подмножестве пути.

0 голосов
/ 05 октября 2009

Итак, другими словами, вы ищете реализацию .NET CRC32, которая возвращает свой результат в виде UInt32, а не 8-символьной строки?

К сожалению, все те, что я видел, возвращают байтовый массив, включая этот .

0 голосов
/ 05 октября 2009

Я знаю, что вы сказали int, но если вы можете взять строку, вы можете использовать md5 и получите уникальное значение для каждого пути. Кроме того, единственное, что я могу придумать, - это назначить произвольное число для каждого из них путем увеличения. Это не даст вам настоящего хэша, просто создайте идентификатор пути ...

0 голосов
/ 05 октября 2009

Если вы можете представить 512-байтовую строку с 32-битным числом, все, что я могу сказать, это то, что хороший метод сжатия!

...