У меня есть список «черт», L и база данных списков, с которыми я сопоставляюсь. Я хочу найти списки, которые содержат все черты в L. Если я еще не собрал 5, я удаляю одну черту из L и снова ищу полный список в базе данных. Порядок не имеет значения, меня интересует только точный список характеристик.
В настоящее время у меня есть рекурсивное решение, где я вырезаю один элемент в каждой позиции и снова сопоставляю. Он выполняет свою работу, но я хотел бы найти более эффективный метод, чтобы соответствовать этим спискам.
def match([1,2,3,4,5]) {
findAllByTraits([1,2,3,4,5]) //[1,2,3,4,5,7,10] will match
//[2,3,4,5] will not match this iteration
//if 5 lists not found
match([1,2,3,4]) //without 5
match([1,2,3,5]) //without 4
match([1,2,4,5]) //without 3
match([1,3,4,5]) //without 2
match([2,3,4,5]) //without 1
}
Проблема, которую я сразу вижу, состоит в том, что это приведет к тому, что многие случаи будут вызываться многократно. Кроме того, в этом примере он завершит сопоставление ([1,2,3,4]), прежде чем перейти к другим случаям сопоставления. Это может привести к тому, что меньшие списки будут «сопоставлены» перед большими. Цель состоит в том, чтобы иметь 5 из максимально возможных списков.