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;
        }
    }
    
  • 相关阅读:
    Django进阶之CSRF
    Django进阶之session
    simple_tag,filte,分页以及cookie和装饰器
    Django 中url补充以及模板继承
    Django补充及初识Ajax
    2016年12月20日感想
    Docker的镜像
    继续Django
    jS正则和WEB框架Django的入门
    Docker的容器
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8679092.html
Copyright © 2011-2022 走看看