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

    洗牌可以抽象为:给定一组排列,输出该排列的一个随机组合

    算法一:

    实现语言:Java

    package com.test.demo;
    
    import java.util.Random;
    import java.util.Scanner;
    
    /*
    Fisher–Yates随机置乱算法也被称做高纳德置乱算法,通俗说就是生成一个有限集合的随机排列。
    Fisher-Yates随机置乱算法是无偏的,所以每个排列都是等可能的,当前使用的Fisher-Yates随机置乱算法是相当有效的,需要的时间正比于要随机置乱的数,不需要额为的存储空间开销。
     */
    public class FisherYatesShuffle {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            int[] arr = null;
            if (n > 0) {
                arr = new FisherYatesShuffle().fisherYatesShuffle(n);
            }
            for (int i = 0; i < n; ++i) {
                System.out.print(arr[i] + " ");
            }
        }
    
        public int[] fisherYatesShuffle(int n) {
            if (n <= 0) {
                return null;
            }
            int[] arr = new int[n];
            //初始的有序数组
            for (int i = 0; i < 10; ++i) {
                arr[i] = i + 1;
            }
            //费雪耶兹置乱算法:每次生成的随机交换位置:
            for (int i = n - 1; i > 0; --i) {
                //随机数生成器,范围[0, i] 
                int rand = (new Random()).nextInt(i + 1);
                int tmp = arr[i];
                arr[i] = arr[rand];
                arr[rand] = tmp;
            }
            return arr;
        }
    }
    
  • 相关阅读:
    C# 中==和Equal的区别
    3dmath复习随笔
    3dmax学习资料记录
    [官方教程] Unity 5 BLACKSMITH深度分享
    [技术] [插件精选] 炫酷粒子特效(下)
    Unity3D总结:关于射线碰撞
    Unity3D将来时:IL2CPP(上)
    3DMAX 9 角色建模3 uv展开
    php,c# hamsha1
    U3D 的一些基础优化
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8679092.html
Copyright © 2011-2022 走看看