随机化算法
此算法的思想就是遍历数据,第i个数据与随机一个位置的数据交换.最终的数据就是一个打乱顺序的数据.
这种算法应用很广,我常见的场景是在算法比赛中有些测试点会恶意卡时间复杂度.
比如你用快排,有一些测试点会把时间卡到最坏时间复杂度O(n^2),和平均O(nlnn)相差很多,这时候就需要随机化算法了,先把数据随机化一边,之后在用快速排序.就完全没有这个问题了.
可能会有疑问随机化不是打乱原本顺序吗?可快排本身就是不稳定算法,要想稳定不如直接去用归并.
还有会用到打牌这种游戏中,比如斗地主的发牌阶段.
import java.util.Arrays;
import java.util.Random;
public class Main {
public static void main(String[] args) {
int[] num = new int[100];
Random random = new Random();
for (int i = 0; i < num.length; i++) {
num[i] = i;
}
System.out.println(Arrays.toString(num));
for (int i = 0; i < num.length; i++) {
swap(num, i, random.nextInt(num.length));
}
System.out.println(Arrays.toString(num));
}
public static void swap(int[] data, int index1, int index2) {
int temp = data[index1];
data[index1] = data[index2];
data[index2] = temp;
}
}

浙公网安备 33010602011771号