Query-query matching

krysonka

Я думаю, многие сталкивались с задачей соответствия объекта запросу, Target-Query Matching. Я столкнулся с задачей Query-query matching, и в некотором затруднении, уверен, задача хорошо известна, поэтому буду благодарен если кто-нить укажет на оптимальный алгоритм решения.
Есть объекты у которых есть набор свойств. Нужно создать быструю реализацию отношения эквивалентности между этими объектами с поддержкой логических операторов.
Пример объект А, у него есть свойство:
"животное"="корова"
Объект B, у него есть свойства:
"животное"="корова ИЛИ овца","цвет"="черный"
Объект C, у него есть свойства:
"животное"="курица","цвет"="черный"
Объект D, у него есть свойства:
"животное"="любое", "цвет=любой И НЕ белый"
Нужно чтобы: A == B,D ; B == A,D ; C == D, ; D == A,B,C,D
Вопрос в том как матчить фактически логические деревья, поскольку значения свойств могут содержать в себе логические условия. Я думаю. это можно сделать определив порядок следования для свойств, затем отсортировать дерево в соответствии с этим порядком, привести к какой-то линейной нотации и сравнить строки, но не факт что это решение рабочее и оптимальное. Да если у кого-нить есть идеи какие структуры данных на Haskell будут оптимальны для данной задачи тоже буду рад услышать

1853515

это не отношение эквивалентности (не A==D, D == C но A !=C)
насчет матчинга - просто пересекаешь множества свойств и по очереди проверяешь?

spiritmc

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

Uthgart

Если у свойств ограниченное количество вариантов значений, то используй битовую маску, то есть значение свойства будет логическая сумма значений возможных вариантов. Тогда "эквивалентность" будет определяться ненулевым значением произведений свойств объектов.
Оставить комментарий
Имя или ник:
Комментарий: