如何在mathematica中生成任意位串的组合

时间:2013-09-13 16:00:23

标签: wolfram-mathematica

如何编写具有两个参数的函数,并且它应该生成组合任意范围位,例如: function(n,k) n=range, k=number of 1 digits. if i give 4 and 2 to function input: function(4,2)

 output:1100,1010,1001,0110,0011,0101 

2 个答案:

答案 0 :(得分:1)

这为您提供了随机数字列表:

rands[n_, k_] := Module[{out},
      out = Table[0, {n}];
      out[[RandomSample[Range[n], k]]] = 1;
      out]
rands[4, 2]

(* {1,1,0,0} *)

不确定您想要哪种输出形式,但您可以使用FromDigits。

编辑一个更清洁的方法..

rands[n_, k_] := Table[0, {n - k}]~Join~Table[1, {k}] // RandomSample

编辑:根据你的评论,我猜你想要的是排列:(我想我采取“任意”来表示随机..)

 p[n_, k_]  :=  Permutations[Table[0, {n - k}]~Join~Table[1, {k}], {n}]

(*
 {{0,0,1,1},{0,1,0,1},{0,1,1,0},{1,0,0,1},        {1,0,1,0},{1,1,0,0}} *)

答案 1 :(得分:0)

function[n_, k_] := Permutations[PadRight[ConstantArray[1, k], n]]

In[72]:= function[4, 2]
Out[72]= {{1, 1, 0, 0}, {1, 0, 1, 0}, {1, 0, 0, 1}, {0, 1, 1, 0}, {0, 1, 0, 1}, {0, 0, 1, 1}}

In[73]:= function[3, 1]
Out[73]= {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}