Algorithm 数组中无重复的随机选择数

Algorithm 数组中无重复的随机选择数,algorithm,matlab,matrix,Algorithm,Matlab,Matrix,我有一个算法,可以随机选择数组中的元素t,而不需要重复。这是算法的更多细节 它可以解释如下: 初始化一个数组索引u,它存储从1到k的数字索引,第1行到第3行 从k开始设置gamma的初始值,每次迭代减少一个。伽马射线用于无重复线4、9、10的情况 从1到Nat的j=1中随机选择一个数字t,从1到k,N为非保留数,然后将该数字放在数组的末尾。 重新执行步骤2至3 如果gamma=0,则重置gamma=k 此函数将返回t。 例如,我有一个数组a=[1,2,3,4,5,6,7,8,9],k=9=si

我有一个算法,可以随机选择数组中的元素t,而不需要重复。这是算法的更多细节

它可以解释如下:

初始化一个数组索引u,它存储从1到k的数字索引,第1行到第3行 从k开始设置gamma的初始值,每次迭代减少一个。伽马射线用于无重复线4、9、10的情况 从1到Nat的j=1中随机选择一个数字t,从1到k,N为非保留数,然后将该数字放在数组的末尾。 重新执行步骤2至3 如果gamma=0,则重置gamma=k 此函数将返回t。 例如,我有一个数组a=[1,2,3,4,5,6,7,8,9],k=9=sizeA,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
我认为index=randigamma,1;不正确,因为它说随机选择数字t,但随机选择索引并指定t=uindex

看看能不能用

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

我认为您可以从更整洁地格式化代码开始。然后,解释你所说的“不好用”是什么意思。我会清理它。我运行了它,但有一个元素在1到1的范围内选择了2次k@user8264,你怎么知道它会选择一个数字两次?我只给了一个数字。@Kamtal。这是错误的,你的输出是627743221998。让我们看看索引从1到9的数字:2出现两次。这是错误的。在1到k的范围内,每个数字必须显示为1time@user8264,如何使用非重复获得627743321138?我只是运行了你的代码。这是你的结果。我的预期结果是,每个数字在1到10之间只出现一次k@user8264,您有9个数字,并且您希望序列长度为12,那么每个数字如何仅显示一次??可能将N更改为9或将k更改为12。对于范围从1到9,它将显示一次,而范围从10到12,它也显示一次。从1到12的所有范围将有一些元素出现两次。让我们看看我问题中的原始算法