Очень недорогая хеш-функция

Это зависит от плана, который вы выбираете для своего ресурса компьютерного зрения.

Если вы используете бесплатный экземпляр, вы можете делать 20 запросов в минуту. А если вы используете стандартный план, вы можете отправлять 10 запросов в секунду.

Более подробную информацию можно найти здесь: https://azure.microsoft.com/en-us/pricing/details/cognitive-services/computer-vision/

8
задан Eduardo 17 January 2009 в 18:41
поделиться

5 ответов

Каноническая форма этого h(x) = (a*x + b) mod n, где a и b являются константами, и n является размером Вашей хеш-таблицы. Вы хотите сделать n простое число, для получения оптимальным (выход) распределение.

Обратите внимание, что это чувствительно к определенному виду дистрибутивов - например, просто делая x mod n главным образом полагается на случайность битов младшего разряда; если они не будут случайны в Вашем наборе, то Вы получите довольно значительный скос.

Bob Jenkins разработал несколько очень хороших хеш-функций; вот одно специально предназначенное, чтобы быть простым реализовать в аппаратных средствах: http://burtleburtle.net/bob/hash/nandhash.html

Для большого количества различных хеш-функций обсуждения дизайна, и т.д., видят остальную часть сайта: http://burtleburtle.net/bob/hash/

5
ответ дан 5 December 2019 в 15:27
поделиться

CRC?

Уже существует большая поддержка оборудования для этого также.

2
ответ дан 5 December 2019 в 15:27
поделиться

Перепроводные биты в произвольном порядке и берут ниже log2(n) биты

Или просто возьмите ниже log2(n) биты, если Ваши данные равномерно распределяются.

1
ответ дан 5 December 2019 в 15:27
поделиться

Если Вы действительно говорите аппаратные средства (по сравнению с программным обеспечением или аппаратной реализацией программного обеспечения), и Ваше количество блоков хеша n может быть записано как n = 2 м - 1, самым легким является, вероятно, линейный сдвиговый регистр обратной связи (LFSR) максимальной длины, которого CRC является экземпляром.

Вот один способ, которым Вы могли использовать сдвиговый регистр Мбит для создания хеша пакета данных (удостоверьтесь, что все данные последовательно представлены как строка K-bit, если у Вас есть более короткие строки, затем заполняют один конец нулями):

  1. Инициализируйте состояние LFSR (CRC-32 использует все 1's; все нули, вероятно, плохи),
  2. Переключите биты на нижний регистр своих данных
  3. (Дополнительно) Переключите на нижний регистр дополнительные j нули (j между m, и 2 м, вероятно, хороший выбор); это добавляет некоторое дополнительное хеширование для сокращения прямой корреляции между битами ввода/вывода
  4. Используйте содержание сдвигового регистра Мбит как Ваше хешированное значение.
1
ответ дан 5 December 2019 в 15:27
поделиться

Я полагаю, что это - самый лучший хеш для этой проблемы (быстрее, чем лучшее распределение по модулю), учитывая, что все Ваши числа в 0.. N имеют ту же вероятность:

h = z * n / N;

Где все значения являются целыми числами, таким образом, у Вас есть целочисленное деление. Таким образом, каждое значение между 0.. N отображается на точно том же количестве значений в n.

Например, когда n=3 и N=7 (оценивает 3 и 7 не включенный в диапазоны), хеши - это:

z * n / N = hash
----------------
0 * 3 / 7 = 0
1 * 3 / 7 = 0
2 * 3 / 7 = 0
3 * 3 / 7 = 1
4 * 3 / 7 = 1
5 * 3 / 7 = 2
6 * 3 / 7 = 2

Так каждый значения хэш-функции используются одинаково часто, рядом с 1. Просто заботьтесь это n*(N-1) не переполняется.

Если N является питанием 2, можно заменить подразделение путем смещения. например, если N=256:

h = (z * n) >> 8;
2
ответ дан 5 December 2019 в 15:27
поделиться
Другие вопросы по тегам:

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