Генерирующие комбинации

Каждый раз, когда я должен это делать, я "изобретаю" другой способ. Время стандартизации. Я подозреваю, что есть некоторая команда по умолчанию, которую я забыл, готов сделать это, поэтому я извиняюсь заранее, если вопрос слишком тривиален.

Чем лучше (память, производительность) способ получить:

 combinations[{1,2,3},2] = {{1,2},{1,3},{2,3}}

с произвольными элементами в списке ввода, конечно.

Ответы

Ответ 1

Subsets[{1, 2, 3}, {2}]

является встроенным способом.

Ответ 2

До того, как в качестве основной функции был добавлен Subsets, была доступна функция Combinatorica KSubsets.

Needs["Combinatorica`"]

KSubsets[{1, 2, 3}, 2]

(*  {{1, 2}, {1, 3}, {2, 3}}  *)

Combinatorica по-прежнему предоставляет дополнительные функции, такие как NextKSubset:

NextKSubset[{1, 2, 3}, {1, 3}]

(*  {2, 3}  *)

Эта последняя функция может быть очень полезна для управления памятью.