zoukankan      html  css  js  c++  java
  • 两道概率题供大家周末把玩

    题目

    1.给定一个函数rand5(),该函数能等概率生成1-5之间的整数(包括1和5),如何用该函数等概率生成整数1-7?

    解法

    本以为很简单,做了以后才发现其实并不简单,这个题难就难在要求是等概率,贴出几个解法,供大家参考

    下面代码来自StackOverflow

    解法一

    代码
    int i;
    do
    {
    i
    = 5 * (rand5() - 1) + rand5(); // i is now uniformly random between 1 and 25
    } while(i > 21);
    // i is now uniformly random between 1 and 21
    return i % 7 + 1; // result is now uniformly random between 1 and 7

    解法二(更直观一些)

    代码
    int rand7()
    {
    int vals[5][5] = {
    {
    1, 2, 3, 4, 5 },
    {
    6, 7, 1, 2, 3 },
    {
    4, 5, 6, 7, 1 },
    {
    2, 3, 4, 5, 6 },
    {
    7, 0, 0, 0, 0 }
    };

    int result = 0;
    while (result == 0)
    {
    int i = rand5();
    int j = rand5();
    result
    = vals[i-1][j-1];
    }
    return result;
    }

    2. 一个随机数生成函数f(),只产生数字1和0,生成1的概率是p,生成0的概率是1-p,如何利用该函数等概率生成1和0?(此题来自算法导论一书)

    由于p(1-p)和(1-p)p是两个等概率事件,根据这个原理,可得如下代码

    int func()
    {
    int i ;
    int j ;
    while(true)
    {
    i
    = f() ;
    j
    = f() ;

    if(i == 1 && j == 0)
    return 1;
    else if(i == 0 && j == 1)
    return 0;
    }
    }
  • 相关阅读:
    时间戳 时间 相互转换
    CS Academy Remove Update
    一周水题集锦 2017 9.4
    计蒜客 16877 卡牌游戏
    计蒜客 16876 韩梅梅的抽象画
    九度OJ 题目1534:数组中第K小的数字
    CS Academy Switch the Lights
    CF AIM Tech Round 4 C. Sorting by Subsequences
    CF Round 430 C. Ilya And The Tree
    CS Academy Round 44 Check DFS
  • 原文地址:https://www.cnblogs.com/graphics/p/1774942.html
Copyright © 2011-2022 走看看