Я ищу быстрый алгоритм для следующей проблемы.
Правило представлено конъюнкцией предложений о кортежах. Предложение определяет отношение между двумя элементами кортежа. Например, T(1)[2] = T(3)[1]
означает: the second item in the first tuple must be equal to the first one in the third
.
Таким образом, правило может быть таким: T(1)[2] = T(3)[1] AND T(1)[1] > T(2)[1]
Общее правило:
- Пункт:
(T(j)[i] op T(k)[l])
- Состояние:
Clause (AND Clause)*
- Поддерживаемые операторы:
=
,!=
,>
,<
,<=
,>=
Алгоритм получает такое правило и список кортежей в виде, где каждый элемент является числом:
(i11 i12 ... i1n)
...
(ik1 ik2 ... ikm)
Кортежи бывают разной длины и их количество неизвестно. Кортежи в списке могут быть в любом порядке.
Алгоритм выведет все комбинации кортежей из ввода, которые соответствуют правилу.
Пример:
Правило: T(1)[1] = T(2)[1] AND T(1)[3]>T(3)[1]
Кортежи:
`(1 2 3 4)` T1
`(3 2 4)' T2
`(4)` T3
`(1 5 3 6 7)` T4
Выведет следующие комбинации:
T(1): T1, T(2): T4, T(3): T2
T(1): T4, T(2): T1, T(3): T2
По сути, он будет определять, какие кортежи могут заменить каждый T (i), чтобы это правило было истинным.
Есть ли известный алгоритм для быстрого выполнения этого? Какие-либо предложения?
Спасибо,
A
T(1)[3]>T(3)[1]
должно бытьT(1)[3]>=T(3)[1]
иначе решения нет. - person jfs   schedule 18.04.2011