CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  专题开发/技术/项目 >  数据结构与算法

求猜数字问题的数学证明!!!!

楼主gzpbx(郭半仙)2002-04-14 16:26:10 在 专题开发/技术/项目 / 数据结构与算法 提问

猜数字问题这里讨论过很多次,我也用筛法变了个程序,一般计算机5,6次就可以猜出来(不重复的四位数).  
          所以我现在更感兴趣他的数学证明,我试着证了一下,发现咋看挺简单的问题实际上,证明起来挺困难,据说可以证明四部之内一定可以猜出来,谁有数学证明!??  
          谢了先! 问题点数:100、回复次数:23Top

1 楼jlandzpa(jlandzpa)回复于 2002-04-14 19:59:22 得分 0

猜数字问题是什么问题?Top

2 楼Kusk(Kusk)回复于 2002-04-14 21:26:01 得分 0

构造最坏的情况,证明它为四步。Top

3 楼gzpbx(郭半仙)回复于 2002-04-14 22:02:59 得分 0

猜数字问题都不知道?即类似文曲星上的游戏(不过,我现在讨论的问题是人机角色对换的)    
      4个数字.你猜一次之后,它会给出提示:xAyB.A表示位置和值都对,x表示这样的数字的个数;B表示你猜的数字答案中有但是位置不对,y表示这样的数字的个数.  
      例如,假设答案是1234,当我猜1243时,提示为:2A2B;猜1678,提示为:1A0B;猜4321,提示为:0A4B;猜5678,提示为:0A0B.  
   
  Top

4 楼zhoudi2000(不怕输)回复于 2002-04-14 23:59:26 得分 0

四步是解不出来的,我们先假设这个数是4321,如果我们第一次猜7890,得的结果会是0A0B,这时只有123456可能选择,下一步如果猜3456,得的结果是0A2B,我们可知,12是其中的两个数,剩下的就要从3456中选择了,如果我们继续猜5612,不幸又得了一个结果是0A2B,到这步,我们只猜出了这四个数是多少,可是位置一个也没中,这四个数的排法共有4*3*2*1=24种,我们只能排除3412一种。这就是最坏的情况。Top

5 楼gzpbx(郭半仙)回复于 2002-04-15 09:34:31 得分 0

各位大哥这个问题不是那么简单的,我现在已经可以编程证明至多八次之内一定可以猜出来,但我现在无法在进一步减小次数,谁能?Top

6 楼down2(down2)回复于 2002-04-17 18:44:53 得分 10

我也认为   4   步之内不可能,有   7   步之内出结果的程序:  
  http://llf.my.west163.com/studio/ComGuess3.rar  
   
  不过据说   6   步可以完成,不知道谁有这样的程序?Top

7 楼Elminster()回复于 2002-04-17 19:56:57 得分 10

这个问题能否从信息量和熵的角度来考虑?首先考虑完全随机的四个数的排列带有多少信息,然后每次猜测最少能够得到多少信息?Top

8 楼starfish(海星)回复于 2002-04-19 14:27:39 得分 0

4步是不可能的,除非运气特别好  
  从信息论的角度看  
  最多只需要6步,就可以猜出来Top

9 楼down2(down2)回复于 2002-04-19 23:31:26 得分 10

请问“从信息论的角度看最多只需要6步”是怎么推出来的呢?  
  有没有这样的程序?我找到的这一类问题的程序都是只能在   8   步之内猜出的。  
  或者,这个问题本身就是“信息论”的一个例题?   :)Top

10 楼down2(down2)回复于 2002-04-20 23:39:34 得分 10

请教“Elminster()”和“starfish(海星)”两位大侠,关于猜数字信息量的问题。  
   
  因为开始,这一个数是   5040   中任何一个数的可能性都是   1/5040,所以熵应该是   12.2992080183867;  
  而第一次猜测之后,尚未评分之前,有   14   种可能性:  
     4A0B:1  
     2A2B:6  
     1A3B:8  
     0A4B:9  
     3A0B:24  
     2A1B:72  
     0A0B:360  
     2A0B:180  
     1A2B:216  
     0A3B:264  
     1A0B:480  
     1A1B:720  
     0A2B:1260  
     0A1B:1440  
  所以第一步猜测所携带的熵为   2.77115216575502;  
  如果评分是   0A1B   的话,则有   1440   种可能性,现在的熵应该是   10.4918530963298;  
  不过   12.2992080183867   -   2.77115216575502   =   9.52805585263168   ,  
  这其中相差的   10.4918530963298   -   9.52805585263168   =   0.96379724369812   该怎么解释呢?  
   
  如果是因为它们不属于完全独立的两个实验的话,则用   12.2992080183867   /   2.77115216575502   =   4.4    
  而求出的总共需要   6   步就可以猜出来的结论不也就失效了吗?  
  Top

11 楼steedhorse(晨星)回复于 2002-06-03 23:15:15 得分 0

高手就是高手,一点办法都没有,:(Top

12 楼leopro(漫漫人生路,与你同行)回复于 2002-06-04 00:40:53 得分 0

我用大脑猜,七步之内,百发百中:)  
  但要形成算法,还真不容易Top

13 楼makefriend7(小顽童)回复于 2002-06-04 17:22:14 得分 0

我也是,感觉7步要技巧,8步就容易多了。Top

14 楼Xcoder(流浪狗)回复于 2002-06-05 14:44:58 得分 0

这其实是一个很难的问题,先正规表述一下,应该是:存在一个算法,使得对任意可能的数字组合,能再n步内猜出来,求n的最小值。  
  Top

15 楼Xcoder(流浪狗)回复于 2002-06-05 14:56:24 得分 10

接上文,  
      现在是要求N的最小值,不是证明。想到信息论是很自然的,但这里确有一个很重要的问题:每一部猜测所能得到的信息是和所采用的算法相关的!  
      举个极端的例子,某步猜0123得到2A2B,得到很多信息吗?如果我告诉你,之前已有一步猜0123,则这步实际得到的信息为0。  
      所以要解决这个问题,首先应该找到一个猜测的算法,然后证明这个算法是在步数上最优的算法,在找出这个步数。  
   
   
  Top

16 楼down2(down2)回复于 2002-06-09 13:33:35 得分 20

Xcoder   兄说的有道理。不过如何证明一个算法是“在步数上最优的算法”,恐怕也是很困难的。反过来说,如果可以证明某个算法是“在步数上最优的算法”,大概也可以根据这种证明的方法来构造出一种在步数上最优的算法吧。  
   
  使用信息论的算法我试过了,结果如下:  
  共进行了   5040   次猜测  
  1   次就猜中的有   1   次  
  2   次就猜中的有   4   次  
  3   次就猜中的有   44   次  
  4   次就猜中的有   459   次  
  5   次就猜中的有   2375   次  
  6   次就猜中的有   2048   次  
  7   次就猜中的有   108   次  
  8   次就猜中的有   1   次  
  9   次就猜中的有   0   次  
  10   次就猜中的有   0   次  
   
  而另外那种“真正完全统计”的算法,结果如下:  
  共进行了   5040   次猜测  
  1   次就猜中的有   1   次  
  2   次就猜中的有   2   次  
  3   次就猜中的有   30   次  
  4   次就猜中的有   377   次  
  5   次就猜中的有   2124   次  
  6   次就猜中的有   2315   次  
  7   次就猜中的有   191   次  
  8   次就猜中的有   0   次  
  9   次就猜中的有   0   次  
  10   次就猜中的有   0   次  
   
  我想也许是因为携带信息量的大小并不是决定最小步数的关键吧,因为虽然使用熵的算法并没有做到最大猜测次数最小,但是的确做到了总猜测次数最少。Top

17 楼down2(down2)回复于 2002-06-09 13:42:52 得分 10

我想,也许使用一种野蛮的办法可以做到吧:每一步都进行一次全面的深搜,找到使所有可能情况的最大猜测次数最小的那个猜法……  
  不过这种算法真的会非常慢,可能都是无法想象的。Top

18 楼school(求学)回复于 2002-06-10 20:19:25 得分 10

我目前最快用5步猜出。Top

19 楼school(求学)回复于 2002-06-10 20:22:29 得分 10

第3步可得大量信息,将数字组合的可能性缩小为4种。Top

20 楼down2(down2)回复于 2002-06-13 19:13:21 得分 0

school   兄有程序么?我很想看一看。是否有源代码都可以。Top

21 楼gzpbx(郭半仙)回复于 2002-07-11 22:04:51 得分 0

rtTop

22 楼quicmous(快鼠)回复于 2002-07-12 11:40:53 得分 0

呵呵,争来争去的,有人对源代码赶兴趣吗?Top

23 楼down2(down2)回复于 2002-09-03 15:28:52 得分 0

 
  关于“猜数字”算法“5   步不能”的证明(不完美篇)……  
   
  熵电脑猜数字  
  共进行了   5040   次猜测  
  1   次就猜中的有   1   次  
  2   次就猜中的有   4   次  
  3   次就猜中的有   44   次  
  4   次就猜中的有   459   次  
  5   次就猜中的有   2375   次  
  6   次就猜中的有   2048   次  
  7   次就猜中的有   108   次  
  8   次就猜中的有   1   次  
  9   次就猜中的有   0   次  
  10   次就猜中的有   0   次  
   
  1、基于“熵电脑猜数字”的每一步都是选取的可取的信息量最大的方式进行的猜测,所以这种方式必定是使总猜测次数最少的方法。其总次数为   1   +   2*4   +   3*44   +   4*459   +   5*2375   +   6*2048   +   7*108   +   8   =   26904   ,也就是说任何一种算法都不可能得到最猜测次数少于此数的结果。(这一步证明似乎缺少一些中间环节,所以称之为“不完美”)  
   
  2、假设有一种算法   5   步之内可以得到结果,则其总猜测次数最少为   5040   次,最多为   5040*5   =   25200   次,因为即使其最多总猜测次数也未达到   26904   ,而   26904   是总猜测次数的最小值,所以这种假设的算法不可能存在,也就是说任何算法都无法在   5   步之内得到结果。  
   
  Top

相关问题

  • 数学归纳法的证明
  • SOS,MM的数字考题,高等数学高手进。
  • 猜数字谜
  • 猜数字
  • 如何在word2000中把数学上的根号和里面的数字输入?
  • x=2^(2m)-1能否一定被3整除?能否用数学证明?
  • “猜数字”游戏
  • 如何把两个TextBox内输入的数字经过数学运算的结果赋給另一个TextBox
  • 谁有java的库函数集?(比如说数学函数,字符操作函数等,谢谢,在线等.....)
  • 关于“欺诈行为在世界范围内是正态分布的”的数学证明!

关键词

  • 算法
  • 数字
  • 数学
  • 信息
  • 猜中
  • 猜测
  • 证明
  • 信息论
  • 个数
  • 次数

得分解答快速导航

  • 帖主:gzpbx
  • down2
  • Elminster
  • down2
  • down2
  • Xcoder
  • down2
  • down2
  • school
  • school

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo