随机化算法

此算法的思想就是遍历数据,第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;
    }
}

posted @ 2020-03-12 01:17  continued258  阅读(169)  评论(0)    收藏  举报