Объяснение о хешировании и его использовании для сжатия данных

StackOverflow https://stackoverflow.com/questions/445202

  •  22-07-2019
  •  | 
  •  

Вопрос

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

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

Спасибо

Это было полезно?

Решение

Одно только хеширование не имеет ничего общего с памятью.

То, для чего это часто используется, является хеш-таблицей. Хеш-таблицы работают, вычисляя хеш того, от чего вы пользуетесь ключом, который затем используется как индекс в структуре данных.

Хеширование позволяет уменьшить ключ (строку и т. д.) до более компактного значения, такого как целое число или набор битов.

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

Обратите внимание, что хэши не уникальны! Хороший алгоритм хеширования минимизирует коллизии, но они не предназначены для уменьшения до уникального значения - это невозможно (например, если ваш хеш выдает 32-битное целое число, ваш хеш будет иметь только 2 ^ 32 уникальных значения).

Другие советы

Это фильтр Блума , о котором вы говорите? При этом используются хэш-функции, чтобы получить эффективный способ проверки членства в наборе. Если это так, то смотрите ссылку для объяснения.

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

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

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

Это может быть объяснено, если хеширование выполняется не для создания истинной хеш-таблицы, а для создания индекса в таблице строк / блоков памяти. Если в ваших данных была одна и та же строка (или последовательность памяти) 20 раз, а затем вы заменили все 20 экземпляров этой строки только ее индексом хеш-таблицы, вы можете таким образом добиться сжатия данных. Однако если в каждой таблице содержится фактическая цепочка столкновений для каждого хеш-значения, то, что я только что описал, не то, что происходит; в этом случае причиной хеширования, скорее всего, будет ускорение выполнения (путем предоставления быстрого доступа к сохраненным значениям), а не сжатие.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top