猜数字

(古老的的密码破译类益智类小游戏)

语音

编辑

锁定

讨论

上传视频

猜数字(又称 Bulls and Cows )是一种古老的的密码破译类益智类小游戏,起源于20世纪中期,一般由两个人或多人玩,也可以由一个人和电脑玩。

中文名

猜数字

外文名

Bulls and Cows

游戏类型

益智起源时间

20世纪中期

起源国家

平    台

电脑、纸上、网上

猜数字游戏规则

编辑

语音

先解释标准规则,再介绍几种变体。

通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4个数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。

接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。

猜数字游戏通常设有猜测次数的上限。根据计算机测算,如果采用严谨的猜测策略,任何数字最多7次就可猜出(即达到 4A0B)。值得注意的是,在有些地方把次数上限定义为最多几次猜测以后就可以肯定数字是几,但这时或还需要再猜一次才能得到 4A0B 的结果。

标准的猜数字游戏由10个数码(0-9)和4个数位组成。可以通过变化数码或数位来丰富游戏。例如,可以使用9个数码玩4个数位的游戏。

猜数字游戏的一种变体允许重复的数码。这种规则的游戏被称为 Mastermind。其规则大致为:

除了上面的规则外,如果有出现重复的数字,则重复的数字每个也只能算一次,且以最优的结果为准。例如,如正确答案为5543,猜的人猜5255,则在这里不能认为猜测的第一个5对正确答案第二个,根据最优结果为准的原理和每个数字只能有一次的规则,两个比较后应该为1A1B,第一个5位子正确,记为1A;猜测数字中的第三个5或第四个5和答案的第二个5匹配,只能记为1B。当然,如果有猜5267中的第一个5不能与答案中的第二个5匹配,因此只能记作1A0B。

猜数字解法

编辑

语音

求解猜数字游戏的策略通常有两个目标:一是保证在猜测次数限制下赢得游戏,二是使用尽量少的猜测次数。第一个目标追求的是最坏情况下的猜测次数最少,第二个目标追求的是平均情况下猜测次数最少。对于某些数码和数位的规则组合,这两个目标不能同时实现。例如,对于4个数位、6个数码的 Mastermind 游戏,平均猜测次数最少的策略需要平均 4.340 次,但最坏需要6次猜测;如果限制猜测次数最多为5次,则平均猜测次数最少的策略需要平均 4.341 次。[1]

解法最少需要7次猜测,平均次数最少的解法由田中哲朗与1996年提出,平均次数为5.213次。[2]

系统的猜测策略可分为三类:简单策略、启发式策略和最优策略。下面以标准规则(10个数码,4个数位,不含重复数字)为例,介绍这几类策略。这些策略也适用于其它规则变体。

这种策略非常直接——每次都猜可能答案中的第一个。例如,首先猜测1234,如果得到的反馈是 2A0B,那么可能的答案包括1256,1257,5236,等等。根据简单策略,下一次就猜1256,因为1256是所有可能答案中最小的数字。

简单策略的优点是速度非常快,缺点是所需猜测次数很多。对于标准规则,简单策略最多需要9次猜测,而平均需要5.560次。

这类策略是猜数字游戏最常用的解法。其算法步骤如下:

a. 首先猜 1234,得到第一个反馈(xAyB)。

b. 从所有数字中,筛选出满足已知反馈的所有可能数字,称之为“可能集”。

c. 对于所有数字(而不仅限于筛选出来的可能集),逐一评估每个数字的“好坏”,并给其打分。选取得分最高的那个数字猜。如果有多个数字的评分一样高,则优先选取可能集中的数字。

d. 重复步骤 b-c,直到猜出 4A0B 为止。

显然,启发式策略的重点在于如何评估一个数字的“好坏”?人们提出了多种直观的评价指标。简介如下:

最坏情况指标(Knuth, 1977)[3]

:给定一个数字,考虑这个数字所带来的不同反馈分区内元素的个数,并选择最大反馈分区内元素个数最少的数字作为下一个猜测。对于标准规则,这一评价指标最多需要7次猜测,平均需要5.385次。

平均情况指标(Irving, 1978):这是一个相当直观的指标,在各种规则变体下均有较好的效果。给定一个数字,如果猜这个数字,那么接下来我的“可能集”平均会缩小到多大?选取使可能集的预期大小最小的那个猜测。对于标准规则,这一评价指标最多需要7次猜测,平均需要 5.268 次。

预期步数指标(Neuwirth, 1982):又称“熵”指标。给定一个数字,这个指标计算如果猜测这个数字,那么接下来估计还需要多少步才能猜到答案。当然,这个步数只是一个粗略的估计,它假设每次猜测可以将可能集缩小一半(或缩小某一个常数倍k),于是估计步数就是可能集大小的对数函数,即估计步数=log(可能集中元素的个数)。对于标准规则,这一评价指标最多需要7次猜测,平均需要 5.265 次。

反馈个数指标(Kooi, 2005)[4]

:给定一个数字,这个指标计算该数字所可能带来的不同反馈的个数。反馈越多的越好。对于标准规则,这一评价指标最多需要8次猜测,平均需要 5.308 次。

此外,值得注意的是,启发式策略的效果也经常取决于所有数字的排列。不过影响一般不大。

猜数字游戏的最优策略需要由计算机用穷举法获得。其思路是,由于每次猜测的选择是有限的(因为总共的数字组合个数有限),并且我们知道一定可以在有限次数内猜出所有答案,那么计算机可以穷举所有猜法,从中找出最佳的策略。

此外,也有一些文献采用遗传算法等求解猜数字问题,在此不详述。

以下列出上述几种解法应用于不用规则时的猜测效果,供参考。这些结果由计算机程序算出。

标准规则

对于标准规则(4 数位、10 数码、不含重复数字),下表列出了各种策略的最多猜测次数、平均猜测次数、以及每个猜测次数所对应的答案个数。例如,采用“平均情况指标”最多需要7次猜测,平均需要 5.268 次猜测,有 1885 个数字需要用6次猜出。

算法平均次数1次2次3次4次5次6次7次8次9次

简单策略5.560113108596166817687521295

最坏情况指标5.385134451521242151202--

平均情况指标5.26814595742430188587--

预期步数指标5.265145356025151796111--

反馈个数指标5.30811180556227719291833-

Mastermind规则

下表列出各种算法应用于Mastermind规则(4数位、6数码、可重复)时的效果。[4]

算法平均次数1次2次3次4次5次6次7次8次9次

简单策略5.7651425108305602196496

最坏情况指标4.4761662533694----

平均情况指标4.395110546455833---

预期步数指标4.424147061159020---

反馈个数指标4.373112726355697---

人与计算机猜数游戏,猜数字(古老的的密码破译类益智类小游戏)_百度百科...相关推荐

  1. 科学计算机法后保留四位小数,四舍五入(一种精确度的计数保留法)_百度百科...

    [sì shě wǔ rù] 四舍五入 (一种精确度的计数保留法) 语音 编辑 锁定 讨论 上传视频 四舍五入是一种精确度的计数保留法,与其他方法本质相同.但特殊之处在于,采用四舍五入,能使被保留部分 ...

  2. 10次机会 js 猜数_JS猜数字游戏实例讲解

    本文实例为大家分享了JS实现猜数字游戏的具体代码,供大家参考,具体内容如下 猜数字游戏: 1)利用JS的Math内置对象,实现在1-50内选取一个整数随机数作为游戏答案 2)输入数字进行判断,共有10 ...

  3. Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现

    Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 Car Racing 2D (2D赛车) 休闲小游戏快速实现 一 ...

  4. Python【小游戏合集】之重温童年最爱的扫雷小游戏

    导语: 哈喽吖!有许多铁汁们私信小编说用Python自行制作小游戏 ‍ ‍ 之后简直就是上头了~让wo多出一点小游戏合集(看来铁汁们跟小编一样都酷爱游戏) 有求必应~小游戏立刻安排上啦~~(扫雷真的是 ...

  5. Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现

    Unity 游戏实例开发集合 之 CompoundBigWatermelon (简单合成一个大西瓜) 休闲小游戏快速实现 目录 Unity 游戏实例开发集合 之 CompoundBigWatermel ...

  6. CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 零基础开发

    CocosCreator像素鸟小游戏实现(有源码)超详细教程 TS实现小游戏 大家中秋国庆快乐哈 前言 老规矩先看效果 源码的获取方式在最下面 对于本游戏来说canvas这样设置最佳哦 游戏实现思路: ...

  7. 一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码

    一款使用JavaScript实现的篮球投篮游戏源代码,在浏览器里就能玩的篮球小游戏代码 -根据光标的移动,沿某个方向击球 -球改变大小以使体验像3D一样 -音效让体验像真实生活! -球与轮辋碰撞并反弹 ...

  8. 经营管理、策略经营类社区网页小游戏推荐

    爱游戏网旗下的游戏种类最多,展示推荐的网页小游戏都是经过层层筛选 经营管理 | 策略经营 | 社区网页小游戏 梦幻岛 胡莱旅馆 幸福厨房 荣光医院 运镖天下 梦幻校园 欢乐客栈 夜店大亨 有间客栈 开 ...

  9. 基于C#开发一款益智类一笔画小游戏

    资源下载地址:https://download.csdn.net/download/sheziqiong/85947757 资源下载地址:https://download.csdn.net/downl ...

最新文章

  1. Oracle_052_lesson_p10
  2. Java原型设计模式(Prototype)
  3. 进程和线程计算机组成原理面试题,2016年云南财经大学信息学院计算机组成原理复试笔试最后押题五套卷...
  4. 怎么改字段名称_精装房这么改!换门框,封阳台,效果出来比毛坯房还好
  5. TCP/IP文档阅读笔记-TCP Receive Window
  6. nodejs11安装教程(升级最新版本)
  7. cad转shp 奥维_CAD转化为Shp
  8. 中国气象站点数据、降雨量气温蒸散发栅格数据集
  9. 安装最好用的计算机软件,装机软件哪个好?教您最好的装机软件推荐
  10. JAVA实现从Linux服务器上下载文件
  11. python优化网站_利用python做seo优化
  12. 从TiDB上线阿里云的背后,如何看待云数据库的变革趋势
  13. cannot find zipfile directory
  14. 南丁格尔玫瑰图-修改扇形块的颜色与玫瑰图添加图片与文字
  15. 领导力 之 《情境领导》
  16. 为什么会出现锟斤拷?
  17. Docker学习之六:基于Dockerfile构建镜像
  18. 网传美团今年应届生年薪 35w+,严重倒挂老员工,为什么互联网大厂校招的薪资一年比一年高?...
  19. 小说作者推荐:漫漫何其多合集
  20. 微信小游戏个人开发者如何盈利

热门文章

  1. 12 款最棒 Vue 开源 UI 库测评 - 特别针对国内使用场景推荐
  2. Fabric 1.0源代码分析(6)configtx(配置交易) #ChannelConfig(通道配置)
  3. 计算机毕业设计SpringBoot选题推荐—校园在线拍卖系统
  4. Spring-MVC 思维导图
  5. 电网管理信息系统安全运行需求分析
  6. 什么是区块链项目“白皮书”?
  7. CSS学习笔记之浮动布局
  8. 【瑞模网】fbx模型压缩成gltf格式
  9. 电影乱弹:我脑中的橡皮擦 - A Moment to Remember (2005.02.21)
  10. mtk7620(斐讯K2)openwrt 18.06.1 固件 硬改 华邦winbond的W25Q256FV 32M spi flash