Unity

[셔플 알고리즘] The Fisher-Yates

JiHxxn 2024. 3. 16. 15:34

📜 information

System.Random prng = new System.Random(seed);

// -1 하는 이유는 'the fisher-Yates' 알고리즘에 마지막 인덱스는 생략해도 되기 때문
for (int i = 0; i < array.Length - 1; i++)
{
    int randomIndex = prng.Next(i, array.Length);
    T tempItem = array[randomIndex];
    array[randomIndex] = array[i];
    array[i] = tempItem;
}

return array;
  1. 배열을 한 바퀴 돌면서 랜덤으로 뽑힌 값을 자신의 인덱스와 교환한다.
  2. 배열의 마지막 인덱스는 구조상 같은 값으로 유지되기 때문에 생략해도 된다.

 

  1. 랜덤 값은 0에서 배열의 크기 사이의 값을 뽑는다.
  2. 반복문으로 돌면서 랜덤으로 뽑힌 값을 해당 인덱스 값과 바꿔 셔플 한다.

📖 참고 문서

Fisher-Yates 셔플 알고리즘

 

Fisher-Yates 셔플 알고리즘

뮤직 플레이어에 기본으로 등장하는 것이 셔플(Shuffle)기능입니다.  10곡이 들어있다면, 무작위로 1...

blog.naver.com

Unity Create a Game Series (E09. obstacle placement)

 

'Unity' 카테고리의 다른 글

[키워드] operator  (0) 2024.03.17
[길찾기 알고리즘] Flood Fill  (0) 2024.03.17
Destroy vs DestroyImmediate  (0) 2024.03.16
Physics.OverlapSphere  (0) 2024.03.16
Vector3.Distance vs sqrMagnitude  (2) 2024.03.16