:: 게시판
:: 이전 게시판
|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
12/05/22 22:45
정리하자면 Random Permutation, 그러니까 1~N을 random하게 섞는 함수를 말씀하시는 것 같은데, 결론부터 말씀드리자면 상수 Complexity를 가지는 함수는 불가능합니다. O(N) 정도에 주어진 배열을 random하게 섞는 알고리즘은 많이 알려져있으니 찾아보셔요.
12/05/22 23:56
혹시 matlab 쓰시면 randperm 함수 찾아보세요.
간단한 설명은 바로 밑에 p = randperm(n) returns a row vector containing a random permutation of the integers from 1 to n inclusive. randperm이 프로그래밍 하고자 하는 함수라면 randperm.m 화일 matlab이나 notepad에서 열어서 알고리즘 확인하면서 원하시는 language로 바꾸시는 게 가장 편할 듯.
12/05/23 01:16
어느정도의 랜덤함을 원하시는지 몰라도..
입력 숫자를 x라고 하면 x*p+k (mod N)을 계산하는 정도로 간단히 상수시간 구현은 가능합니다. (p는 N과 서로소인 수, k는 임의의 수, mod N은 N으로 나눈 나머지 입니다.) 예를들면 1,2,3,4,5 가 집합 A이면, p=3,k=2로 잡았다고 했을때
1 => 1*3+2 = 5 (mod 5) = 5 2 => 2*3+2 = 8 (mod 5) = 3 3 => 3*3+2 = 11 (mod 5) = 1 4 => 4*3+2 = 14 (mod 5) = 4 5 => 5*3+2 = 17 (mod 5) = 2 와 같은 식으로 섞이게 되는데 문제는 결과에 규칙성이 있다는 거죠. (p과 N과 서로소라는 조건이 중요합니다. 그러면 결과에 중복이 생기지 않아요.) 하지만 어떤 문제에 적용하느냐에 따라서 (특히 p와 k를 랜덤으로 잡으면) 쓰일수도 있는 방법입니다. 참고하세요~
|