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


Автор: Liz 26.8.2018, 05:31
Задача такова, мучаюсь уже третий день :(
У меня есть огромный файл, из которого я считываю данные в ArrayList объектов. В итоге я получаю много объектов класса Result, состоящие из трех пунктов: String userId, String typeId, double evaluation.
Мне надо наименьшим количеством проходов по массиву определить:
1. Все пользовательские Id, которые чаще всех встречаются. Аналогично, все Id типов
2. Все пользовательские Id, с наибольшей оценкой. (тут проще, я нахожу max, а потом по циклу вывожу id, может, есть лучше способ?)
userId по типу: С13DGULS36MOYW
typeID: K134RR6KK9
evaluation: 4.8
Спасибо большое!!

Автор: LSD 27.8.2018, 13:04
Цитата(Liz @  26.8.2018,  06:31 Найти цитируемый пост)
Все пользовательские Id, которые чаще всех встречаются.

Все которые чаще всего встречаются - это просто все ID  smile Скорее всего тут должны быть не все, а N наиболее часто встречающихся.
Боюсь что тут придется делать 2 прохода. Первый считаем для каждого ID количество вхождений, второй отбираем N наиболее часто встречающихся.


Цитата(Liz @  26.8.2018,  06:31 Найти цитируемый пост)
Аналогично, все Id типов

Создаешь Map<String, List<String>> и заполняешь по мере прохождения по списку.


Цитата(Liz @  26.8.2018,  06:31 Найти цитируемый пост)
Все пользовательские Id, с наибольшей оценкой. (тут проще, я нахожу max, а потом по циклу вывожу id, может, есть лучше способ?)

Можно сделать за один проход: сохраняем оценку и список ID с данной оценкой.
Если очередной Result обладает более высокой оценкой: то сохраняем её как максимум, а список ID с данной оценкой очищаем и добавляем туда текущий элемент.
Если очередной Result обладает оценкой равной текущей максимальной, то добавляем его в список.
Если очередной Result обладает оценкой меньшей текущей максимальной, то пропускаем его.

Автор: Akina 27.8.2018, 14:19
Цитата(Liz @  26.8.2018,  06:31 Найти цитируемый пост)
У меня есть огромный файл, из которого я считываю данные в ArrayList объектов.

А затолкать один раз этот "огромный файл" в какую-никакую БД (а хоть бы и встраиваемую) да и переложить на неё все эти геморрои - не? Для индексированной таблицы получение требуемых данных - тьфу!

Автор: Liz 28.8.2018, 09:31
Спасибо всем за помощь!

Автор: LSD 28.8.2018, 13:38
Цитата(Akina @  27.8.2018,  15:19 Найти цитируемый пост)
А затолкать один раз этот "огромный файл" в какую-никакую БД (а хоть бы и встраиваемую) да и переложить на неё все эти геморрои - не?

Это не алгоритм.

Автор: Akina 28.8.2018, 15:29
Цитата(LSD @  28.8.2018,  14:38 Найти цитируемый пост)
Это не алгоритм. 

Ну почему? "Провести предварительную подготовку массива данных для того, чтобы не пришлось самостоятельно рожать алгоритм и создавать программный код для его реализации" - тоже вполне себе алгоритм. Алгоритм упрощения себе жизни... 

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

Автор: LSD 29.8.2018, 12:52
Цитата(Akina @  28.8.2018,  16:29 Найти цитируемый пост)
И потом - что-то мне подсказывает, что автору решить задачу важнее, чем сделать это непременно по собственноручно реализованному алгоритму... 

Мне наоборот кажется, что задача учебная. И способ решения важнее, результата.

Автор: Akina 29.8.2018, 13:16
Цитата(LSD @  29.8.2018,  13:52 Найти цитируемый пост)
Мне наоборот кажется, что задача учебная. И способ решения важнее, результата. 

Ну тогда требуемые данные нужно получать непосредственно во время считывания. Чё ждать-то?

И потом - вообще непонятно, чей и какой это имеется в виду ArrayList. Если из java - то нафига что-то мапить, когда есть Collections.frequency, который всё это сделает за нас. А если из .Net - так можно его Sort и не париться с мапом, тупо просчитав в один проход...

Автор: LSD 29.8.2018, 18:34
Цитата(Akina @  29.8.2018,  14:16 Найти цитируемый пост)
И потом - вообще непонятно, чей и какой это имеется в виду ArrayList. Если из java - то нафига что-то мапить, когда есть Collections.frequency, который всё это сделает за нас.

Теме была из Java перенесена.

Автор: Akina 29.8.2018, 22:20
Тогда это в минус переносившему - надо было указать... 

Автор: Munaya 14.12.2020, 16:22
Модератор: Сообщение скрыто.

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