zoukankan      html  css  js  c++  java
  • 拜占庭赌徒问题

    在人们的印象中,拜占庭帝国是以无休无止的宫廷阴谋和轨迹而闻名的,但它实在不该得此恶名。下面说一道“拜占庭赌徒”的问题。

    问题描述如下:

        你讲和一群顾问一起参与赌局。其中一个顾问会在一张纸上写上0或1,展示给其他顾问看,但是你不会知道这个数字到底是什么。他们都拥有精湛的演技,你无法从他们的话语和申请中推断出他在说实话还是撒谎。每一局,你可以选择不下注,也可以选择押上你的任意金额的资产。

       假如现在有4名顾问,其中两个人会一直说实话,但你不知道是那两位。一共玩三局,你的初始资金为100元,那你能确保赢多少钱呢?

    • 一共四个顾问,那第一局肯定只会出现2种情况:2 VS 2 或者 1 VS 3 / 0 VS 4.
      • 如果是至少3个人都说一样的数字,则我们可以放心的将100块钱都押上,这样第一局结束后或得到200元;
      • 如果是2VS2,则这一局我们选择不押钱,因此这句结束后,我们就可以知道是哪两位在说实话,因此后面的就根据他们说的押钱就可以了。
      • 因此,保底能赢 400元。

        假如现在只有3名顾问,而且只有一个人会说实话。仍然一共玩三局,初始资金为100元,那这种情况下能确保赢多少钱呢?

    • 第一局要么是3 VS 0,要么是2 VS 1.
      • 如果是3 VS 0那全押上就OK了,如果是2 VS 1,我们不知道是谁在说实话,因此可以选择押上x元:
        • 如果第一局输了,说明那个1才是说实话的人,这样我们下面2局按照他说的来押就可以了,因此可以获得4 * (100-x)元;
        • 如果第一局赢了,则获得了(100+x)元,因此那个1个人一定是说谎者,下面无需再考虑他。
          • 如果第二局那两个人说的不一样了,我们选择不下注,这样第二局结束后就会知道谁是说谎者,到第三局可以获得2*(100+x)元;
          • 如果第二局二人仍一样,则全部下注,第三局与第二局情况一样分析。
        • 这样为了保证最大收益,我们应该使:4*(100-x) = 2*(100+x),则x = 100/3,保底赢266.66元
  • 相关阅读:
    Linux架构
    Python标准库09 当前进程信息 (os包)
    Linux从程序到进程
    Python标准库04 文件管理 (部分os包,shutil包)
    Python标准库10 多进程初步 (multiprocessing包)
    Python标准库06 子进程 (subprocess包)
    绘图: matplotlib Basemap简介
    树莓派与Linux
    绘图: Python matplotlib简介
    Linux进程间通信
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5474864.html
Copyright © 2011-2022 走看看