Что лучше - сбалансированное двоичное дерево поиска или максимальная куча для извлечения максимального элемента?

Поскольку для сбалансированного BST потребуется O(log(n)) времени, извлекается максимум (под извлечением я имею в виду как найти, так и удалить элемент Max). С другой стороны, Max-heap также потребует O(log(n)) времени на извлечение максимального элемента.

Кто-нибудь из них имеет преимущество перед другими в работе Extract-Max?


person Community    schedule 09.05.2017    source источник
comment
Я знаю это. Но что, если мы хотим выполнить своего рода операцию extract-max. Итак, какая структура данных будет подходящей: сбалансированная куча bst или max.   -  person    schedule 09.05.2017
comment
В некоторых особых случаях BST потребует только одну операцию больше, чем Heap, в противном случае оба могут извлечь максимум за одинаковое количество операций. Но эта еще одна операция незначительна.   -  person Sanket Makani    schedule 09.05.2017
comment
@GAURANGVYAS Поиск самого правого узла сбалансированного Bst займет O (log (n)), а выполнение операции удаления займет O (1).   -  person    schedule 09.05.2017
comment
Хорошо, что поиск максимального элемента займет время O (log n), так как нам нужно найти самый правый элемент, а затем удаление займет O (1), так как это будет листовой узел или узел только с одним дочерним элементом. Правильно @ Sanket Makani и @Satyendra   -  person GAURANG VYAS    schedule 09.05.2017


Ответы (1)


Размышляя о структурах данных, вы должны учитывать их сложность как во времени, так и в пространстве. Здесь то же самое с пространством, поэтому давайте сосредоточимся на времени:

Сбалансированный BST:

сбалансированный BST поддерживает h = O (lg n) ⇒ все операции выполняются за время O (lg n).

Max-Heap:

Найти max O (1), удалить max O (lg n)

Это означает, что их временная сложность также одинакова.

Также, прочитав этот ответ, вы сделаете тот же вывод:

... max-heap или двоичное дерево хорошо подходят.

Однако обратите внимание, что балансировка уже созданного BST - это операция O (n) (Балансировка BST). Так что, если бы мне тоже пришлось это сделать, я бы выбрал максимальную кучу.

Для расширенного использования прочтите который структура данных, которая будет использоваться для доступа к минимальному / максимальному значению в постоянное время?


Источники: 1, 2.

person gsamaras    schedule 09.05.2017
comment
Каков ваш вывод по этому поводу? - person ; 09.05.2017
comment
Так что для этой операции оба хороши, когда дело доходит до эффективности. На вашем месте я бы посмотрел, что проще реализовать или есть ли у меня доступ к библиотеке, которая предоставляет такую ​​структуру данных. Например, если я пишу на c ++ и есть библиотека, которая мне нравится, которая предоставляет кучу , Я бы пошел на это! - person gsamaras; 09.05.2017
comment
Я думаю, что балансировка дерева - это накладные расходы. И меня пока не волнует простота реализации. - person ; 09.05.2017
comment
О, я думал, что вопрос в том, что, учитывая, что у меня уже есть эти структуры данных, что лучше @SatyendraYadav. Да, позвольте мне обновить свой ответ. Кстати, вы можете задать новый вопрос, а не редактировать тот, который вы уже разместили и получили на него ответ. Таким образом мы сохраняем компактность постов! знак равно - person gsamaras; 09.05.2017
comment
@gsamaras Вы предоставили ссылку о балансировке BST, но там пользователь балансирует все дерево, которое изначально не сбалансировано. Но в этом случае перебалансировка требуется только после операции удаления (и это тоже только в некоторых случаях) и не займет O (n) времени. Балансировка ранее несбалансированного дерева отличается от балансировки, которая выполняется в этом случае. - person GAURANG VYAS; 09.05.2017
comment
Правильный @GAURANGVYAS! Это другой вопрос, господин Ядав. - person gsamaras; 09.05.2017