Я пытаюсь найти функцию, которая будет переставлять все уникальные перестановки вектора, не считая сопоставлений внутри подмножеств одного и того же типа элемента. Например:
dat <- c(1,0,3,4,1,0,0,3,0,4)
имеет
factorial(10)
> 3628800
возможные перестановки, но только 10!/(2!*2!*4!*2!)
factorial(10)/(factorial(2)*factorial(2)*factorial(2)*factorial(4))
> 18900
уникальные перестановки при игнорировании сопоставлений в подмножествах одного и того же типа элемента.
Я могу получить это, используя unique()
и permn()
функцию из пакета combinat
unique( permn(dat) )
но это вычислительно очень дорого, так как оно включает перечисление n!
, которое может быть на порядок больше перестановок, чем мне нужно. Есть ли способ сделать это без первых вычислений n!
?