循环排列

amr*_*ods 2 permutation julia

给定一个向量z = [1, 2, 3],我想创建一个具有z(ie zp = [[1,2,3], [3,1,2], [2,3,1]])的所有循环排列的向量向量.

我可以打印的所有元素zp

for i in 1:length(z)
    push!(z, shift!(z)) |> println
end
Run Code Online (Sandbox Code Playgroud)

如何存储结果排列?注意

zp = Vector(length(z))
for i in 1:length(z)
    push!(z, shift!(z))
    push!(zp, z)
end
Run Code Online (Sandbox Code Playgroud)

不起作用,因为它存储相同的向量z3次zp.

DSM*_*DSM 6

一种方法是在推送之前复制矢量:

z = [1, 2, 3];

zp = Vector();
for i in 1:length(z)
    push!(z, shift!(z))
    push!(zp, copy(z))
end
Run Code Online (Sandbox Code Playgroud)

给我

julia> zp
3-element Array{Any,1}:
 [2,3,1]
 [3,1,2]
 [1,2,3]
Run Code Online (Sandbox Code Playgroud)

但我倾向于在可能时避免变异操作.所以我会把它写成

julia> zp = [circshift(z, i) for i=1:length(z)]
3-element Array{Array{Int64,1},1}:
 [3,1,2]
 [2,3,1]
 [1,2,3]
Run Code Online (Sandbox Code Playgroud)