猜數字

猜數字

古老的的密碼破譯類益智類小遊戲
猜數字(又稱 Bulls and Cows )是一種古老的的密碼破譯類益智類小遊戲,起源于20世紀中期,一般由兩個人或多人玩,也可以由一個人和電腦玩。[1]
  • 中文名:猜數字
  • 外文名: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 次。解法最少需要7次猜測,平均次數最少的解法由田中哲朗與1996年提出,平均次數為5.213次。系統的猜測策略可分為三類:簡單策略、啟發式策略和最優策略。下面以标準規則(10個數碼,4個數位,不含重複數字)為例,介紹這幾類策略。這些策略也适用于其它規則變體。

這種策略非常直接——每次都猜可能答案中的第一個。例如,首先猜測1234,如果得到的反饋是 2A0B,那麼可能的答案包括1256,1257,5236,等等。根據簡單策略,下一次就猜1256,因為1256是所有可能答案中最小的數字。

簡單策略的優點是速度非常快,缺點是所需猜測次數很多。對于标準規則,簡單策略最多需要9次猜測,而平均需要5.560次。

這類策略是猜數字遊戲最常用的解法。其算法步驟如下:

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

b. 從所有數字中,篩選出滿足已知反饋的所有可能數字,稱之為“可能集”。

c. 對于所有數字(而不僅限于篩選出來的可能集),逐一評估每個數字的“好壞”,并給其打分。選取得分最高的那個數字猜。如果有多個數字的評分一樣高,則優先選取可能集中的數字。

d. 重複步驟 b-c,直到猜出 4A0B 為止。

顯然,啟發式策略的重點在于如何評估一個數字的“好壞”?人們提出了多種直觀的評價指标。簡介如下:

最壞情況指标(Knuth, 1977):給定一個數字,考慮這個數字所帶來的不同反饋分區内元素的個數,并選擇最大反饋分區内元素個數最少的數字作為下一個猜測。對于标準規則,這一評價指标最多需要7次猜測,平均需要5.385次。

平均情況指标(Irving, 1978):這是一個相當直觀的指标,在各種規則變體下均有較好的效果。給定一個數字,如果猜這個數字,那麼接下來我的“可能集”平均會縮小到多大?選取使可能集的預期大小最小的那個猜測。對于标準規則,這一評價指标最多需要7次猜測,平均需要 5.268 次。

預期步數指标(Neuwirth, 1982):又稱“熵”指标。給定一個數字,這個指标計算如果猜測這個數字,那麼接下來估計還需要多少步才能猜到答案。當然,這個步數隻是一個粗略的估計,它假設每次猜測可以将可能集縮小一半(或縮小某一個常數倍k),于是估計步數就是可能集大小的對數函數,即估計步數=log(可能集中元素的個數)。對于标準規則,這一評價指标最多需要7次猜測,平均需要 5.265 次。

反饋個數指标(Kooi, 2005):給定一個數字,這個指标計算該數字所可能帶來的不同反饋的個數。反饋越多的越好。對于标準規則,這一評價指标最多需要8次猜測,平均需要 5.308 次。

此外,值得注意的是,啟發式策略的效果也經常取決于所有數字的排列。不過影響一般不大。

猜數字遊戲的最優策略需要由計算機用窮舉法獲得。其思路是,由于每次猜測的選擇是有限的(因為總共的數字組合個數有限),并且我們知道一定可以在有限次數内猜出所有答案,那麼計算機可以窮舉所有猜法,從中找出最佳的策略。

此外,也有一些文獻采用遺傳算法等求解猜數字問題,在此不詳述。

以下列出上述幾種解法應用于不用規則時的猜測效果,供參考。這些結果由計算機程序算出。

标準規則

對于标準規則(4 數位、10 數碼、不含重複數字),下表列出了各種策略的最多猜測次數、平均猜測次數、以及每個猜測次數所對應的答案個數。例如,采用“平均情況指标”最多需要7次猜測,平均需要 5.268 次猜測,有 1885 個數字需要用6次猜出。

算法

平均次數

1次

2次

3次

4次

5次

6次

7次

8次

9次

簡單策略

5.560

1

13

108

596

1668

1768

752

129

5

最壞情況指标

5.385

1

3

44

515

2124

2151

202

-

-

平均情況指标

5.268

1

4

59

574

2430

1885

87

-

-

預期步數指标

5.265

1

4

53

560

2515

1796

111

-

-

反饋個數指标

5.308

1

11

80

556

2277

1929

183

3

-

Mastermind規則

下表列出各種算法應用于Mastermind規則(4數位、6數碼、可重複)時的效果。

算法

平均次數

1次

2次

3次

4次

5次

6次

7次

8次

9次

簡單策略

5.765

1

4

25

108

305

602

196

49

6

最壞情況指标

4.476

1

6

62

533

694

-

-

-

-

平均情況指标

4.395

1

10

54

645

583

3

-

-

-

預期步數指标

4.424

1

4

70

611

590

20

-

-

-

反饋個數指标

4.373

1

12

72

635

569

7

-

-

-

相關詞條

相關搜索

其它詞條