我在哪里可以找到Matlab的randperm
函数使用的算法?它是Fisher-yates(Knuth)改组算法还是别的什么?
答案 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 )时间运行,所以很明显它会得到改善。但是,它是一个内置函数,因此无法看到它的实现。