난수는 프로그래밍에 자주 사용되며 Golang은 의사 난수를 생성하는 rand 패키지를 제공합니다. 그러나 어떤 경우에는 서로 다른 난수 세트를 생성해야 할 수도 있습니다. 이 목표를 달성하려면 실행 가능한 알고리즘을 고려해야 합니다.
이 기사에서는 반복되지 않는 난수를 생성하는 여러 가지 방법을 소개하고 Golang rand 패키지를 사용하여 반복되지 않는 난수를 생성하는 방법을 제공합니다.
방법 1: 셔플링 알고리즘
셔플링 알고리즘에서는 동일한 범위의 숫자 배열을 한 번 무작위로 배열합니다. 이 알고리즘의 시간 복잡도는 O(n)입니다. 이 방법의 단점은 이 알고리즘을 사용하여 많은 수의 난수를 생성할 때 시스템이 많은 메모리를 차지한다는 것입니다.
알고리즘은 다음과 같이 구현됩니다.
방법 2: 기각 샘플링 알고리즘
기각 샘플링 알고리즘에서는 생성된 난수를 세트에 저장하고 다음 난수를 생성할 때 세트에 동일한 숫자가 이미 존재하는지 확인합니다. 있는 경우 난수를 다시 생성합니다. 이 알고리즘의 장점은 공간 효율적인 알고리즘이라는 것입니다. 그러나 이 알고리즘은 생성해야 하는 고유 숫자 수가 많을 때 시간이 더 많이 걸릴 수 있습니다.
알고리즘은 다음과 같이 구현됩니다.
방법 3: 비트맵 알고리즘
비트맵 알고리즘에서는 각 비트가 범위에 있는 숫자의 존재 여부를 나타내는 비트맵을 만듭니다. 우리는 이 비트맵을 사용하여 우리가 생성한 난수 집합에 특정 숫자가 이미 존재하는지 여부를 추적합니다. 이 알고리즘의 장점은 상대적으로 시간 및 공간 효율적인 알고리즘이라는 것입니다.
알고리즘은 다음과 같이 구현됩니다.
방법 4: Golang의 rand 패키지 구현
Golang은 의사 난수를 생성하는 데 사용할 수 있는 rand 패키지를 제공합니다. 이를 사용하여 반복되지 않는 난수를 생성할 수 있습니다.
알고리즘은 다음과 같이 구현됩니다.
위의 네 가지 방법을 사용하여 반복되지 않는 난수를 생성할 수 있습니다. 각 알고리즘에는 장점과 단점이 있습니다. 사용할 알고리즘은 필요에 따라 다릅니다. 중요도가 공간에 있는 경우 거부 샘플링 알고리즘을 사용하고, 시간이 지남에 따라 중요하다면 비트맵 알고리즘을 선택합니다. 그리고 Golang을 사용하는 경우 rand 패키지를 직접 사용하여 간단하고 직접적이며 효율적인 비반복 난수 생성 알고리즘을 구현할 수 있습니다.
위 내용은 golang rand가 반복되지 않습니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!