awesome-everything EN
↑ Обратно к восхождению

Алгоритмы с нуля

Хеширование: тест с выбором ответа

Суть Синтез по всему юниту в формате выбора: hash function, collision, chaining, load factor, amortized resize и паттерны поверх hash map и hash set.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на middle-высоте — в небе
◷ 13 min

Шесть вопросов, которые проходят через весь юнит. Каждый — это решение, которое вы принимаете, когда тянетесь к hash map на собеседовании или в реальном коде: не определение для пересказа, а tradeoff, который нужно защитить.

Цель

Убедитесь, что вы связываете hash function, обработку collision, load factor и amortized resize с повседневными паттернами — seen, частотный подсчёт, группировка, — к которым вели отдельные уроки.

Викторина

Hash set даёт O(1) поиск в среднем. На каком единственном факте на самом деле держится это «в среднем»?

Викторина

Два разных ключа хешируются в один и тот же индекс бакета. При separate chaining что происходит и сколько это стоит?

Викторина

В таблице 10 элементов на 5 бакетов, и она никогда не делает resize. Если продолжать вставлять без resize, что произойдёт со стоимостью поиска и почему?

Викторина

Вставку в hash table называют O(1) amortized, но одна вставка может стоить O(n). Как оба утверждения верны одновременно?

Викторина

Нужно определить, повторяется ли хоть одно значение в потоке, и отдельно — найти два числа, дающих в сумме target. Какой паттерн хеширования подходит каждому?

Викторина

Сервис хеширует строки от пользователя в таблицу, а атакующий заливает входами, специально подобранными так, чтобы все коллидировали в один бакет. В чём отказ и в чём настоящий фикс?

Итог

Сквозная линия юнита — одна цепочка рассуждений: hash function превращает ключ в индекс для доступа O(1) в среднем; collision неизбежны, и chaining хранит их в списках на бакет; load factor задаёт среднюю длину цепочки, поэтому таблица делает resize — удвоение и перехеширование, — чтобы держать её ограниченной: O(n) на resize, но O(1) amortized; а сверху лежат повседневные паттерны — seen, дополнение, частотный подсчёт, группировка. Та же механика деградирует к O(n) при плохой или враждебной hash function, поэтому рандомизированный хеш важен для недоверенного входа.

Продолжить восхождение ↑Хеширование: тест на припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources2
expand
  1. 01
  2. 02

Trademarks belong to their respective owners. Editorial reference only.