어떻게 값을 생성하는 함수를 가지고 있을때, 순열을 어떻게 랜덤하게 셔플할 수 있을까?
알고리즘
- 어떤 순열 이 있다고 하자.
- k = n 으로 두고 시작한다.
- 일때 라고 하자. 를 생성해서 를 구한다.
- 와 를 바꾼다.
- 을 하고, 만일 라면, 3으로 돌아간다. 아니라면 멈춘다.
코드
import random
r = random.random
def random_shuffle(lst):
n = len(lst)
tmp = lst[:]
for i in range(n, 1, -1):
j = int(r() * i)
tmp[i-1], tmp[j-1] = tmp[j-1], tmp[i-1]
return tmp
l = list(range(10))
print(random_shuffle(l))