从数字分区生成置换

时间:2018-11-23 16:53:42

标签: r list permutation partition

i将生成分区的排列。 我用此代码生成分区: 库(分区)

x <- c(2,4,6)       
parts <- listParts(length(x))
out <- rapply(parts, function(ii) x[ii], how="replace") 

并生成

[[1]]
[1] (2,4,6)

[[2]]
[1] (2,6)(4)

[[3]]
[1] (2,4)(6)

[[4]]
[1] (4,6)(2)

[[5]]
[1] (2)(4)(6)

以一个元素[1](2)(4)(6)为例,我将生成所有可能的排列。我尝试过:

 library(combinat)
 permn(x)

,但是return元素的输入形式不同,例如与element相同 [1](21,33,41,40,39,3,6)(13,37)返回:

[[1]]
[[1]]$`1`
[1] 21 33 41 40 39  3  6

[[1]]$`2`
[1] 13 37


[[2]]
[[2]]$`2`
[1] 13 37

[[2]]$`1`
[1] 21 33 41 40 39  3  6

我在一周前做了类似的问题,但是当生成分区时给出的解决方案会为所有可能的分区生成排列,但是存在问题 效率我不能使用它。 解决方案就是这样:

library(partitions)
permListParts <- function (x) 
{
    f <- function(pp) {
        out <- split(seq_along(pp), pp)
        myPerms <- perms(length(out))
        apply(myPerms, 2, function(x) {
            temp <- out[x]
            class(temp) <- c(class(temp), "equivalence")
            temp
        })
    }
    apply(setparts(x), 2, f)}

0 个答案:

没有答案