2013-05-07 2 views
0

Matlab의 randperm 함수에서 사용하는 알고리즘은 어디에서 찾을 수 있습니까? 그것은 피셔 - 예이츠 (크 누스) 셔플 링 알고리즘인가?randperm은 어떤 알고리즘을 기반으로합니까?

type randperm 

을 기본적으로 randpermN 숫자와 종류를 생성

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

당신은 입력하여 자신을 위해 그것을 볼 수 있습니다 : MATLAB에 대한

+0

이 질문의 향상된 버전은 [Programmers.SE] (http://programmers.stackexchange.com/)에 더 적합합니다. – Jesse

+0

Matlab 2012b에서 10^5 ~ 10^8의 범위에있는 작은 테스트는 계산 시간이 입력에 대략 선형으로 증가 함을 보여줍니다. –

답변

2

다음과 같이 randperm이 구현되어, 빠르면는 R2009b로 출시 결과적으로 정렬 된 인덱스 배열 p을 임의 치환으로 반환합니다. 이에 대한 시간 복잡도는 O ( N)에서 실행되는 최상의 O ( N 로그 N), 더 이상 Fisher-and-Yates' shuffle이다.

편집 : 데니스는 이후 릴리스에서 O ( N)시에 randperm 실행, 그래서 분명히 개선 있다고 지적한다. 그러나 내장 함수이므로 구현을 볼 수 없습니다.

+0

와우. mathworks에서 열악한 직업을하고 있습니까? – Shai

+0

@Shai 핑거 포인팅을 원하지는 않지만 ... - –

+0

2012b에 'type randperm'을 사용하면 실제로 볼 수 있습니다.'randperm '은 내장 함수입니다 .' 다른 문서를 보면 나는 또한 이것이 실제로 어디에서나 기술되는 것을 보지 못한다. (비록 랜드가 사용된다고 언급되었지만). –