I ' m пытается найти функцию, которая будет переставлять все уникальные перестановки вектора, не считая при этом сопоставления внутри подмножеств одного и того же типа элемента. Например:
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!
?