Рекомендуемая структура данных или схема таблицы для эффективного поиска / оценки правил ассоциации? - PullRequest
2 голосов
/ 18 марта 2011

Для недавнего проекта я реализовал алгоритм FP-Growth для чтения транзакций и генерации общих наборов, из которых я затем генерирую правила ассоциации.Это хорошо работает для моих целей.

Теперь, когда я генерирую тысячи правил, я ищу эффективный способ их выполнения ... в настоящее время я храню правила в таблице postgres, гдеТело - это массив целых чисел, а голова - это одно целое.Мой запрос ищет строки, в которых набор элементов, которые я получил, содержит тело, но не заголовок.

Я ограничен использованием PHP и Postgres - этот проект является небольшой частью гораздо более крупного приложения.

Может ли кто-нибудь порекомендовать структуру данных или схему таблиц / направить меня к хорошим ресурсам?Кроме того, каков предпочтительный термин при обсуждении применения правил ассоциации - оценивать, выполнять, искать, запускать?

Спасибо!

1 Ответ

1 голос
/ 18 марта 2011

Итак, у вас есть набор правил, каждый из которых описывается как набор предикатов.Один из вариантов - просто проиндексировать их с помощью булевой поисковой системы, такой как Lucene, а затем, учитывая набор предикатов, примененных к текущему событию, вы можете искать возможные правила и затем пытаться применить их точно, я уверен, что это будет работать очень быстро.

Другой вариант - сортировать предикаты и преобразовывать каждое правило в строку правила слева (P1 P2 P3 P4).Теперь мы подошли к полю совпадения многих строк одновременно и можем использовать для этого дерево префиксов (одна из проблем заключается в том, что нам нужно искать не очень точную подстроку, но по сложности это также O (log (n)))

...