Представьте себе огромную библиотеку, в которой вы хотите найти «Пикник на обочине». Как это сделать? Наивный способ — перебирать. Взять первую книгу, понять, что это не Стругацкие, поставить обратно, взять следующую, ... и так далее. В лучшем случае «Пикник на обочине» окажется в первой ячейке и мы справимся за один ход. В худшем придется перебрать все n книг библиотеки, за за O(n) шагов. Но можно быстрее. Для этого определим функцию, которая получает название книги и возвращает число. Такая функция-справочник: «Пикник на обочине» -> 1 «Декамерон» -> 2 «Уловка 22» -> 3 ... Положим «Пикник на обочине» на первую полку, «Декамерон» на вторую, и так далее. Когда нам понадобится книга, мы отправим название в эту функцию и сразу получим номер ячейки. Теперь книгу можно найти всего за два шага: 1) вычислить номер книги по названию, 2) найти ее на полке с этим номером. Получается сложность O(1) и это очень быстро! Положить книгу на свое место тоже можно за фиксированное число шагов, вне зави