Я недавно работал с алгоритмом siftDown
, используемым для построения двоичных куч. В книге «Алгоритмы и структуры данных: базовая панель инструментов» в упражнении 6.5 указано, что для данной реализации этого алгоритма необходимы сравнения элементов 2*log(n)
. Теперь я попытался понять, почему это так, но я не мог. Почему это правильно?Алгоритм SiftDown Количество сравнений
ответ
При вызове siftDown(i)
сначала выполнить два элемента сравнения:
- Первый находится между
h[2i]
иh[2i+1]
. - Второй период находится между
h[i]
иh[m]
.
После выполнения двух сравнений вы рекурсивный вызов siftDown(m)
где m=2i
или m=2i+1
. То есть, каждый вызов siftDown()
с кучей элементов n
приводит к получению двух элементов сравнения и вызову siftDown()
с кучей элементов n/2
.
Поэтому T(n)
число сравнений при вызове siftDown()
с n
-элементной кучей, удовлетворяет:
T(n) = 2 + T(n/2)
Решение этого рекуррентного соотношения
T(n) = 2logn
Вы можете видеть, что вышеуказанное соотношение решает до 2logn
, наблюдая, что каждый раз выполняется ровно 2 элементарных сравнения, а число раз равно logn
(потому что если вы начинаете с n
и продолжаете делиться на 2 снова и снова, вы делаете это после logn
делений).
Следовательно, общее количество сравнений элементов, составленное siftDown()
, составляет около 2logn
.
- 1. Алгоритм сопоставления сравнений
- 2. QuickSort Algorithm Количество сравнений
- 3. оптимизировать количество сравнений
- 4. Вставка сортировки, количество сравнений
- 5. Требуется минимальное количество сравнений
- 6. Количество сравнений для быстрой сортировки
- 7. Количество сравнений для кучи Сортировка
- 8. Количество сравнений в сортировке сортировки?
- 9. Выполняет ли алгоритм KMP меньшее количество сравнений, чем упрощенный алгоритм Boyer-Moore?
- 10. Какое наихудшее количество ключевых сравнений слияния?
- 11. Как рассчитать количество сравнений в сортировке слияния?
- 12. Количество подсчетов и сравнений строк (KMP)
- 13. Как найти количество сравнений в методе sort()
- 14. Точное количество сравнений в Вставка Сортировка
- 15. Подсчитайте количество сравнений для двоичного поиска
- 16. Количество сравнений с использованием сортировки слияния
- 17. Exchange sort количество сравнений и обменов
- 18. Количество сравнений в прямом выборе Сортировка
- 19. Среднее количество сравнений для отказа в этом алгоритме последовательного поиска?
- 20. Алгоритм сортировки, который минимизирует максимальное количество сравнений, в которых участвуют отдельные элементы
- 21. количество сравнений в одновременном максимального и минимального элемента
- 22. Количество сравнений для разных списков в алгоритмах сортировки
- 23. Алгоритм: Найти наименьшее количество
- 24. Сортировка/подсчет нелинейных сравнений
- 25. реализация функции siftdown нарушает официальное определение кучи?
- 26. Число сравнений бинарного поиска
- 27. Векторизация сравнений
- 28. теоретический анализ сравнений
- 29. Следует ли проверять условия цикла на общее количество сравнений?
- 30. SelectionSort и BubbleSort - как подсчитать количество сравнений и обмен номерами?