`
yiminghe
  • 浏览: 1460459 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

序列随机采样问题

J# 
阅读更多

Programming pearls chapter 12 sampling problem

 

 从 1到n个数中随机选出m个不同的数

 

 

 

import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
import java.util.Iterator;

/**

 * User: yiminghe
 * Date: 2009-2-21
 * Time: 0:27:31

 */
public class Sample {

    /**
     * 从概率学的角度 随机顺序打印 m个 1-n 个不同的数
     * i 选中概率越小 ,则 i+1 选中概率越大  ,当 m = n 是 ,上限无效
     * from : the art of computer programming ,volum2:seminumerical algorithm
     *
     * @param n
     * @param m
     */
    public static void sample1(int n, int m) {
        Random r = new Random();
        int total = n;
        for (int i = 1; m > 0 && i <= n; i++) {
            if ((r.nextInt(total) + 1) <= m) {
                System.out.print(i + "\t");
                m--;

            }
            total--;
        }
        System.out.println();

    }


    /**
     * 从概率学的角度 随机顺序打印 m个 1-n 个不同的数
     * i 选中概率越小 ,则 i+1 选中概率越大  ,当 m = n 是 ,上限无效
     * from : the art of computer programming ,volum2:seminumerical algorithm
     * 递归版本
     *
     * @param n
     * @param m
     */
    public static void sample5(int n, int m) {
        if(m<=0) return;
        Random r = new Random();
        if (r.nextInt(n) + 1 <= m) {
            System.out.print(n + "\t");
            sample5(n - 1, m - 1);
        } else {
            sample5(n - 1, m);
        }

    }


    /**
     * 随机顺序打印 m个 1-n 个不同的数
     * 集合选取元素法
     * 将选中的元素保存,随时查看
     * <p/>
     * 缺点:循环数可能很多,如果m 仅仅 n ,随机数可能会非常重复
     *
     * @param n
     * @param m
     */
    public static void sample2(int n, int m) {
        Random r = new Random();
        Set<Integer> set = new TreeSet<Integer>();
        while (m > 0) {
            int g = r.nextInt(n) + 1;
            if (!set.contains(g)) {
                m--;
                set.add(g);
            }
        }


        Iterator<Integer> iter = set.iterator();
        while (iter.hasNext()) {
            System.out.print(iter.next() + "\t");
        }
        System.out.println();

    }


    /**
     * 随机顺序打印 m个 1-n 个不同的数
     * 集合选取元素法   ,修正 sample2 ,最多 取 m 次 随机数,
     * Robert Floyd
     * 将选中的元素保存,随时查看
     *
     * @param n
     * @param m
     */
    public static void sample4(int n, int m) {
        Random r = new Random();
        Set<Integer> set = new TreeSet<Integer>();
        for (int i = n - m + 1; i <= n; i++) {
            int g = r.nextInt(i) + 1;
            if (set.contains(g))
                set.add(i);
            else
                set.add(g);
        }

        Iterator<Integer> iter = set.iterator();
        while (iter.hasNext()) {
            System.out.print(iter.next() + "\t");
        }
        System.out.println();
    }

    private static void swap(int[] ta, int i, int j) {
        int t = ta[i];
        ta[i] = ta[j];
        ta[j] = t;

    }

    /**
     * 随机顺序打印 m个 1-n 个不同的数
     * 数组顺序打乱,将前m个数和后面的数随机交换顺序
     * 将选中的元素保存,随时查看
     *
     * @param n
     * @param m
     */
    public static void sample3(int n, int m) {
        Random r = new Random();
        int t[] = new int[n];
        for (int i = 0; i < n; i++)
            t[i] = i + 1;
        for (int i = 0; i < m; i++) {
            int g = i + 1 + r.nextInt(n - i - 1);
            swap(t, i, g);
            System.out.print(t[i] + "\t");
        }
        System.out.println();

    }

    public static void main(String[] args) {
        //1到10 中随机选出三个不同的数
        sample1(10, 3);
        sample2(10, 3);
        sample3(10, 3);
        sample4(10, 3);
        sample5(10,3);
    }


}
分享到:
评论

相关推荐

    ChatGPT的随机采样算法与重要性采样算法的比较.docx

    为了解决随机采样带来的问题,ChatGPT采用了重要性采样算法。该算法不是简单地平均对待所有候选单词,而是根据每个单词的概率权重进行采样。概率权重较高的单词更有可能被选中,这样可以确保生成的文本更加流畅、...

    基于FPGA的随机采样模数变换模块设计.pdf

    此时,随机采样技术通过测量每次AD采样序列起点与基准点(信号触发时刻)的相位差,可以确定该次采样序列在原始信号波形中的位置。只要相位差是随机分布的,通过在很短时间内遍历所有可能的波形采样过程,就能够重构...

    序列密码采样攻击的改进方法.pdf

    Eric Filiol提出的采样攻击方法,是在已知序列的基础上,通过选取特定的采样距离(Decimation Distance),对LFSR序列进行采样,生成一个较短周期的LFSR序列,从而简化了攻击过程。但原有的方法在处理高阶LFSR时仍...

    温度随机采样(移位寄存器)_labview_

    在"温度随机采样(移位寄存器)_labview_"这个项目中,我们聚焦于两个关键概念:温度的随机采样和移位寄存器的运用,以及波形图表的展示。 首先,温度的随机采样是模拟或数字系统中常见的任务,特别是在环境监控、...

    流式数据中的随机采样算法.pptx

    根据提供的文件信息,我们可以深入探讨流式数据中的随机采样算法这一主题,涵盖其基本原理、具体算法的应用以及相关的挑战和发展方向。 ### 流式数据随机采样的基本原理 #### 目标与优势 流式数据随机采样的核心...

    扩频通信实验报告(m序列、Kasami序列小集,Gold序列)

    采样法通常涉及到对一个已知的种子序列进行周期性的采样,而长除法则是通过执行一系列移位和逻辑操作来计算出序列。这两种方法都揭示了m序列的线性和周期性特性。 接下来,我们关注的是Kasami序列。Kasami序列是另...

    8个维度100次采样的Hammersley序列程序

    此外,Hammersley序列也常用于模型的超参数搜索,比如在网格搜索或随机搜索中,它可以提高搜索的效率和结果的可靠性。 MATLAB作为强大的科学计算环境,提供了实现Hammersley序列的工具和函数。使用MATLAB编写这样的...

    霍尔顿(Halton)序列.rar

    拟随机序列并不是真正的随机数,而是一类精心设计的有序序列,它们在统计性质上模仿了随机数的行为。Halton序列就是这类序列中的一个典范,由荷兰数学家Jan Halton在1960年提出,因其在多维积分和遍历问题中的优异...

    2. 霍尔顿(Halton)序列_霍尔顿(Halton)序列_

    霍尔顿序列的设计目的是在多维空间中产生看似随机的点分布,但同时保持较低的偏差,使得它们在统计计算中更加有效。 在MATLAB中生成霍尔顿序列通常涉及以下步骤: 1. **选择基底**:霍尔顿序列基于不同的素数,每...

    低频扩展电路伪随机序列产生电路

    在实际应用中,它们具有随机性高、周期长、容易计算等特性,因此在无线通信中的扩频技术、数据加密以及模拟信号的数字采样等方面有着广泛的应用。 低频扩展电路的主要任务是生成这种伪随机序列。通常,这种电路由一...

    一种伪随机序列的线性复杂度及其稳定性研究

    信息安全领域中,传统使用m序列为基序列,对序列进行非线性组合、非线性滤波和非均匀采样等产生线性复杂度很高的序列,其线性复杂度的稳定性却不如意。提出伪随机序列称为m子序列,m子序列通过改变m序列的状态转换次序而...

    序列检测器.rar_序列检测器

    5. **检测理论**:序列检测问题常被看作是一个假设检验问题,其中我们需要决定是否存在特定的序列。比如,我们可以设定零假设(没有目标序列)和备择假设(存在目标序列),然后使用诸如Neyman-Pearson准则或贝叶斯...

    大数据小时代

    为了实现这一目标,花小姐决定采用时间序列分析的方法来预测未来的产品销售情况。具体步骤如下: 1. **数据整理**:将原始数据按照周为单位进行汇总,形成周销售数据表。 2. **模型构建**:根据周销售数据表,在...

    Faure序列.rar

    - **图像处理**:在图像去噪、编码和压缩中,Faure序列可以用于采样和排列像素,提高处理效果。 - **并行计算**:由于其优秀的统计特性, Faure序列也适用于分布式和并行计算环境,减少数据间的依赖和同步问题。 ...

    一种基于MC法的随机序列生成及检验.pdf

    随机序列广泛应用于各种领域,如医学研究、组织学、病理学随机视野的采样、基因序列分析和数据挖掘、流行病调查和医学统计等领域。 知识点9: 仿真系统中的随机序列生成 可以使用MC法生成的随机序列来满足仿真系统中...

    matlab时间序列工具箱

    - **对齐和插值**:`alignTimes`用于调整不同时间序列的采样时间,`interp1q`则进行线性插值,确保不同序列在同一时间点有可比性。 - **去趋势和季节性调整**:`detrend`移除线性趋势,`decompose`可以分解时间...

    基于随机解调的压缩采样系统的随机序列生成方法

    在基于随机解调的采样系统中的主要挑战是随机序列的产生。 在本文中,我们介绍了一种生成高速随机序列的方法,该序列可以满足压缩采样的不连贯性。 所提出的技术采用了现场可编程门阵列(FPGA)。 首先,将随机序列...

    WG序列和Hyperoval序列的互相关性研究 (2012年)

    针对伪随机序列中的伪随机特性问题,利用从F2n到F2的迹函数在一点处的Walsh谱表示法,对n为奇数时的WG序列和 Hyperoval序列及其采样序列间的互相关函数进行研究。分析结果表明,WG序列Hyperoval序列间的互相关函数及...

Global site tag (gtag.js) - Google Analytics