10개의 숫자를 10개의 위치로 무작위로 나누어서 이런 무작위 알고리즘을 작성하는 방법입니다.
내 생각: 난수를 생성한 다음 모듈로 10 + 난수로 10개의 위치를 취하지만 충분히 무작위적인 느낌이 들지 않습니다. 좋은 알고리즘이 있습니까?
예:
1 2 3 4 5 6 7 8 9 10
2 1 4 3 9 7 8 6 5 10
. . .
(무작위로 배열)
보충:
방법 제공:
10개 숫자의 선형 테이블, 무작위(10)=5, 노드 5 삭제
9개 숫자의 선형 테이블, 무작위(9)=2, 노드 2 삭제
. . . .
마지막 무작위 시퀀스 5,2. . . . .
아주 무작위로 느껴집니다.
10개의 숫자를 10개의 위치로 무작위로 나누어서 이런 무작위 알고리즘을 작성하는 방법입니다.
내 생각: 난수를 생성한 다음 모듈로 10 + 난수로 10개의 위치를 취하지만 충분히 무작위적인 느낌이 들지 않습니다. 좋은 알고리즘이 있습니까?
예:
1 2 3 4 5 6 7 8 9 10
2 1 4 3 9 7 8 6 5 10
. . .
(무작위 배열)
보충:
방법 제공:
10개 숫자의 선형 테이블, 무작위(10)=5, 노드 5 삭제
9개 숫자의 선형 테이블, 무작위(9)=2, 노드 2 삭제
. . . .
마지막 무작위 시퀀스 5,2. . . . .
아주 무작위로 느껴집니다.
의사 코드:
<code>生成长度为10的数组a,压入1~10(或其他你想要的数) for (i = a.length - 1; i > 0; i--) { 生成一个0~i的随机数j(0 <= j < i) 交换a[i]和a[j] }</code>
컴퓨터가 진정한 난수를 생성할 수 있는 방법은 없습니다... 생성된 숫자를 다양한 간격으로 균등하게 분포시키려고 노력할 뿐입니다..
랜덤 알고리즘의 문제는 아닙니다. 샘플이 너무 작아서 100개의 무작위 숫자를 시도하면 매우 무작위로 보입니다.
랜덤으로 1, 3, 2, 4, 5, 6, 7, 8, 10, 9가 나오지만 아직도 랜덤이 아니라고 생각하시죠
10개의 숫자(1~10)를 10개의 위치로 해시하려고 합니다. 그냥 해시하세요.