Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > посчитать медиану не держа весь массив в памяти


Автор: mrgloom 3.9.2012, 17:08
возможно ли посчитать медиану не держа весь массив в памяти?

Автор: Akina 3.9.2012, 17:19
Только для сортированного массива smile

Автор: Фантом 3.9.2012, 17:20
Цитата(mrgloom @  3.9.2012,  18:08 Найти цитируемый пост)
возможно ли посчитать медиану не держа весь массив в памяти? 

Нет. Такие фокусы только с разными средними проходят. 

Автор: maxdiver 3.9.2012, 17:41
Цитата(Akina @ 3.9.2012,  17:19)
Только для сортированного массива smile

Да, но ведь существуют алгоритмы внешней сортировки, для которых не требуется загружать весь массив в оперативную память (а выгружая ненужные части массива во внешнюю память - например, на жесткий диск). Следовательно, можно надеяться на то, что существуют аналогичные алгоритмы внешнего нахождения медианы.

Автор: Akina 3.9.2012, 17:57
Если можно привлечь внешнюю сортировку - то собсно задача-то решена...


Автор: Фантом 3.9.2012, 20:12
Цитата(Akina @  3.9.2012,  18:57 Найти цитируемый пост)
Если можно привлечь внешнюю сортировку - то собсно задача-то решена...

Это-то да, но тогда это стрельба из пушки по воробьям.

Автор: Pavia 3.9.2012, 20:42
Существует множество алгоритмов поиска медианы. В том числе и без сортировки.

Автор: Akina 3.9.2012, 20:46
Эммм... почему, если не секрет? ведь по сравнению с реальной сортировкой алгоритм будет значительно упрощён - нам не требуется получить сортированный массив, требуется только найти средний элемент (или пару), следовательно, начальные и конечные элементы можно никуда не записывать, а только подсчитывать их количество.
Зримое улучшение можно искать, если  о массиве что-то заранее известно наверняка (например, что он ограничен сверху и снизу, что распределение элементов равномерное или нормальное и т.п.).

Добавлено через 4 минуты и 58 секунд
Pavia, но они многопроходны. И на больших массивах всё равно дают те же O(N*logN). Но обычно работают хуже при высокой неравномерности распределения значений по диапазону.

Автор: Pavia 3.9.2012, 22:24
Akina, 
Есть алгоритмы за O(n), для любого массива.

Книга "Алгоритмы. Построение и анализ. Издание 2-е"

Автор: maxdiver 17.9.2012, 18:42
Вот хорошая статья на тему внешнего поиска медиан: "External Selection" (Jop F. Sibeyn): http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.43.9168&rep=rep1&type=pdf. Описаны рандомизированный и детерминированный алгоритмы, самый быстрый из которых - работает за N+o(N) операций чтения и o(N) операций записи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)