Я прошу прощения, если на этот вопрос был дан ответ в другом месте, но я еще не нашел его, используя мою ограниченную алгоритмическую терминологию. ;)
Моя ситуация такова - у меня есть переменное количество элементов данных, каждый из которых был проверен на соответствие друг другу элемента данных для определения совместимости. Совместимость хранится в эквиваленте двумерного массива (таблица истинности?). Моя цель состоит в том, чтобы создать все возможные комбинации этих элементов данных, где каждый элемент в комбинации совместим друг с другом.
Например, если элемент 1 (из 4) был совместим с элементами 2 и 4, а элемент 2 был совместим с 1, 3 и 4, элемент 3 был совместим с 2, а элемент 4 был совместим с 1 и 2, мой Таблица истинности будет выглядеть примерно так:
1) {1,1,0,1}
2) {1,1,1,1}
3) {0,1,1,0}
4) {1,1,0,1}
Комбинации, которые я хочу получить от этого, будут:
1,2,4
1,2
1,4
1
2,3 * * 1 018
2,4
2
3 * * тысяча двадцать-один
4
Мой подход хорошо работает во многих ситуациях, но иногда сильно увязает, когда количество элементов превышает 5000, в зависимости от наборов данных. Моя вторая задача - определить шаблон, который увеличивает время выполнения с 5 секунд до 3 часов ...
Просто глядя на логический массив, я просто чувствую, что должно быть более простое решение - алгоритм, названный в честь кого-то, может быть. Как вы могли бы заключить из вышесказанного, я не обязательно знаю, как задать вопрос. ;)
Спасибо за ваше время!