首页 > 代码库 > 洗牌算法
洗牌算法
问题描述:给定序列A,输出序列A‘,要求A’中各元素的位置随机化
1.构造一个随机数组,使用该数组元素作为key排序数组A
1 SHUFFLE(A)2 n = length of A3 create array R[n]4 for i = 0, n-15 R[i] = RANDOM_INT(n^3) //采用n^3是为了减少key的冲突6 SORT A with R as keys
时间复杂度:O(n+nlgn) = O(nlgn)
空间复杂度: O(n)
2.遍历序列A,将该位置元素与数组中随机位置的其他元素交换
1 SHUFFLE(A)2 n = length of A3 for i = 1 to n-14 do5 swap A[i] A[RANDOM(0,i+1)]
时间复杂度:O(n)
空间复杂度:O(1)
STL中random_shuffle算法采用2的实现方式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。