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