Guest User

Untitled

a guest
Jul 30th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.75 KB | None | 0 0
  1. x<-c(1,1,2,2,3,4);
  2. library(combinat);
  3. unique(permn(x))
  4.  
  5. data.frame(n=1:12,P=factorial(1:12));
  6. ## n P
  7. ## 1 1 1
  8. ## 2 2 2
  9. ## 3 3 6
  10. ## 4 4 24
  11. ## 5 5 120
  12. ## 6 6 720
  13. ## 7 7 5040
  14. ## 8 8 40320
  15. ## 9 9 362880
  16. ## 10 10 3628800
  17. ## 11 11 39916800
  18. ## 12 12 479001600
  19.  
  20. data.frame(m=paste('2 singles and',2:7,'pairs'),P=factorial(2+2*2:7)/factorial(2)^(2:7));
  21. ## m P
  22. ## 1 2 singles and 2 pairs 180
  23. ## 2 2 singles and 3 pairs 5040
  24. ## 3 2 singles and 4 pairs 226800
  25. ## 4 2 singles and 5 pairs 14968800
  26. ## 5 2 singles and 6 pairs 1362160800
  27. ## 6 2 singles and 7 pairs 163459296000
  28.  
  29. data.frame(m=paste('2 pairs and',1:3,'quartets'),P=factorial(2*2+4*1:3)/(factorial(2)^2*factorial(4)^(1:3)));
  30. ## m P
  31. ## 1 2 pairs and 1 quartets 420
  32. ## 2 2 pairs and 2 quartets 207900
  33. ## 3 2 pairs and 3 quartets 378378000
  34.  
  35. gpermuteImpl <- function(uf) do.call(rbind,lapply(1:nrow(uf),function(r) { u <- uf$u[r]; if (uf$f[r] == 1L) if (nrow(uf) == 1L) return(u) else uf <- uf[-r,] else uf$f[r] <- uf$f[r]-1L; return(cbind(u,gpermuteImpl(uf))); }));
  36. gpermute <- function(x) unname(gpermuteImpl(data.frame(u=unique(x),f=tabulate(x))));
  37.  
  38. x <- c(1,1,2,2,3,4);
  39. gpermute(x);
  40. ## [,1] [,2] [,3] [,4] [,5] [,6]
  41. ## [1,] 1 1 2 2 3 4
  42. ## [2,] 1 1 2 2 4 3
  43. ## [3,] 1 1 2 3 2 4
  44. ## [4,] 1 1 2 3 4 2
  45. ## [5,] 1 1 2 4 2 3
  46. ## [6,] 1 1 2 4 3 2
  47. ## [7,] 1 1 3 2 2 4
  48. ## [8,] 1 1 3 2 4 2
  49. ## [9,] 1 1 3 4 2 2
  50. ## [10,] 1 1 4 2 2 3
  51. ## [11,] 1 1 4 2 3 2
  52. ## [12,] 1 1 4 3 2 2
  53. ## [13,] 1 2 1 2 3 4
  54. ## [14,] 1 2 1 2 4 3
  55. ## [15,] 1 2 1 3 2 4
  56. ## [16,] 1 2 1 3 4 2
  57. ## [17,] 1 2 1 4 2 3
  58. ## [18,] 1 2 1 4 3 2
  59. ## [19,] 1 2 2 1 3 4
  60. ## [20,] 1 2 2 1 4 3
  61. ## [21,] 1 2 2 3 1 4
  62. ## [22,] 1 2 2 3 4 1
  63. ## [23,] 1 2 2 4 1 3
  64. ## [24,] 1 2 2 4 3 1
  65. ## [25,] 1 2 3 1 2 4
  66. ## [26,] 1 2 3 1 4 2
  67. ## [27,] 1 2 3 2 1 4
  68. ## [28,] 1 2 3 2 4 1
  69. ## [29,] 1 2 3 4 1 2
  70. ## [30,] 1 2 3 4 2 1
  71. ## [31,] 1 2 4 1 2 3
  72. ## [32,] 1 2 4 1 3 2
  73. ## [33,] 1 2 4 2 1 3
  74. ## [34,] 1 2 4 2 3 1
  75. ## [35,] 1 2 4 3 1 2
  76. ## [36,] 1 2 4 3 2 1
  77. ## [37,] 1 3 1 2 2 4
  78. ## [38,] 1 3 1 2 4 2
  79. ## [39,] 1 3 1 4 2 2
  80. ## [40,] 1 3 2 1 2 4
  81. ## [41,] 1 3 2 1 4 2
  82. ## [42,] 1 3 2 2 1 4
  83. ## [43,] 1 3 2 2 4 1
  84. ## [44,] 1 3 2 4 1 2
  85. ## [45,] 1 3 2 4 2 1
  86. ## [46,] 1 3 4 1 2 2
  87. ## [47,] 1 3 4 2 1 2
  88. ## [48,] 1 3 4 2 2 1
  89. ## [49,] 1 4 1 2 2 3
  90. ## [50,] 1 4 1 2 3 2
  91. ## [51,] 1 4 1 3 2 2
  92. ## [52,] 1 4 2 1 2 3
  93. ## [53,] 1 4 2 1 3 2
  94. ## [54,] 1 4 2 2 1 3
  95. ## [55,] 1 4 2 2 3 1
  96. ## [56,] 1 4 2 3 1 2
  97. ## [57,] 1 4 2 3 2 1
  98. ## [58,] 1 4 3 1 2 2
  99. ## [59,] 1 4 3 2 1 2
  100. ## [60,] 1 4 3 2 2 1
  101. ## [61,] 2 1 1 2 3 4
  102. ## [62,] 2 1 1 2 4 3
  103. ## [63,] 2 1 1 3 2 4
  104. ## [64,] 2 1 1 3 4 2
  105. ## [65,] 2 1 1 4 2 3
  106. ## [66,] 2 1 1 4 3 2
  107. ## [67,] 2 1 2 1 3 4
  108. ## [68,] 2 1 2 1 4 3
  109. ## [69,] 2 1 2 3 1 4
  110. ## [70,] 2 1 2 3 4 1
  111. ## [71,] 2 1 2 4 1 3
  112. ## [72,] 2 1 2 4 3 1
  113. ## [73,] 2 1 3 1 2 4
  114. ## [74,] 2 1 3 1 4 2
  115. ## [75,] 2 1 3 2 1 4
  116. ## [76,] 2 1 3 2 4 1
  117. ## [77,] 2 1 3 4 1 2
  118. ## [78,] 2 1 3 4 2 1
  119. ## [79,] 2 1 4 1 2 3
  120. ## [80,] 2 1 4 1 3 2
  121. ## [81,] 2 1 4 2 1 3
  122. ## [82,] 2 1 4 2 3 1
  123. ## [83,] 2 1 4 3 1 2
  124. ## [84,] 2 1 4 3 2 1
  125. ## [85,] 2 2 1 1 3 4
  126. ## [86,] 2 2 1 1 4 3
  127. ## [87,] 2 2 1 3 1 4
  128. ## [88,] 2 2 1 3 4 1
  129. ## [89,] 2 2 1 4 1 3
  130. ## [90,] 2 2 1 4 3 1
  131. ## [91,] 2 2 3 1 1 4
  132. ## [92,] 2 2 3 1 4 1
  133. ## [93,] 2 2 3 4 1 1
  134. ## [94,] 2 2 4 1 1 3
  135. ## [95,] 2 2 4 1 3 1
  136. ## [96,] 2 2 4 3 1 1
  137. ## [97,] 2 3 1 1 2 4
  138. ## [98,] 2 3 1 1 4 2
  139. ## [99,] 2 3 1 2 1 4
  140. ## [100,] 2 3 1 2 4 1
  141. ## [101,] 2 3 1 4 1 2
  142. ## [102,] 2 3 1 4 2 1
  143. ## [103,] 2 3 2 1 1 4
  144. ## [104,] 2 3 2 1 4 1
  145. ## [105,] 2 3 2 4 1 1
  146. ## [106,] 2 3 4 1 1 2
  147. ## [107,] 2 3 4 1 2 1
  148. ## [108,] 2 3 4 2 1 1
  149. ## [109,] 2 4 1 1 2 3
  150. ## [110,] 2 4 1 1 3 2
  151. ## [111,] 2 4 1 2 1 3
  152. ## [112,] 2 4 1 2 3 1
  153. ## [113,] 2 4 1 3 1 2
  154. ## [114,] 2 4 1 3 2 1
  155. ## [115,] 2 4 2 1 1 3
  156. ## [116,] 2 4 2 1 3 1
  157. ## [117,] 2 4 2 3 1 1
  158. ## [118,] 2 4 3 1 1 2
  159. ## [119,] 2 4 3 1 2 1
  160. ## [120,] 2 4 3 2 1 1
  161. ## [121,] 3 1 1 2 2 4
  162. ## [122,] 3 1 1 2 4 2
  163. ## [123,] 3 1 1 4 2 2
  164. ## [124,] 3 1 2 1 2 4
  165. ## [125,] 3 1 2 1 4 2
  166. ## [126,] 3 1 2 2 1 4
  167. ## [127,] 3 1 2 2 4 1
  168. ## [128,] 3 1 2 4 1 2
  169. ## [129,] 3 1 2 4 2 1
  170. ## [130,] 3 1 4 1 2 2
  171. ## [131,] 3 1 4 2 1 2
  172. ## [132,] 3 1 4 2 2 1
  173. ## [133,] 3 2 1 1 2 4
  174. ## [134,] 3 2 1 1 4 2
  175. ## [135,] 3 2 1 2 1 4
  176. ## [136,] 3 2 1 2 4 1
  177. ## [137,] 3 2 1 4 1 2
  178. ## [138,] 3 2 1 4 2 1
  179. ## [139,] 3 2 2 1 1 4
  180. ## [140,] 3 2 2 1 4 1
  181. ## [141,] 3 2 2 4 1 1
  182. ## [142,] 3 2 4 1 1 2
  183. ## [143,] 3 2 4 1 2 1
  184. ## [144,] 3 2 4 2 1 1
  185. ## [145,] 3 4 1 1 2 2
  186. ## [146,] 3 4 1 2 1 2
  187. ## [147,] 3 4 1 2 2 1
  188. ## [148,] 3 4 2 1 1 2
  189. ## [149,] 3 4 2 1 2 1
  190. ## [150,] 3 4 2 2 1 1
  191. ## [151,] 4 1 1 2 2 3
  192. ## [152,] 4 1 1 2 3 2
  193. ## [153,] 4 1 1 3 2 2
  194. ## [154,] 4 1 2 1 2 3
  195. ## [155,] 4 1 2 1 3 2
  196. ## [156,] 4 1 2 2 1 3
  197. ## [157,] 4 1 2 2 3 1
  198. ## [158,] 4 1 2 3 1 2
  199. ## [159,] 4 1 2 3 2 1
  200. ## [160,] 4 1 3 1 2 2
  201. ## [161,] 4 1 3 2 1 2
  202. ## [162,] 4 1 3 2 2 1
  203. ## [163,] 4 2 1 1 2 3
  204. ## [164,] 4 2 1 1 3 2
  205. ## [165,] 4 2 1 2 1 3
  206. ## [166,] 4 2 1 2 3 1
  207. ## [167,] 4 2 1 3 1 2
  208. ## [168,] 4 2 1 3 2 1
  209. ## [169,] 4 2 2 1 1 3
  210. ## [170,] 4 2 2 1 3 1
  211. ## [171,] 4 2 2 3 1 1
  212. ## [172,] 4 2 3 1 1 2
  213. ## [173,] 4 2 3 1 2 1
  214. ## [174,] 4 2 3 2 1 1
  215. ## [175,] 4 3 1 1 2 2
  216. ## [176,] 4 3 1 2 1 2
  217. ## [177,] 4 3 1 2 2 1
  218. ## [178,] 4 3 2 1 1 2
  219. ## [179,] 4 3 2 1 2 1
  220. ## [180,] 4 3 2 2 1 1
  221.  
  222. library('combinat');
  223. mcombinat <- do.call(rbind,unique(permn(x)));
  224. mcombinat.sorted <- mcombinat[do.call(order,lapply(1:ncol(mcombinat),function(c) mcombinat[,c])),];
  225. mbgoldst <- gpermute(x);
  226. identical(mcombinat.sorted,mbgoldst);
  227. ## [1] TRUE
  228.  
  229. x2 <- c(1,1,1,1,2,2,2,2,3,3,4,4);
  230. system.time({ m <- gpermute(x2); });
  231. ## user system elapsed
  232. ## 36.547 0.000 36.593
  233. head(m);
  234. ## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
  235. ## [1,] 1 1 1 1 2 2 2 2 3 3 4 4
  236. ## [2,] 1 1 1 1 2 2 2 2 3 4 3 4
  237. ## [3,] 1 1 1 1 2 2 2 2 3 4 4 3
  238. ## [4,] 1 1 1 1 2 2 2 2 4 3 3 4
  239. ## [5,] 1 1 1 1 2 2 2 2 4 3 4 3
  240. ## [6,] 1 1 1 1 2 2 2 2 4 4 3 3
  241. nrow(m);
  242. ## [1] 207900
  243.  
  244. library(gtools)
  245. x=c(1,1,2,2,3,4)
  246. order = permutations(n=length(x), r=length(x))
  247. x = matrix(x[order], ncol=6)
  248. x = x[!duplicated(x), ]
  249.  
  250. > library(RcppAlgos)
  251. > x <- permuteGeneral(c(1,2,3,4), freqs = c(2,2,1,1))
  252. > dim(x)
  253. [1] 180 6
  254. > head(x)
  255. [,1] [,2] [,3] [,4] [,5] [,6]
  256. [1,] 1 1 2 2 3 4
  257. [2,] 1 1 2 2 4 3
  258. [3,] 1 1 2 3 2 4
  259. [4,] 1 1 2 3 4 2
  260. [5,] 1 1 2 4 2 3
  261. [6,] 1 1 2 4 3 2
Add Comment
Please, Sign In to add comment