zoukankan      html  css  js  c++  java
  • 洗牌算法

    出处:https://mp.weixin.qq.com/s/uYPnZ0MsQIT2_t3lk8ju1g

    问题

    小E最近在设计一款斗地主小游戏,为了保证发到玩家手中的牌具有随机性,小E必须对现实世界中的洗牌过程进行模拟。看似简单的一个问题,却难住了小E。

    于是,小E向老师请教。

    思路

     

    点评:上面即为洗牌算法的思想,其本质是对数组元素进行随机重排。数组中每个元素经过洗牌算法后落在数组某个位置上的概率是相等的,洗牌算法在牌类游戏中非常有用。我们最终将算法的时间复杂度优化到了O(n),空间复杂度优化到了O(1)。

    java代码实现:

    import java.util.Random;
    
    public class Test4 {
    
        public static void main(String[] args) {
            int[] datas = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,12,  13, 14, 15, 16, 17, 18, 19, 20};
            int[] returnDatas = shuffle(datas);
            System.out.println("nums:"+ returnDatas.length);
            for(int i = 0, length = returnDatas.length; i < length; i++) {
                System.out.print(returnDatas[i]+", ");
            }
        }
        
        public static int[] shuffle(int[] nums) {
            Random rnd = new Random();
            for(int i = nums.length-1; i > 0; i-- ) {
                int j = rnd.nextInt(i+1);
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
            return nums;
        }
    
    }

    输出信息:

    nums:20
    6, 9, 18, 10, 2, 16, 7, 19, 14, 1, 12, 5, 3, 4, 17, 20, 8, 15, 13, 11,

  • 相关阅读:
    navigator对象及属性(userAgent)(扩展)
    最新Visual C++ 运行时
    Wakfu .pk 音频文件提取
    Flex布局学习记录
    小程序 swiper bindChange 抖动解决方法
    小程序 scroll-view 无法触发 onReachBottom 解决办法
    小程序修改按钮宽高
    db.collection(变量名)
    小程序图片轮播自适应
    微信小程序 MD5引用
  • 原文地址:https://www.cnblogs.com/myseries/p/10722001.html
Copyright © 2011-2022 走看看