LINUX.ORG.RU

Хитрая выборка


0

0

Есть массив A из N чисел [0; 1.0] (распределние неизвестно)

Нужно выбрать из него K << N чисел так, чтобы их сумма была максимальной (на самом деле не строго, нужно как можно больше), причем массив A можно пройти только один раз - никаких нескольких проходов, сортировок и т.д.

(Чтобы не думали что это задача из ВУЗа - на самом деле нужно из просто из огромного массива данных выбрать K "хороших" элементов, хорошесть определяется функцией, возвращающей float [0; 1.0]).

Ткните в подходящий алгоритм.

У меня из идей только из каждой пачки (N/K) элементов выбирать лучший, но это не идеальное решение и чую должен быть вероятностный алгоритм.

anonymous
Ответ на: комментарий от anonymous

Блин вы чо такие, трудно прочетать все что было написано?:( Для непонятливых НАДО СРАЗУ ГОВОРИТЬ БЕРЕМ ЧИСЛО ИЛИ НЕТ!!! А складывание в другой массив и выкидывание из него наименьших с заменой на наибольшее даст ответ только по окончанию массива N.

DDR ★★
()

Сё, набежали любители решить задачу, не прочитав условия.

> Не надо только гнать тут, да. Таких граничных условий на практике не бывает.

Ага, и 640KB хватит всем.

> Тогда предварительно сортируй всё.

Угу. Кластер только закуплю.

> но поскольку K всеравно придется гдето хранить и K сразу сортируется, ничего менять не надо

K не надо нигде хранить. Вход - pipe, выход - pipe.

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

anonymous
()
Ответ на: комментарий от alex4

> зачем здесь это?

Ищем селекшеном K-й максимальный элемент (линейно по входной цепочке), потом за один проход суммируем.

В один проход -- никак...

Die-Hard ★★★★★
()

ну тогда наверное только 
>из каждой пачки (N/K) элементов выбирать лучший

alex4
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.