TwiddleLab / Код / Структуры данных, которые видно
Кучи и очереди с приоритетом
Что ты узнаешь
- Очередь с приоритетом выдаёт сначала самый срочный элемент, а не самый старый.
- Куча делает это деревом, где каждый родитель не менее срочный, чем его дети, поэтому наверху всегда самый срочный.
- Вставка: добавь в конец и поднимай, пока он важнее родителя. Взятие: последний элемент прыгает наверх и опускается. Несколько обменов, один путь.
- Дерево живёт в простом списке: родитель i это (i - 1) // 2, дети это 2i + 1 и 2i + 2.
Как идёт урок
В игре ждут события. Какое случится следующим?
Не самое старое, а самое срочное. Меньше число = срочнее. Нажми на следующее, три раза.
Куча, где самое срочное всплывает наверх.
Каждый родитель должен быть срочнее своих детей. Новое событие встаёт вниз: поднимай его, пока нужно.
После обмена бывший родитель оказывается под новым узлом, который его важнее, а другого своего ребёнка он и так был важнее. Поэтому правило выполняется везде, кроме, может быть, места между новым узлом и его новым родителем. Проверь там и повтори.
Дерево на самом деле список.
Прочитай дерево ряд за рядом, слева направо, и получится список внизу. Найди узлы в списке.
Куча как очередь с приоритетом.
Очередь с приоритетом всегда выдаёт следующим самый срочный элемент. Куча это обычный способ её построить.
Правило кучи: каждый родитель не менее срочный, чем его дети. Поэтому верх, индекс 0, самый срочный.
Она хранится в списке: родитель i это (i - 1) // 2, дети это 2i + 1 и 2i + 2. Вставка поднимает, взятие опускает.
Обслужи самое срочное событие.
Верх уходит. Последний элемент прыгает на его место. Опускай его, пока правило снова не выполнится.
Шторм событий.
События приходят и обслуживаются вперемешку. Держи кучу кучей. Мало промахов даёт звёзды.
Напиши всплытие.
1 только что добавили в конец кучи. Поднимай её, пока она важнее родителя.
Как ИИ в игре находит путь: A*.
A* держит клетки, которые может исследовать, в куче и всегда берёт лучшую. Побудь кучей: выбери клетку, которую он исследует следующей.
Твой код строит кучу.
Приходят семь событий. Твоё всплытие из прошлого шага ставит каждое на место.
Предыдущий урок: Двоичные деревья поиска · Следующий урок: Выбираем подходящую структуру · Часть курса: Структуры данных, которые видно
Уроки интерактивные и работают на JavaScript. Включи его, чтобы играть.