Ответ
В среднем случае вставка элемента в хеш-таблицу имеет сложность O(1), так как вычисление хеша и доступ к корзине происходят за константное время.
Однако в худшем случае (при коллизиях или плохой хеш-функции) сложность может деградировать до O(n), если все элементы попадают в одну корзину и требуется перебор списка.
Пример с JavaScript:
const map = new Map();
map.set('key', 'value'); // O(1) в среднем Ответ 18+ 🔞
Ну вот, смотри, опять эти умники с O-большим лезут, как будто без них жизнь не мила. Слушай сюда, я тебе на пальцах объясню, как эта штука работает, а то ты, наверное, думаешь, что хеш-таблица — это какая-то магия, блядь.
Представь себе шкаф с кучей ящиков. Это наша таблица. У тебя есть ключ, например, «пульт от телика». Чтобы не искать его по всей квартире, ты быстро прикидываешь в уме — «а, пульт, на букву П». И идешь к ящику «П». В идеале там лежит только пульт, ты хватаешь его за O(1) — то есть мгновенно, блядь. Это и есть средний, хороший случай. Вычислил хеш (букву «П»), подошел к ящику — готово.
Пример в коде, смотри, не трогай его:
const map = new Map();
map.set('key', 'value'); // O(1) в среднем
Вот, set — это ты положил пульт в ящик. Быстро и обычно без проблем.
А теперь про худший случай, ёпта. Допустим, хеш-функция у тебя — говно полное. Она всем ключам выдает одну и ту же букву. Например, и «пульт», и «носки», и «документы» — всё на букву «Х». И что получается? Ты идешь к ящику «Х», а там, блядь, уже дохуя всего навалено. И чтобы найти свои носки, тебе приходится перерывать всю эту кучу, предмет за предметом. Это уже O(n), то есть время растет прямо пропорционально количеству барахла в ящике. Если у тебя там миллион носков — пиздец, искать будешь долго.
Или второй вариант — коллизии. Это когда два разных ключа случайно дали один хеш. Ну, типа, «паспорт» и «помада» — оба на «П». Ящик «П» уже занят паспортом. Приходится либо запихивать помаду сверху (создавать цепочку, список), либо искать другой свободный ящик. Но если таких коллизий овердохуища, и все лезут в один ящик, опять получаем тот же долгий перебор.
Короче, суть в чём: хеш-таблица — это охуенно быстро, пока хеш-функция не кривая и данные распределены нормально. А если нет — то welcome в ад линейного поиска, где ты будешь рыться в одной корзине, как последний бомж на свалке.
Так что, когда говорят «O(1) в среднем», имеют в виду именно это: обычно работает на ура, но если накаркать — деградирует в полную жопу. Всё, вопрос закрыт, иди работай.