18.2 shuffle问题 和 从n个元素中同概率选择m个。

shuffle:递归的思考,假如n-1个元素已经shuffle好了,第n个元素应该从0~n的范围内选择交换目的地。一直递归到一个元素的shuffle情况。

n选m:假如n-1个元素中选m的情况已经好了,那么对于第n个元素,可以在0~n的范围内随机的选取一个元素,如果选的元素在m范围内,那就剔除掉原有的。一直递归    到m选m的情况。

public void shuffle(int[] cards){
    Random rand = new Random();
    for(int i=0;i<cards.length;i++){
        int k =rand.nextInt(i+1);
        int tmp =cards[k];
        cards[k]=cards[i];
        cards[i]=tmp;
    }

}

public pick(int[] origin, int m){
    int n =origin.length;
    Random rand = new Random();
    int[] res = new int[m];

    for(int i=0;i<m;i++){
        res[i]=origin[i];
    }

    for(int i=m;i<n;i++){
        int k=rand.nextInt(i+1);
        if(k<m){
            res[k]=origin[i];
        }
    }

}
时间: 2024-12-30 04:28:07

18.2 shuffle问题 和 从n个元素中同概率选择m个。的相关文章

18.把1~100存到一维数组a[100]中,并输出。要求每行输出10个,数据所占宽度相同。

#include<iostream>using namespace std; int main(){    int a[101];    for(int i=1;i<=100;i++)    {        a[i]=i;    }    for(int j=1;j<=100;j++)    {        cout<<a[j]<<" ";        if(j%10==0)//简单的换行都会想那么久        {       

[CareerCup] 18.2 Shuffle Cards 洗牌

18.2 Write a method to shuffle a deck of cards. It must be a perfect shuffle—in other words, each of the 52! permutations of the deck has to be equally likely. Assume that you are given a random number generator which is perfect. 这道题让我们实现一个洗牌的算法,实际上洗

【python cookbook】【数据结构与算法】18.将名称映射到序列的元素中

问题:希望通过名称来访问元素,减少结构中对位置的依赖性 解决方案:使用命名元组collections.namedtuple().它是一个工厂方法,返回的是python中标准元组类型的子类,提供给它一个类型名称以及相应的字段名称,它就返回一个可实例化的类,为你以定义好的字段名称传入值等. 命名元组的主要作用在于将代码同它所控制的元素位置间进行解耦 >>> from collections import namedtuple >>> Sub=namedtuple('Subs

2014/4/18 ① button与submit的区别 ②现象 : 数据库中其他值可以取到 有的却取不到 解决 看获取时“#”有无

①<input type="button" /> 这就是一个按钮.如果你不写javascript 的话,按下去什么也不会 发生. <input type="submit" /> 这样的按钮用户点击之后会自动提交 form,除非你写了javascript 阻 止它. <button> 这个按钮放在 form 中也会点击自动提交,比前两个的优点是按钮的内容不光可以有文 字,还可以有图片等多媒体内容.(当然,前两个用图片背景也可以做到)

这 30 类 CSS 选择器,你必须理解!

CSS 选择器是一种模式,用于选择需要添加样式的元素.平时使用最多也是最简单的就是 #id..class 和标签选择器,在 CSS 中还有很多更加强大更加灵活的选择方式,尤其是在 CSS3 中,增加了很多新的选择器,使得选择元素更加便捷,所以必须理解这些选择器,只有先理解了,多用几次,自然而然就记住了. 1.* [CSS2] 通配符,选择页面所有元素. 1 *{ 2 margin:0; 3 padding:0; 4 } 上面代码的作用是把页面上所有元素的内外边距设置为 0,这是最基本的清除默认 

Spring:源码解读Spring IOC原理

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

OpenStack_Swift源代码分析——Ring基本原理及一致性Hash算法

1.Ring的基本概念 Ring是swfit中最重要的组件.用于记录存储对象与物理位置之间的映射关系,当用户须要对Account.Container.Object操作时,就须要查询相应的Ring文件(Account.Container.Object都有自己相应的Ring),Ring 使用Region(近期几个版本号中新增加的).Zone.Device.Partition和Replica来维护这些信息,对于每个对象,依据你在部署swift设置的Replica数量,集群中会存有Replica个对象.

Spring?IOC设计原理解析:本文乃学习整理参考而来

Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileSystemXmlApplicationContext 的IOC容器流程 1.高富帅IOC解剖 2. 设置资源加载器和资源定位 3.AbstractApplicationContext的refresh函数载入

Spring:源码解读Spring IOC原理--(转载)

转自:http://www.cnblogs.com/ITtangtang/p/3978349.html 这篇文章个人觉得整理的很不错,很值得学习,为了方便自己学习和大家学习,特转载此文保留.请尊重原创~~ Spring IOC设计原理解析:本文乃学习整理参考而来 一. 什么是Ioc/DI? 二. Spring IOC体系结构 (1) BeanFactory (2) BeanDefinition 三. IoC容器的初始化 1. XmlBeanFactory(屌丝IOC)的整个流程 2. FileS