Как найти возможные индексы 3-го наименьшего элемента в макс куче от 1 до n отдельных элементов? Я знаю, что самый маленький элемент будет в любом месте листа. второй самый маленький будет от n/2 до n для n больше, чем 3 Но я не знаю, чтобы рассчитать для 3-го наименьшего. Какие-либо предложения?индекс 3-го наименьшего элемента в макс куче
ответ
Третий-самый маленький элемент имеет не более двух потомков, а это означает, что его ребенок (ren) является листом или листом. (Чтобы доказать это, вам также нужно доказать, что для элемента с одним ребенком невозможно иметь нелистный лист. Легкий, но утомительный.)
Листья, как вы почти замечаете, имеют индексы в диапазон [floor(n/2)+1, n]
. Если n/2
является целым числом, то этот элемент имеет ровно один дочерний элемент (который является листом), поэтому добавление дает диапазон индексов, который может содержать второй по величине элемент.
Элемент, у которого первый ребенок находится в диапазоне листьев [floor(n/2)+1,n]
, имеет не более двух детей, и нет нелистового ребенка. Этот диапазон смежна с диапазоном [ceil (n/2), n], и объединение двух диапазонов обеспечивает все возможные положения для третьего по величине элемента.
Первый дочерний элемент в i
имеет индекс 2i
, поэтому первый элемент, первый ребенок, по крайней мере floor(n/2)+1
является floor(n/4)+1
.
Таким образом, возможные индексы, в которых вы можете найти третий по величине элемент, - это диапазон: [floor(n/4)+1,n]
.
Вот еще один подход. Возьмите некоторый элемент по индексу i
. Его непосредственными детьми являются 2i
и 2i+1
; его внуками являются 4i, 4i+1, 4i+2, 4i+3
и, в общем, его потомки на уровне k
являются 2ki, 2ki+1, ..., 2ki + 2ki-1
; в сумме, [2ki, ..., 2k(i+1)-1 ]
. Эти диапазоны, конечно, не перекрываются (действительно, если i
не является 1
, они даже не смежны). Так что если i
имеет по крайней мере одного потомка на уровне k
, он также имеет полный набор потомков для всех k' < k
, из которых 2k-2
.
Из всего этого можно сделать вывод:
Если
n ≥ 2ki and n < 2k(i+1)
, тоi
имеет:2ki-2
потомков на каком-то уровне менееk
n - 2ki+1
потомков на уровнеk
;Всего:
n-1
Потомки.
Если
n ≥ 2k(i+1) and n < 2k+1i
, тоi
имеет:- точно
2k+1-1
потомки.
- точно
Грубо говоря, это означает, что последние 2k
элементы не найдены в первой 1/2k
части основного массива кучного в.
Я тоже получил то же решение ... пришел к окончательному выводу, что формула для индексов для i (th) наименьших элементов будет [n/(2^(i-1))] до n. Спасибо за помощь :) – chotu123
Это больше похоже на «индексы для 2^i (th) самых маленьких элементов». См. Править. (Не полный, но вы, вероятно, можете завершить его самостоятельно, если я не вернусь к нему вовремя.) – rici
- 1. Индекс возврата наименьшего элемента в массив
- 2. matlab индекс следующего наименьшего элемента в матрице
- 3. Как получить индекс наименьшего элемента в массиве в matlab?
- 4. Как найти индекс наименьшего элемента в awk, как это?
- 5. Как изменить приоритет значения в макс-куче?
- 6. Поиск элемента в куче
- 7. Как получить индекс наименьшего элемента из несортированного массива?
- 8. Kth алгоритм наименьшего элемента
- 9. Индекс обратного отсчета наименьшего числа вместо наименьшего числа
- 10. Индекс возврата наименьшего значения в вектор?
- 11. Самый маленький элемент в двоичной куче?
- 12. Как я могу найти определенный индекс в куче в C++?
- 13. Макс. Элемента коллекции?
- 14. Поиск индекса k-го наименьшего элемента в массиве эффективно (итеративный)?
- 15. Выбор Сортировка - Индекс Мин./Макс.
- 16. Макс. Индекс массива SAP HANA
- 17. Индекс наименьшего числа, начинающийся с определенного индекса
- 18. Сумма после наименьшего элемента массива в C++
- 19. Получение наименьшего общего элемента в массиве
- 20. Поиск второго наименьшего элемента в массиве
- 21. Поиск наименьшего элемента в многомерном массиве
- 22. Удаление наименьшего элемента в двоичном дереве
- 23. Какова временная сложность нахождения минимального элемента в мини-куче?
- 24. Удаление верхнего элемента в двоичной куче
- 25. Найти индекс наименьшего элемента в массиве не в другом массиве (Matlab)
- 26. Расчет наименьшего возможного дерева
- 27. Индекс элемента в OrderedMap
- 28. Индекс элемента в отсортированный()
- 29. Как найти индекс наименьшего члена этого вектора в Clojure?
- 30. Как мне найти индекс наименьшего значения в массиве int?
В настоящей [двоичной max-heap] (http://en.wikipedia.org/wiki/Binary_heap) наименьшие (n + 1)/2 узлы будут покинуты, если я правильно помню свои структуры данных. Таким образом, ваше третье наименьшее значение будет одним из этих узлов или непосредственным родителем одного из этих узлов. Я не могу понять алгоритм замкнутой формы, способный извлечь это значение в O (1) раз, даже если куча уже полностью построена. – WhozCraig