Учитывая большую коллекцию (назовем это 'a') элементов типа T (скажем, Vector или List) и функцию оценки 'f' (скажем, (T) => Double), которую я хотел бы вывестииз 'a' коллекция результатов 'b', которая содержит N элементов из 'a', что приводит к наибольшему значению в f.Коллекция «а» может содержать дубликаты.Он не отсортирован.
Может быть, на время оставить вопрос параллелизации (отобразить / уменьшить и т. Д.), Какой будет подходящая структура данных Scala для компиляции набора результатов «b»?Спасибо за любые указатели / идеи.
Примечания:
(1) Я думаю, мой вариант использования может быть наиболее кратко выражен как
val a = Vector( 9,2,6,1,7,5,2,6,9 ) // just an example
val f : (Int)=>Double = (n)=>n // evaluation function
val b = a.sortBy( f ).take( N ) // sort, then clip
за исключением того, что я не хочудля сортировки всего набора.
(2) одним из вариантов может быть итерация над «a», которая заполняет TreeSet с «ручным» ограничением размера (отклонять что-либо хуже, чем худший элемент в наборе, непусть множество вырастет за пределы N).Однако я хотел бы сохранить дубликаты, присутствующие в исходном наборе в наборе результатов, и поэтому это может не сработать.
(3) если отсортированный мультимножество является правильной структурой данных, есть ли в Scala такая реализация?Или отсортированный в двоичном виде вектор или массив, если результирующий набор достаточно мал?