Я пытаюсь создать подмножество списка, охватывающее все возможные комбинации с условием, что конечный результат имеет ту же длину, что и исходный список, и нет повторяющихся элементов.
Для списка:
X <- c("A","B","C","D")
Все ненулевые подмножества (назовем это Y
):
[('A'), ('B'), ('C'), ('D'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'),
('B', 'D'), ('C', 'D'), ('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'),
('B', 'C', 'D'), ('A', 'B', 'C', 'D')]
Я ищу такие комбинации Y
, чтобы элементы в комбинации были разными значениями X
.
Вот некоторые из допустимых комбинаций:
(('A',), ('B',), ('C', 'D'))
(('A',), ('C',), ('B', 'D'))
(('A',), ('D',), ('B', 'C'))
(('B',), ('C',), ('A', 'D'))
(('B',), ('D',), ('A', 'C'))
(('C',), ('D',), ('A', 'B'))
Я попытался оценить все возможные комбинации Y
, а затем получить длину различных значений каждой комбинации.
Если length(distinct elements of combination) = length(X)
, то я сохраняю комбинацию. Но это ни в коем случае не оптимальный метод, и он не распространяется на повторяющиеся сценарии.
Кроме того, в моем реальном сценарии у меня есть до 40 различных элементов в X
.
partitions::listParts()
илиpartitions::setparts()
, например, здесь. Однако количество разделов для набора из 40 элементов будет просто астрономическим (некоторое число, например, 40! или, вероятно, намного больше), так что вы не приблизитесь к тому, чтобы перечислить их все. - person Josh O'Brien   schedule 14.05.2019