Идеальная сложность хеширования - PullRequest
0 голосов
/ 02 ноября 2018

Будет ли идеальный хеш иметь удаление вставки и поиск за 0 (1) раз? Если так, то почему бы компьютерным ученым не использовать идеальное хеширование все время, если не сложность времени?

1 Ответ

0 голосов
/ 02 ноября 2018

Будет ли идеальный хеш иметь удаление вставки и поиск за 0 (1) раз?

Да, поскольку вы получите только одноэлементные сегменты. Таким образом, вы получаете столько ведер, сколько есть элементов.

Если так, то почему ученые-компьютерщики не используют идеальное хеширование все время, если нет, какова будет временная сложность?

Одна из причин теоретическая . Идеальная хеш-функция является инъективной, и определение такой функции может быть трудным, если не невозможным.

Рассмотрим следующую тривиальную структуру:

{
  int x;
  int y;
}

Как правило, вы хотите, чтобы ваша функция hash() давала уникальные результаты для всех возможных значений x и y, это может быть невозможно. В основном для тривиальных, таких как x + y, x * y, x ^ y, вы всегда можете создать другой вход, который дал бы тот же результат.

С другой стороны, это возможно (как |N^2| = |N| = aleph-null) - см. Функция сопряжения Кантора .

Другая причина - практическая - ваша функция возврата должна иметь тип возврата. Возвращаемый тип должен быть способен хранить все возможные результаты внедрения - поэтому для хэша двух 32-битных значений потребуется 64 бита, для трех 3 * 32 и т. Д. (Сравните, что вышеупомянутая функция сопряжения эффективно умножает аргументы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...