2015-07-24 1 views
1

Учитывая кучу и некоторое число k в куче, как я могу найти числа r, которые меньше, чем k в O (r)?Поиск всех чисел в куче, которая меньше, чем k в линейном времени

Мне был предложен алгоритм, который я не понимаю: Перемещение с предварительным порядком в куче, а в то время как значения меньше, чем k (и! = Null), напечатайте их. И, предположительно, это берет O (3r + 1) = O (r) проверок.

Может ли кто-нибудь объяснить мне решение? Благодаря!

+0

http://stackoverflow.com/questions/22574580/algorithm-for-finding-the-largest-k-numbers-in-a-max-heap-of-size-n-in-ok-time – lavin

+0

Вы может упоминаться, что это мини-куча или максимальная куча. – greybeard

ответ

1

Единственные цифры, которые нужно посетить в куче, - это числа, меньшие, чем k, и их ближайшие дети. Как только вы увидите, что ребенок слишком велик, вы знаете, что вам не нужно смотреть на своих детей. Каждое число в куче имеет не более двух детей, поэтому это ограничивает около 2r на числа, которые вы посещаете, что вам не нужно (ясно, что r = 0 - особый случай).