Оптимизация сортировки набора данных

Eugene Bond

sudo rm - rf /
Дано:
Набор данных с полями от a до f

Задача:
Получить данные, сгруппированные в четыре сегмента.
Сегмент А: данные в которых значения полей a == 1 и b == 1
Сегмент Б: данные в которых значения полей a == 1 и b == 0
Сегмент В: данные в которых значения полей a == 0 и b == 1
Сегмент Г: данные в которых значения полей a == 0 и b == 0

Внутри каждого сегмента, данные должны быть построены в следующей последовательности:
- сначала все элементы у которых c == 1
- потом один случайный элемент, у которого d == 1
- далее идут элементы, у которых e == 1, упорядоченные по значению поля f
- но после каждых трех элементов с e == 1 идет один элемент с e == 0 (каждый четвертый)
- завершают последовательность оставшиеся элементы, у которых e == 0 и которые не появлялись раньше

Проблема:
Проблемные места выделены подчеркиванием. Без них задача тривиальна. Когда появилось первое условие про случайный элемент с d == 1, это было решено через простенький костыль без особого усложнения логики.
Появление второго подчеркнутого условия заставило задуматься о пересмотре подхода генерации списка.
Плюс хотелось бы получить более-менее универсальное решение, которое позволит достаточно гибко управлять условиями сортировки.

Идея:
Представить данные в виде пула. Запрос каждого следующего элемента выберет из набора данных подходящий по требованиям.
Видимые недостатки:
- при запросе среза данных, всегда необходимо обработать данные от первого элемента и до конца требуемого среза
- предварительная подготовка данных (не уверен, что это недостаток, но явное усложнение реализации)

Остается открытым вопрос гибкости решения и возможности простого управления порядком вывода данных. Пока не совсем понятно возможно ли унифицировать подчеркнутые условия.


Буду рад услышать мысли и советы.
Конструктивный флейм приветствуется :)
 
Последнее редактирование:

Eugene Bond

sudo rm - rf /
что, даже пофлудить или пофлеймить конструктивно никто не может? :(
 

С.

Продвинутый новичок
Тебе наверное нравится словосочетание "конструктивный флейм". Тогда открой для себя термин "оксюморон".

А по теме: сугубо частные задачи, как у тебя не имеют "более-менее универсального решения". Частные задачи решаются частными методами.
 

Eugene Bond

sudo rm - rf /
С., большинство полезных тем из конструктивного флуда переваливаются во флейм, который в конечном итоге часто так же оказывается конструктивным. Истина рождается в споре.
 

cDLEON

Онанист РНРСlub
Вообще, конечно, задача абсолютно не понятная. Нет ни объема этих данных, ни состава. Что если элементов с d == 1 не хватит ?
Кроме того не исчезает стойкое ощущение, что где то убивают котят. Какую проблему вы решаете ?
 

Eugene Bond

sudo rm - rf /
Если не хватает элемента d == 1, то переходим к следующему шагу.

Объемы данных не большие - 300-800 элементов.
Решается проблема разбавления результатов поиска сущностей (отсортированых по рейтингу) новыми (недавно добавленными) сущностями. Бизнес задача - поскольку у новых сущностей рейтинга еще нет, им надо дать возможность получить этот рейтинг, искусственно "продвигая" их, путем вывода на каждой четвертой позиции.

В нашем случае, сущностями являются рестораны.
Сегменты: "доступные сейчас", "доступные позже сегодня", "уже не доступные сегодня", "в принципе не доступные сегодня"
 
Сверху