gpt4 book ai didi

matlab - k 大小 p 的不同组合,无需替换

转载 作者:太空宇宙 更新时间:2023-11-03 19:59:02 25 4
gpt4 key购买 nike

我想从整数 1,...,N 中取 k 个不同的随机组合,而不重复大小 p。例如,如果 N=10k=4p=3,可能的结果是:

1 4 9
9 4 2
3 5 2
1 8 4

但不是:

1 4 9
9 4 2
3 5 3
1 9 4

有两个原因:

  1. [1 4 9][1 9 4] 是相同的组合。

  2. [3 5 3] 并非没有重复。

请注意,获取所有可能的组合并(随机)选择其中的 k 很容易遇到内存问题。

最佳答案

好的,我找到了适合我的解决方案。我主要担心的是:

  • 我希望 k 组合是随机的。
  • 处理时间。

下面的函数在每次迭代中对大小为 p 的单个随机组合进行采样(即 row = randperm(N,p)),如果不是,则添加该组合' t已经存在。

在这三个参数中,主要是k影响处理时间。对于不太大的 k,此代码可在几秒钟内运行。我自己会遇到的最极端的情况是 N = 10^6, k = 2000, p = 10,它仍然在 1 秒内运行。

我希望这也能帮助其他人,因为我在多个网站上遇到过这个问题,但没有满意的答案。

function C = kcombsn(N,k,p)
C = randperm(N,p);
Csort = sort(C,2);

while size(C,1) < k

row = randperm(N,p);
row_sort = sort(row);

if isempty(intersect(row_sort,Csort,'rows'))
C = [C; row];
Csort = [Csort; row_sort];
end
end

end

编辑:我也是posted the code on the MATLAB File Exchange .

关于matlab - k 大小 p 的不同组合,无需替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34767314/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com