3 ms·
> Could you please expand on your linked code, not really a C++ programmer and line 22/25 confuse me a bit? I've annotated the program here: http://ideone.com/
by detrino 12y ago
> Could you please expand on your linked code, not really a C++ programmer and line 22/25 confuse me a bit?
I've annotated the program here: http://ideone.com/gmaBri http://ideone.com/gmaBri
> Unfortunately I don't understand how each element has the same probability of being chosen. I.e. the first element seems to have a probability of 1/n, while the second has 1/n + 1/(n-1) etc. Am i wrong about this?
This is just a partial Fisher-Yates shuffle[1] using a sparse sequence instead of an array. Keep in mind that if an element is not chosen it is swapped with the chosen element and will be considered again. I think the best way to think about it is that you are choosing a random element from the set and then "removing" it from the set with the swap and then repeating.
[1] http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Th...