• Simulate a seven-sided die using only five-sided


    问题描述:

    如题

    转述一下问题,就是说你现在有一个正五面体骰子,然后你怎么用这个正五面体骰子去模拟一个正七面体骰子。

    这个问题我接触到几种方法,下面一一阐述。

    方法一:

    rand7()=( rand5()+rand5()+rand5()+rand5()+rand5()+rand5()+rand5() ) % 7 + 1

    这个方法可以这么来理解五面体筛子实验七次,点数和在7到35之间,点数和的分布是均匀的。所以模7加一就可以近似模拟七面体筛子了。

    评价:该方法简单易理解,然而只是“近似”七面体筛子,因为数字1-7并不是均匀出现的。

    方法二:

    function rand7() {
    throw the dice twice and perform the following checks
    1,1 return 1
    1,2 return 2
    1,3 return 3
    1,4 return 4
    1,5 return 5
    2,1 return 6
    2,2 return 7
    2,3 return 1
    2,4 return 2
    2,5 return 3
    3,1 return 4
    ...
    ...
    ...
    5,1 return 7 [at this point we have returned numbers from 1 to 7, 3 times each]
    5,2 rand7()
    5,3 rand7()
    5,4 rand7()
    5,5 rand7()
    }

    显然,该方法看起来可以做到完全模拟正七面体,其实不然,稍微分析一下你会发现你陷入了无穷循环。从逻辑上来说,这个方法为了得到原先不存在的rand7()而递归调用不存在的东西(也就是rand7()),那么显然这种方法是不可以的。

    方法三

    不可能,我们不可能用五面体筛子去完全模拟七面体筛子。

    下面给出证明。

    首先我们注意到5跟7是互质的,那么无论什么方法用五面体筛子去模拟七面体筛子,总要实验五面体筛子好多次,我们假设n次,那么得到实验结果有多少种情况呢?

  • 相关阅读:
    <Android HAL 之路> HAL 简介
    <Android 应用 之路> 简易贪吃蛇
    略论研发评审的必要性
    微信支付开发(7) 收货地址共享接口V2
    连接点和线路点的区别
    IP地址分类及子网掩码详解
    基于UDP协议的多路广播地址
    频分双工
    航空连接器、端子
    表面粗糙度及加工符号
  • 原文地址:https://www.cnblogs.com/xubenben/p/3388432.html
Copyright © 2020-2023  润新知