Я работаю над приложением, которое является сервисом. Я получаю объект запроса, и мне нужно передать этот объект через набор фильтров и вернуть ответ. Есть около 10 фильтров, через которые мне нужно передать объект.Эффективный алгоритм фильтрации
В настоящее время применение делает последовательный поиск на каждом фильтре следующим образом:
public List<Element) FilterA(Request request){
for(Element element in items)
{
// compare element to request object elements
// there are different field checking per object
}
}
Так есть FilterB, FilterC и т.д. они все сделаны подобным же образом, в течение циклов сравниваются различные поля.
Можно ли это сделать через hashset? или двоичный поиск?
Или есть эффективный алгоритм. По сути, я хотел бы улучшить O (n) на что-то меньшее.
Можете ли вы налить фильтры? Это, по крайней мере, приведет к тому, что все 10 будут работать одновременно, что должно помочь. – twain249
@ twain249 да, я могу это сделать, но что, если в фильтрах есть последовательность? как последовательная фильтрация? – DarthVader
Я не знаю ваших уникальных требований. Если вы не можете начертить фильтры, вы не сможете. Что касается структур данных, есть ли способ их сортировки (чтобы вы могли выполнять двоичный поиск)? Также вы можете попытаться создать «карту», если у вас есть ключ, который вы можете использовать. – twain249