Gerar aleatoriamente um conjunto de m inteiros de uma matriz de tamanho n
A pergunta completa é:
Escreva um método para gerar aleatoriamente um conjunto de m inteiros de uma matriz de tamanhon
. Cada elemento deve ter a mesma probabilidade de ser escolhido
Esta questão é escolhida de "Crack the coding interview" e a solução é esta:
Podemos trocar o elemento com um elemento no início da matriz e depois "lembrar" que a matriz agora inclui apenas elementosj
e maior. Isto é, quando nós escolhemossubset[0]
ser estararray[k]
nós substituímosarray[k]
com o primeiro elemento na matriz. Quando nós escolhemossubset[1]
, nós consideramosarray[0]
estar "morto" e escolhemos um elemento aleatórioy
entre 1 e arraysize()
. Em seguida, definimos o subconjunto [1] igual aarray[y]
, E definirarray[y]
igual a array [1]. Os elementos 0 e 1 estão agora "mortos".Subset[2]
agora é escolhido dearray[2]
atravésarray[array size()]
, e assim por diante.
Minha pergunta é que, se estamos encolhendo o array do qual estamos escolhendo números aleatórios, então a probabilidade de cada número ser escolhido1/remaining_num_elements
. Como ele se mantém igual para todos os elementos?