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;
        }
    }
    
  • 相关阅读:
    dubbo-admin 2.0安装部署
    一文多发神器
    springboot整合druid踩坑记录
    thymeleaf中的重定向的绝对路径问题
    路径问题
    sp_executesql介绍和使用
    java.net.UnknownHostException: api.weixin.qq.com解决办法
    调用百度地图示例
    浅析分布式架构
    城乡医保用户角色未分配修改
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8679092.html
Copyright © 2011-2022 走看看