performance - 列出所有 n 对整数的最快解决方案?

标签 performance matlab matrix combinations combinatorics

我想列出所有可能的整数对 [1, n]n .我发现自己在寻找最快的选择。到目前为止,这是我想出的。

Matlab 的 nchoosek combnk 方法推荐n<15由于组合数量激增,因此列出了所有可能的组合。所以这有多快取决于 n。

pair = nchoosek(1:n, 2);

另一种选择是使用嵌套的 for 循环

kk =1;
pair = zeros(nchoosek(n, 2), 2);
for ii = 1:n
    for jj = ii+1:n
        pair(kk, :) = [ii, jj];
        kk = kk + 1;
    end
end  

这会比较慢。

我也想到了使用 ind2sub直接运行

pair_adjacency = tril(ones(n),  -1);
[x, y] = ind2sub(size(pair_adjacency), find(pair_adjacency==1)); 
pair = [x, y];

在一个循环中对这些方法进行计时,每个方法 10 次 n=1000 , 我从最快到最慢

  1. ind2sub(0.15 秒)
  2. for 循环(16.3 秒)
  3. nchoosek(16.8 秒)

好像ind2sub远射是最快的方法。出于好奇,还有哪些其他选项可能会或可能不会更快?

最佳答案

替换nchoosek(1:N,2)

使用 bsxfun -

[Y,X] = find(bsxfun(@gt,[1:N]',[1:N]))
pair = [X, Y];

只有 trilfind(没有 ind2sub)-

[y,x] = find(tril(true(N),-1))
pair = [X, Y];

关于performance - 列出所有 n 对整数的最快解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28506232/

相关文章:

python - 快速就地替换 numpy 数组中的某些值

c# - 为什么我的应用程序将 24% 的生命周期用于空值检查?

c - 如何将 Bus 对象读入 C S-Function 中的 C 结构 [Matlab]

c++ - 为模板类声明模板方法

actionscript-3 - 重新设置显示对象父级时的变换矩阵操作

performance - 有 VB6 性能工具吗?

Mysql 通过 join 提高 count 的性能

matlab - 矩阵运算难度

regex - matlab正则表达式检查脚本中是否设置了变量

c# - 打印出矩阵及其转置,C#