Все темы
80

Куча: дерево, сложенное в массив

Tier 1Закрыто

Где применяется

1. Задача

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

Задача такая. У тебя есть набор чисел, и он меняется. Снова и снова тебе нужно самое маленькое число из тех, что есть сейчас. А пока ты работаешь, в набор приходят новые числа.

Можно держать весь набор отсортированным. Но это лишняя работа: при каждой вставке приходится сдвигать элементы, чтобы новое число встало точно на своё место. Полный порядок тебе не нужен. Нужно одно: самое маленькое число всегда лежит там, где его можно прочитать за один шаг.

Куча (по-английски heap) делает ровно это. Ей не нужны узлы и ссылки между ними: она живёт в обычном массиве. В этом уроке ты соберёшь две её части: как дерево раскладывается по массиву и как вставить новое число.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит

На LeetCode

LeetCode редко просит отдельно вставку в кучу, поэтому эти задачи тренируют вторую половину урока, нумерацию дерева как массива. Родитель i стоит на (i минус 1) >> 1, дети на 2i + 1 и 2i + 2, и вопросы о форме дерева превращаются в арифметику. Задачи на кучу начинаются с урока 81.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности