N 개의 정수 배열을 '0'값으로 설정한다고 가정 해 봅시다. 값이 '0'인 배열의 무작위 요소를 선택하고 값을 넣으려고합니다. '1'충돌없이 배열을 무작위로 채우는 알고리즘
어떻게 효율적으로 수행 할 수 있습니까?
나는이 개 솔루션을 함께했다하지만 두 번째는 관련
때문에 충돌의 가능성의 큰 배열 매우 비효율적이다
int array[N] //init to 0s
int n //number of 1s we want to add to the array
int i = 0
while i < n
int a = random(0, N)
if array[a] == 0
array[a] = 1
i++
end if
end while
매우 ineficient
먼저 해결책을 찾아 목록에 나머지 0 개의 위치가 모두 포함되어 있으며 배열의 색인에 해당하는 값을 찾기 위해 남은 0과 0 사이의 난수를 선택합니다. 그것은 작업의 수를 경계하기 때문에, 최초의 솔루션보다 훨씬 더 안정적이지만, 우리가 배열을 채우려면 아직 N²의 최악의 시나리오의 복잡성을 가지고 완전히
n
들과
N-n
와
생각합니다. 결과 배열을 수정하는 연산을 수행하지 않기 때문에 가장 효율적인 방법입니다. 감사 – user3548298