사용 가능한 이진 난수 (0 또는 1 반환) 함수를 사용하여 정수 난수 생성

user2520119

최근 인터뷰에서 아래 질문을 받았습니다

0 또는 1을 무작위로 반환하는 함수 BinaryRandom ()이 주어지면 BinaryRandom ()을 사용하여 주어진 입력보다 작거나 같은 난수를 생성하는 int MyRandom (int) 함수를 만듭니다.

나는 매일 스택 오버플로와 GeeksForGeeks 사용자이고 GeeksForGeeks에서 비슷한 종류의 문제를 회상하므로 아래 링크를 참조하십시오.

https://www.geeksforgeeks.org/implement-random-0-6-generator-using-the-given-random-0-1-generator/

유일한 차이점은 GeeksForGeeks 범위에 0-6이었고 제 경우 범위는 <= N입니다 (N은 입력 정수입니다).

위의 솔루션은 다음 링크를 사용하여 SO에서 파생됩니다.

동전 던지기에서 난수 생성기 만들기 .

알고리즘 초심자로서 위에서 이해하기가 어렵습니다. 누구든지 위의 질문에 대한 간단한 해결책을 제안 해 주시겠습니까? 아니면 간단한 이해를 주시겠습니까?

chux-모니카 복원

0 또는 1을 반환하는 BinaryRandom () 함수가 주어지면 주어진 입력보다 작거나 같은 난수를 만드는
함수 int MyRandom(int)를 만듭니다.

int MyRandom(int max);
  1. max-> 의 비트 너비를 찾으십시오 bitwidth. 0까지 오른쪽 시프트를 계산할 수 있습니다. 예를 들어를 사용 max == 42하면 6 비트가 필요합니다.

  2. 호출하여 난수를 형성한다 BinaryRandom(). 예를 들어 6 비트로 숫자를 형성합니다 [0...63].

    int r = 0;
    // Double the value each iteration and add new bit.
    for (i = 0; i<bitwidth; i++) r = 2*r + BinaryRandom();  
    
  3. 범위를 벗어나지 않는지 확인 : 인 경우 r > max2 단계를 반복합니다.

  4. 반환 r.

2 단계를 다시 실행해야하는 기회를 줄이는 방법 (표시되지 않음)이 있지만 r_from_more_than_6_iterations%42.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

0과 1 사이의 난수 생성

분류에서Dev

POSIX에서 스레드를 사용하여 [0,1] 사이의 난수를 생성하는 방법

분류에서Dev

POSIX에서 스레드를 사용하여 [0,1] 사이의 난수를 생성하는 방법

분류에서Dev

while 루프를 사용하여 난수를 생성하는 함수 반복

분류에서Dev

0에서 n 사이의 RNGCryptoServiceProvider를 사용하여 난수 목록 생성

분류에서Dev

PHP를 사용하여 1에서 10 사이의 30 개의 난수 생성

분류에서Dev

1, 16 사이의 난수 생성

분류에서Dev

srand를 사용하여 난수 생성

분류에서Dev

srand ()를 사용한 난수 생성

분류에서Dev

0과 1 사이의 난수 생성 [C ++]

분류에서Dev

OpenMP를 사용하여 C 코드에서 0과 1 사이의 균일하게 분포 된 난수를 생성하는 방법은 무엇입니까?

분류에서Dev

SQL에서 1000에서 10000 사이의 난수를 반환하는 함수 생성

분류에서Dev

이 의사 난수 생성기를 사용하는 것이 여기서 안전한지 확인하십시오.

분류에서Dev

범위가 주어지면 항상 0을 반환하는 난수 생성기

분류에서Dev

Clojure에서 시드를 사용할 때 재현 가능한 난수를 반복적으로 생성하지 않는 이유는 무엇입니까?

분류에서Dev

부울 난수 생성기를 사용하여 0에서 n까지 난수 생성

분류에서Dev

rand_r을 사용하여 -1과 1 사이의 난수를 어떻게 생성 할 수 있습니까?

분류에서Dev

jquery를 사용하는 0.3과 1 사이의 난수

분류에서Dev

유전 알고리즘 도구 상자, Deap에서 0과 1 사이의 난수를 생성하는 방법

분류에서Dev

동일한 값을 반환하는 난수 생성기 (C ++)

분류에서Dev

난수에 대한 난수 시드를 생성하는 방법

분류에서Dev

함수를 사용하여 난수를 생성하면 빠른 정렬이 느려지는 이유는 무엇입니까?

분류에서Dev

기본 샘플을 사용하여 난수를 생성하는 동안 0 제외

분류에서Dev

사용자가 범위를 선택할 수있는 C ++ 난수 생성기

분류에서Dev

고유 한 난수를 생성하는 JS 함수

분류에서Dev

주어진 간격에서 숫자 분포를 사용하여 난수 생성

분류에서Dev

기하 분포를 사용한 난수 생성기

분류에서Dev

루비의 범위 사이에 시드를 사용하여 난수 생성

분류에서Dev

의사 난수 생성기

Related 관련 기사

  1. 1

    0과 1 사이의 난수 생성

  2. 2

    POSIX에서 스레드를 사용하여 [0,1] 사이의 난수를 생성하는 방법

  3. 3

    POSIX에서 스레드를 사용하여 [0,1] 사이의 난수를 생성하는 방법

  4. 4

    while 루프를 사용하여 난수를 생성하는 함수 반복

  5. 5

    0에서 n 사이의 RNGCryptoServiceProvider를 사용하여 난수 목록 생성

  6. 6

    PHP를 사용하여 1에서 10 사이의 30 개의 난수 생성

  7. 7

    1, 16 사이의 난수 생성

  8. 8

    srand를 사용하여 난수 생성

  9. 9

    srand ()를 사용한 난수 생성

  10. 10

    0과 1 사이의 난수 생성 [C ++]

  11. 11

    OpenMP를 사용하여 C 코드에서 0과 1 사이의 균일하게 분포 된 난수를 생성하는 방법은 무엇입니까?

  12. 12

    SQL에서 1000에서 10000 사이의 난수를 반환하는 함수 생성

  13. 13

    이 의사 난수 생성기를 사용하는 것이 여기서 안전한지 확인하십시오.

  14. 14

    범위가 주어지면 항상 0을 반환하는 난수 생성기

  15. 15

    Clojure에서 시드를 사용할 때 재현 가능한 난수를 반복적으로 생성하지 않는 이유는 무엇입니까?

  16. 16

    부울 난수 생성기를 사용하여 0에서 n까지 난수 생성

  17. 17

    rand_r을 사용하여 -1과 1 사이의 난수를 어떻게 생성 할 수 있습니까?

  18. 18

    jquery를 사용하는 0.3과 1 사이의 난수

  19. 19

    유전 알고리즘 도구 상자, Deap에서 0과 1 사이의 난수를 생성하는 방법

  20. 20

    동일한 값을 반환하는 난수 생성기 (C ++)

  21. 21

    난수에 대한 난수 시드를 생성하는 방법

  22. 22

    함수를 사용하여 난수를 생성하면 빠른 정렬이 느려지는 이유는 무엇입니까?

  23. 23

    기본 샘플을 사용하여 난수를 생성하는 동안 0 제외

  24. 24

    사용자가 범위를 선택할 수있는 C ++ 난수 생성기

  25. 25

    고유 한 난수를 생성하는 JS 함수

  26. 26

    주어진 간격에서 숫자 분포를 사용하여 난수 생성

  27. 27

    기하 분포를 사용한 난수 생성기

  28. 28

    루비의 범위 사이에 시드를 사용하여 난수 생성

  29. 29

    의사 난수 생성기

뜨겁다태그

보관