Предположим, у нас есть двоичная куча из n элементов и мы хотим вставить еще n элементов (не обязательно один за другим). Какое общее время потребуется для этого?
Я думаю, что это тета (n logn), так как одна вставка занимает logn.
Предположим, у нас есть двоичная куча из n элементов и мы хотим вставить еще n элементов (не обязательно один за другим). Какое общее время потребуется для этого?
Я думаю, что это тета (n logn), так как одна вставка занимает logn.
Предположим, что нам дано:
У нас есть следующие свойства insert:
Таким образом, для каждого случая у нас есть
В худшем случае мы вставляем новое минимальное значение, поэтому up-heap должен пройти всю ветвь.
BestCase — это когда для минимальной кучи (куча с минимальной вершиной) мы вставляем БОЛЬШОЕ (самое большое на обновленной ветке) значение (поэтому ап-куча немедленно останавливается).
Вы спрашивали о серии из n операций над кучей, содержащей уже n элементов, ее размер будет расти
from n to 2*n
что такое асимптотически...
n=Θ(n)
2*n=Θ(n)
Что упрощает наши уравнения. (Нам не нужно беспокоиться о росте n , так как он растет на постоянный коэффициент).
Итак, имеем операцию «для n вставок»:
P.S. Для отображения символов Theta Θ , Omega Ω у вас должна быть установлена/совместима UTF-8.
задано: куча из n элементов и еще n элементов, которые нужно вставить. Таким образом, в конце будет 2 * n элементов. поскольку куча может быть создана двумя способами: 1. Последовательная вставка и 2. Метод построения кучи. Среди этих методов сборки кучи требуется O (n) времени для создания кучи, что объясняется в Как построить кучу может быть O ( n) временная сложность?. поэтому общее требуемое время составляет O (2 * n), что совпадает с O (n)
это не theeta(nlogn)... его порядок(nlogn), так как некоторые из вставок могут занять меньше точного времени logn... поэтому для n вставок потребуется время ‹=nlogn
=> временная сложность=O(nlogn)