摘要:
给定一个未知长度的整数流,如何从中随机选取个m随机数。解决方法:定义长度为m的数组,对于数据流中的前1000个关键字,显然都要放到数组中。对于数据流中的的第n(n>m)个关键字,则这个关键字被随机选中的概率为 m/n。故以 m/n 的概率用这个关键字去替换数组中的一个。这样就可以保证所有关键字都以 m/n的概率被选中。对于后面的关键字都进行这样的处理,这样就可以保证数组中总是保存着m个随机关键字。可以用归纳法证明关键字都以 m/n的概率被选中。void swap(int* p, int* q){ int tmp = *p; *p = *q; *q = tmp;}void sh... 阅读全文