假设有10亿个关键字,其中有重复的。共大约有1亿个不同关键字。
现在要求从这里 有放回 的随机选取 N个不同的关键字。
注意 随机选取要考虑 关键字的频数
N可能很小也可能很大
请设计一个 尽量高效的算法
------------------------------------------------------------------------
当前思路:
N如果较小,就按一般方式处理
N如果较大,可能需要判断 当前选择的关键字是否已经被选择 这个过程的复杂度 太大
所以要尽量避免 选择到重复的关键字。 直接思路是每次选择 一个关键字后 就将其从被选 关键字集里剔除。但这里必须保证每个关键字被选中的概率不变。
如果每个关键字只出现一次的话,就相对容易些,每次选择一个关键字后,就把它和后面的数据交换一下。更改rand范围即可。
没细想,随机的方案可以使用NEW GUID()来排序。