随机选择数组,不重复

时间:2014-11-21 03:13:08

标签: algorithm matlab matrix

我有一个算法可以在数组中随机选择元素t而不重复。这是算法的更多细节 enter image description here

可以解释如下:

  1. 初始化数组索引u,用于存储从1到k(第1行到第3行)
  2. 的数字索引
  3. 从k设置gamma的初始值,并在每次迭代时减少1。伽玛的目的是没有重复(第4,9,10行)
  4. 随机选择从1到N的数字t(在j = 1,选择1到k,N是非重复数字),然后将数字放在数组的末尾。
  5. 重复步骤2至3
  6. 如果gamma = 0,则重置gamma = k 该函数将返回t。
  7. 例如,我有一个数组A=[1,2,3,4,5,6,7,8,9], k=9 =size(A), N=12(从1到9,数字只选择一次)。现在我想使用这个算法从数组A中随机选择数字T.这是我的代码。但是,它与算法中的第6行不相似。这样对吗?让我看看我的代码帮助我

    function nonRepeat
        k=9;
        u=1:k; % initial value of index
        N=12
        gamma=k;
        for j=1:N
            index=randi(gamma,1); % use other choosing
            t=u(index)
            %%swapping
            temp=u(t);
            u(t)=u(gamma);
            u(gamma)=temp;
            gamma=gamma-1;
            if gamma==0 
              gamma=k;
            end
        end
    end
    

1 个答案:

答案 0 :(得分:0)

我认为index=randi(gamma,1);不正确,因为它会随机选择t,但您随机选择index并指定t=u(index)

看看它是否有效,

k = 9;
u = 1 : k;
N = 12;
gamma = k;
for j = 1 : N
    t = randi(gamma,1);
    temp = u(t);
    u(t) = u(gamma);
    u(gamma) = temp;
    gamma = gamma - 1;
    if gamma == 0 
      gamma = k;
    end
end