我的网络有4种不同类型的节点 A,B,C和D 由 00,01,10和11 表示 分别。我想创建一个随机的节点序列,例如 A B D C A D C B C D(00 01 11 10 00 11 10 01 10 11),使得: no_of_type A节点> no_of_type B节点> no_of_type C节点。我怎么生成 这样一个比特序列使用MATLAB。
答案 0 :(得分:0)
使用randperm
获取As,Bs,Cs和Ds的有序序列的随机排列,其中As,Bs,Cs,Ds的数量正在下降。你可以通过绘制具有恒定总和(有效地减少一个)的随机数并对它们进行排序来实现这一点。在一个简单的方法中,您需要多次重试,因为根据您的规范,As,Bs,Cs或Ds的数量不能相等。
代码示例:
% total length of sequence
N = 10;
% try again until we found a list of lengths that has no equal entries
ni = [0,0];
% as long as there are two equal numbers inside
while any(diff(ni) == 0)
% one length can be any value
n1 = round(rand()*N);
% only remaining
n2 = round(rand()*(N-n1));
% only remaining
n3 = round(rand()*(N-n1-n2));
% remaining
n4 = N - n1 - n2 - n3;
% sort
ni = sort([n1, n2, n3, n4]);
end
% translate to A, B, C, D
r = [repmat('A', 1, ni(4)), repmat('B', 1, ni(3)), repmat('C', 1, ni(2)), repmat('D', 1, ni(1))];
r
% random permuatation
s = r(randperm(length(r)));
s
给出:
AAAAAAABBC
AABAABACAA
其中第一个是有序随机序列(表明As的数量确实大于B的数量,......),第二个是所需的随机序列。转换为位是微不足道的。