基于randperm的算法是什么?

时间:2013-05-07 11:53:16

标签: matlab shuffle

我在哪里可以找到Matlab的randperm函数使用的算法?它是Fisher-yates(Knuth)改组算法还是别的什么?

1 个答案:

答案 0 :(得分:2)

对于早在R2009b的MATLAB版本,randperm实现如下:

function p = randperm(n)
    [ignore, p] = sort(rand(1, n));

您可以输入以下内容查看:

type randperm

基本上randperm生成 n 数字并对它们进行排序,将有序索引p的结果数组作为随机排列返回。这个时间复杂度最多是 O n log n ),比{i 3}更差,后者在运行0 的(名词的)。

编辑: Dennis指出,在以后的版本中randperm会在 O n )时间运行,所以很明显它会得到改善。但是,它是一个内置函数,因此无法看到它的实现。