Хэш-функция — это математический алгоритм, который преобразует входные данные произвольного размера в выходную битовую строку фиксированного размера (хэш). Основные свойства хорошей хэш-функции:
Пример простой хэш-функции в C#:
public int SimpleHash(string input)
{
int hash = 0;
foreach (char c in input)
{
hash = (hash * 31) + c;
}
return hash;
}
Хэш-таблица (или словарь) — это структура данных, которая использует хэш-функцию для эффективного хранения и извлечения данных. В C# реализована в классах Dictionary<TKey, TValue>
и HashSet<T>
.
Пример использования Dictionary в C#:
var employees = new Dictionary<int, string>();
employees.Add(1, "John Doe"); // Вставка
string name = employees[1]; // Поиск
employees.Remove(1); // Удаление
Метод цепочек:
Открытая адресация:
Dictionary
использует хэш-таблицу с методом цепочекGetHashCode()
Пример правильной реализации GetHashCode():
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override int GetHashCode()
{
unchecked // Для предотвращения переполнения
{
int hash = 17;
hash = hash * 23 + (Name?.GetHashCode() ?? 0);
hash = hash * 23 + Age.GetHashCode();
return hash;
}
}
}
хэш-функции преобразуют данные в уникальные идентификаторы фиксированного размера, а хэш-таблицы используют этот механизм для обеспечения быстрого доступа к данным, что делает их незаменимыми в высокопроизводительных приложениях.