Почему в Java PriorityQueue дочерними элементами очереди [n] являются очередь [2 * n + 1] и очередь [2 * (n + 1)]? - PullRequest
0 голосов
/ 11 июля 2020

Реализация Min-Heap в Java представлена ​​PriorityQueue, которая, в свою очередь, поддерживается transient Object[] queue;

Цитата из его javado c:

Приоритетная очередь, представленная как сбалансированная двоичная куча: два дочерних элемента queue [n] - это queue [2n + 1] и queue [2 (n + 1)].

Почему не queue [2n] и очередь [2n + 1], как говорит здесь Тим Рафгарден https://www.coursera.org/learn/algorithms-graphs-data-structures/lecture/KKqlm/heaps-implementation-details-advanced-optional 08:00?

1 Ответ

1 голос
/ 16 июля 2020

Как упоминается в caco3 в комментариях, если элементы в приоритетной очереди хранятся в массиве, разработчики этой структуры данных приоритетной очереди могут решить сохранить первый элемент в массиве в позиции 0 или позиции 1.

Помещение первого элемента в позицию 0 означает, что дочерние элементы находятся в позициях 2N + 1 и 2N + 2. Когда первый элемент сохраняется в позиции 1, дочерние элементы находятся в позициях 2N и 2N + 1.

Любой выбор может привести к правильной реализации. Начиная с 0, вы экономите немного места. Но некоторые люди считают, что математика и код более элегантны, если начать с 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...