2013-05-07 38 views
0

我在哪裏可以找到Matlab的randperm函數使用哪種算法?是Fisher-yates(Knuth)洗牌算法還是別的?randperm基於什麼算法?

+0

此問題的改進版本更適合[Programmers.SE](http://programmers.stackexchange.com/)。 – Jesse 2013-05-07 15:03:58

+0

在Matlab2012b中10^5到10^8範圍內的小測試表明,計算時間與輸入大致成線性關係。 – 2013-05-07 15:23:06

回答

2

對於MATLAB釋放早在R2009b中,randperm執行如下:

type randperm 

基本上randperm產生ñ數量和種類:

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

您可以通過鍵入看到它你自己他們返回作爲隨機排列的有序索引p的結果數組。造成這種情況的時間複雜度爲Øñ日誌ñ)充其量,猶有Fisher-and-Yates' shuffle,這在Ôñ)運行。

編輯:丹尼斯指出,在以後的版本在Ôñ)時間randperm運行,所以很明顯它的改善。但是,這是一個內置函數,所以不可能看到它的實現。

+0

哇。在數學工作上做得不好? – Shai 2013-05-07 14:14:04

+0

@Shai不想要任何指向,但它似乎是如此... - – 2013-05-07 14:19:27

+0

其實我只是在2012b上使用'type randperm'時看到了這個'''randperm'是一個內置函數.'當看另一個文檔我也沒有真正看到這在任何地方被描述(儘管提到使用了rand)。 – 2013-05-07 15:11:25