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?

questionAnswers(3)

yourAnswerToTheQuestion