Блог пользователя tucnak

Автор tucnak, 12 лет назад, По-русски

Привет, ребята.

Мне срочно нужен код на С++ полиномиального хэширования. Выглядеть должно как-то так.

static uint hash(const uchar *p, int n) { // *p - строка, n - длина строки
     uint h=0;
     // код который мне нужен
     return h;
}

Нужно чтобы делалось все очень быстро. Очень, очень быстро.

  • Проголосовать: нравится
  • -36
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
static uint hash(const uchar *p, int n) { // *p - строка, n - длина строки
     uint h=0;
     while (n--) h = h * 257 + *(p++);
     return h;
}

Работает быстро. Коллизия находится еще быстрее :)

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Не-не-не. Это даже школьник напишет. Мне нужно с минимальной вероятностью коллизий.

    • »
      »
      »
      12 лет назад, # ^ |
        Проголосовать: нравится +17 Проголосовать: не нравится

      Товарищ, ты определись тебе быстро или коллизоустойчиво :)

      Вообще вероятность то у них всех наверное одинаковая, другое дело что для одних функций эту коллизию можно найти на глаз, в других — нет.

      Для этой смогешь? :)

  • »
    »
    12 лет назад, # ^ |
      Проголосовать: нравится +5 Проголосовать: не нравится

    Тогда уж

    static uint hash(const uchar *p, int n) { // *p - строка, n - длина строки
         uint h=0;
         return h;
    }