An efficient algorithm for sequential random sampling
Jeffrey Scott Vitter · ACM Transactions on Mathematical Software · 1987
We examine several methods for drawing a sequential random sample of n records from a file containing N records. Method D is recommended for general use. The algorithm is on-line (so that CPU time can be overlapped with I/O), has a small constant memory requirement, and is easy to program. An improved implementation is detailed in the Appendix.