Способы хешировать числовой вектор?

Как отмечали некоторые другие,

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение else{}.

Попробуйте это; измените свой первый экземпляр:

if(isset(

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение [111].

Попробуйте это; измените свой первый экземпляр:

[112] на if(sizeof(

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение [111].

Попробуйте это; измените свой первый экземпляр:

[112] на [113]

POST))

POST))
на if(sizeof(

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение [111].

Попробуйте это; измените свой первый экземпляр:

[112] на [113]

POST))

POST
всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение else{}.

Попробуйте это; измените свой первый экземпляр:

if(isset(

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение [111].

Попробуйте это; измените свой первый экземпляр:

[112] на if(sizeof(

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение [111].

Попробуйте это; измените свой первый экземпляр:

[112] на [113]

POST))

POST))
на if(sizeof(

Как отмечали некоторые другие, [110] всегда установлено, поэтому ваш сценарий никогда не входит в ваше предложение [111].

Попробуйте это; измените свой первый экземпляр:

[112] на [113]

POST))

14
задан Tyler 12 November 2008 в 07:54
поделиться

4 ответа

Я сделал некоторых (неопубликованный, практичный) эксперименты с тестированием множества строковых хеш-алгоритмов. (Оказывается, что хеш-функция Java по умолчанию для Строк сосет.)

легкий эксперимент должен хешировать английский словарь и выдержать сравнение, сколько коллизий Вы имеете на алгоритме по сравнению с алгоритмом B.

можно создать подобный эксперимент: случайным образом генерируйте $BIG_NUMBER возможных векторов длины 7 или меньше. Хешируйте их на алгоритме A, хешируйте их на алгоритме B, затем сравните число и серьезность коллизий.

После того, как Вы можете сделать это, можно использовать моделируемый отжиг или подобные методы для нахождения "магических чисел", которые работают хорошо для Вас. В моей работе, для данных словарей интереса и плотно ограниченного размера хэша, мы смогли заставить универсальный алгоритм работать хорошо на несколько естественных языков путем варьирования "магических чисел".

3
ответ дан 1 December 2019 в 16:32
поделиться

В зависимости от размера констант я должен был бы сказать, что степень хаоса во входном векторе окажет влияние на результат. Однако быстрый качественный анализ Вашего сообщения предложил бы, чтобы у Вас было хорошее начало:

  • Ваши исходные данные умножаются, поэтому увеличивая степень разделения между подобными входными значениями на повторение (например, 65 + 66 намного меньше, чем 65 * 66), который хорош.
  • Это детерминировано, если Ваш вектор нельзя считать набором и не последовательностью. Для ясности, должен v = {23, 30, 37} отличаться, чем v = {30, 23, 37}?
  • однородность распределения будет варьироваться на основе диапазона и хаоса входных значений в против Однако, это верно для обобщенного целочисленного алгоритма хеширования также.

Из любопытства, почему не только используют существующий алгоритм хеширования для целых чисел и выполняют некоторую интересную математику на результатах?

2
ответ дан 1 December 2019 в 16:32
поделиться

Python раньше хешировал кортежи этим способом ( источник ):

class tuple:
    def __hash__(self):
        value = 0x345678
        for item in self:
            value = c_mul(1000003, value) ^ hash(item)
        value = value ^ len(self)
        if value == -1:
            value = -2
        return value

В Вашем случае, item всегда было бы целое число, которое использует этот алгоритм:

class int:
    def __hash__(self):
        value = self
        if value == -1:
            value == -2
        return value

Это действительно не имеет никакого отношения к внутреннему продукту, хотя... поэтому, возможно, это не много справки.

1
ответ дан 1 December 2019 в 16:32
поделиться

В то время как я мог бы полностью неправильно понимать Вас, возможно, это - хорошая идея рассматривать вектор как поток байтов, и сделать некоторые знают хеш на нем, т.е. SHA1 или MD5.

Просто для уточнения, те хеши, как известно, имеют хорошие свойства хеша, и я полагаю, что нет никакой причины заново изобрести велосипед и реализовать новый хеш. Другая возможность состоит в том, чтобы использовать известный CRC angorithm.

0
ответ дан 1 December 2019 в 16:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: