Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти K максимальных 
:(
    Опции темы
killobyte
  Дата 11.9.2010, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



Требуется найти k максимальных чисел в массиве длиной n.
Сложность алгоритма должна быть меньше O(nlogn)

Это сообщение отредактировал(а) killobyte - 11.9.2010, 22:22
PM MAIL ICQ Jabber   Вверх
W4FhLF
Дата 12.9.2010, 06:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Например эффективный алгоритм выбора (selection algorithm). Пример описан здесь: http://blogs.msdn.com/b/devdev/archive/200.../18/514482.aspx

Сложность будет  O(n + klogk) < O(nlogn) в большинстве практических случаев. При k == n/2 (что в большинстве случаев в пределах практически значимых задач) функция сложности для обоих случаев выглядит следующим образом:

user posted image

Хотя в конечно счёте многое будет зависеть от ваших n и реализации самого алгоритма. 

Достаточно подробно и хорошо эта проблема рассмотрена также у Кормена в книге "Алгоритмы. Построение и анализ". 




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
killobyte
Дата 12.9.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 1.9.2010

Репутация: нет
Всего: нет



спасибо большое, почитаю книгу.
PM MAIL ICQ Jabber   Вверх
esperanto
Дата 12.9.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



"Сложность будет  O(n + klogk) < O(nlogn) в большинстве практических случаев"

Формула не верная и лишенная смысла.







---------------------
А решение простое, находите к-ую порядковую статистику.  И все элементы ее большие и есть вашь ответ
Время работы линейное

Добавлено через 4 минуты и 9 секунд
Статистика находиться за линейное время, без всяких там  к лог (к)
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
W4FhLF
Дата 13.9.2010, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



esperanto, K статистика находится за O(n), это верно. А если требуется найти K максимальных не идущих подряд? Ну скажем необходимо взять K чётных максимальных. Тогда будет O(k/2*n) = O(n) чтоли?


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
baldina
Дата 13.9.2010, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата

Требуется найти k максимальных чисел в массиве длиной n.


Цитата

решение простое, находите к-ую порядковую статистику. 

знаете линейный алгоритм? хотелось бы увидеть.

W4FhLF прав насчет O(n + klogk). Идея - (частичная) сортировка k элементов множества. Partial sort называется.
http://www.lsi.upc.edu/~conrado/research/talks/aofa04.pdf
PM MAIL   Вверх
W4FhLF
Дата 13.9.2010, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Цитата(baldina @  13.9.2010,  08:33 Найти цитируемый пост)
знаете линейный алгоритм? хотелось бы увидеть.


Ну вообще линейный алгоритм для k-ой статистики есть. Например вот: http://www.rawkam.com/?p=870
Частичная сортировка необязательнй, перестановки в любом случае необходимы. 

Это сообщение отредактировал(а) W4FhLF - 13.9.2010, 16:13


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
baldina
Дата 14.9.2010, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



по ссылке алгоритм partial sort, который в худшем случае дает n^2. Линейное время будет в среднем случае (на случайных данных).

PM MAIL   Вверх
W4FhLF
Дата 14.9.2010, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



baldina, в главе "9.3 Алгоритм выбора с линейным временем работы в наихудшем случае", Кормен, Алгоритмы. Построение и анализ. 

Цитата, стр. 250:

Цитата

...
Таким образом, в наихудшем случае время работы 
алгоритма Select линейно зависит от количества входных элементов. 
...
Таким образом, время работы рассмотренных выше алгоритмов линейно, по- 
скольку в них не производится сортировка. Линейная зависимость от количества 
входных элементов не является результатом каких-то дополнительных предполо- 
жений о входных данных, как в случае алгоритмов сортировки, описанных в гла- 
ве 8. 



--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
baldina
Дата 14.9.2010, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Кормен, насколько я понимаю, ссылается на алгоритм BFPRT. А совсем не то, что по ссылке выше.

PM MAIL   Вверх
W4FhLF
Дата 15.9.2010, 06:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 5
Всего: 121



Ты вроде просил привести пример линейного алгоритма? Вот это были примеры.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
baldina
Дата 15.9.2010, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



спасибо
PM MAIL   Вверх
esperanto
Дата 16.9.2010, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(baldina @ 14.9.2010,  08:25)
по ссылке алгоритм partial sort, который в худшем случае дает n^2. Линейное время будет в среднем случае (на случайных данных).

У случайного алгоритма нет худшего случая.

Добавлено через 1 минуту и 32 секунды
A worst-case linear algorithm for the general case of selecting the kth largest element was published by Blum, Floyd, Pratt, Rivest and Tarjan in their 1973 paper "Time bounds for selection", sometimes called BFPRT after the last names of the authors. It is based on the quickselect algorithm and is also known as the median-of-medians algorithm.

Although quickselect is linear-time on average, it can require quadratic time with poor pivot choices (consider the case of pivoting around the smallest element at each step). The solution to make it O(n) in the worst case is to consistently find "good" pivots. A good pivot is one for which we can establish that a constant proportion of elements fall both below and above it.

The Select algorithm divides the list into groups of five elements. (Left over elements are ignored for now.) Then, for each group of five, the median is calculated (an operation that can potentially be made very fast if the five values can be loaded into registers and compared). (If sorting in-place, then these medians are moved into one contiguous block in the list.) Select is then called recursively on this sublist of n/5 elements to find their true median. Finally, the "median of medians" is chosen to be the pivot.

Добавлено через 3 минуты и 5 секунд
Цитата(baldina @ 13.9.2010,  08:33)
Цитата

Требуется найти k максимальных чисел в массиве длиной n.


Цитата

решение простое, находите к-ую порядковую статистику. 

знаете линейный алгоритм? хотелось бы увидеть.

W4FhLF прав насчет O(n + klogk). Идея - (частичная) сортировка k элементов множества. Partial sort называется.
http://www.lsi.upc.edu/~conrado/research/talks/aofa04.pdf

Вы сами себе противоречите то просите алгоритм
Быстрее чем O(nlogn)  

То говорите согласен и на большее.

Кроме всего прочего ПОВТОРЮ

термин быстрее чем O(nlogn)  лишен смысла
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
baldina
Дата 16.9.2010, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 4
Всего: 101



Цитата

У случайного алгоритма нет худшего случая.

У случайного алгоритма есть случайный результат smile

Цитата

термин быстрее чем O(nlogn)  лишен смысла 

ок, лучше, чем O(nlogn), меньше, чем O(nlogn). Удовлетворил?

и не говорил я, что согласен на большее.

а про BFPRT мы знаем, я же упоминал его...
вот зацепились за моё "знаете линейный алгоритм". вижу, знаете.
вот был бы известен алгоритм, не только приближающийся к теоретической оценке, но и достаточно простой для применения на практике... те слова к этому относились.
PM MAIL   Вверх
esperanto
Дата 16.9.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 31.5.2003

Репутация: 2
Всего: 4



Цитата(baldina @ 16.9.2010,  10:46)
Цитата

У случайного алгоритма нет худшего случая.

У случайного алгоритма есть случайный результат smile

Цитата

термин быстрее чем O(nlogn)  лишен смысла 

ок, лучше, чем O(nlogn), меньше, чем O(nlogn). Удовлетворил?

 .

Нет. 

Лучше яем О(nlog n) не бывает. И  меньше не бывает.

Для справки  О(nlog n) это множество функции, приведу несколько элементов этого множества const, loglog n, log n,sqrt(n),n, n+log n

Добавлено через 2 минуты и 2 секунды
Цитата(baldina @ 16.9.2010,  10:46)
Цитата

У случайного алгоритма нет худшего случая.

У случайного алгоритма есть случайный результат smile

 

У случайного алгоритма результат не случайный а правильный. И быстрая сортировка ,никогда не вернет вам неверный неотсортированный массив. 

Думаю стоит разобраться в вероятностных алгоритмах. Методах их анализа, и критериев сходимости и концентрации ошибок.
--------------------
B.Sc ->M.Sc.->Microsoft SDE-> (Ph.D. student + Intel SDE + psyсhology B.A) - > Skype SDET
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1014 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.