Задача:
Есть таблица некоторых критериев, которая имеет следующий вид:
A1 A2 ... A40
B1 B2 ... B40
...
Количество строк может быть около 40000.
Значение каждой ячейки -- произвольная строка (до 256 символов). Также есть специальное значение -- "*" (зведочка).
Теперь есть запрос:
Z1 Z2 ... Z40
Значения полей запроса аналогичны по структуре ячейкам таблицы, включая специальное значение.
Проверка запроса: надо найти среди строк исходной таблицы максимально совпадающую со значениями запроса. Специальное значение "*" либо в запросе, либо в таблице, означает совпадение в данной ячейке вне засимости от значения, с которым сравнивают.
Например:
XYZ GBP 123 * [все значения -- *] *
XYZ USD 123 * [все значения -- *] *
XYZ USD * * [все значения -- *] *
* * * * [все значения -- *] *
Запрос:
XYZ USD 567 * [все значения -- *] *
Ответом должна быть строка номер 3.
При банальном подходе можно просто заранее отсортировать строки таблицы по убыванию количества конкретных значений, и уже для каждого запроса проверять посрочно до первого удачного совпадения. Получается 40000*40 сравнений (не будем учитывать время сравнения самих ячеек).
Может тут как-то можно ускорить, используя результаты предыдущей строки? Например, обработав строку 2, мы знаем, что первые два поля уже совпадают, и может быть их можно уже не сравнивать... Можно индекс какой построить. Ограничения на память особых нет.
Можно даже сгенерить некий код-парсер, которых будет представлять логику конкретной исходной таблицы. Вот только вопрос, в чем должна быть идея этого парсера.