|
洗牌算法
与打乱数组顺序有关的题目,要求位置交换的概率相等。
证明: 放在第一个位置的元素,取0-n 的随机数,概率为 1/n;
放在第二个位置的元素,取1到n 的随机数,概率为 (1-1/n)* 1/(n-1) = 1/n;
void shuffle(vector<int>& nums){
int n = nums.size();
if (n<=0) return ;
for(int i=0;i<n;i++){
int index = i + rand() % (n-i);
swap(nums[index], nums[i]);
}
}
|
|