выборка из несортированного списка
- From
- Alexey Kruglov (2:5015/70.5)
- To
- Stepan M Pechkin
- Date
- 2002-08-12T22:33:11Z
- Area
- RU.ALGORITHMS
nPuBeT, Stepan!
Вторник 30 Июля 2002 21:36, Stepan M Pechkin wrote to All:
SP> Дан несортированный список длиной n. Из него нужно выбрать _по
SP> порядку_ lg(n) максимальных элементов за количество операций, линейное
SP> от n. Второй вопрос: насколько можно увеличить количество выбираемых
SP> по порядку максимальных, чтобы все еще укладываться в линейное время?
Никто, вроде, не ответил, так что отвечу.
1. Можно построить кучу из этих элементов за время O(n), потом выбрать k
максимальных в подрядке убывания за O(k ln n), т.к. из кучи можно достать max
элемент за O(ln n). => при k=ln(n) это все будет работать за O(n+k ln n)=O(n).
2. При k=O(n/ln n) тоже будет работать за O(n).
Про кучи (heap; не та, в которой выделяется динамическая память, а та, которая
в heapsort) есть, например, в
Кормен, Лейзерсон, Ривест. Алгоритмы: построение и анализ. М.: МЦНМО, 2000.
В последнем переводе Кнута кучи называются пирамидами.
nOkA. Alexey.
--- GoldED+/386 1.1.4.7
* Origin: 6DFA 1186 7576 DE60 6CCB EB39 AD81 1733 EEBB 970A (2:5015/70.5)