选择具有约束的排列

时间:2013-02-01 05:10:55

标签: algorithm combinatorics

  

可能重复:
  How to solve the “Mastermind” guessing game?

我必须从k个选项中选择n个项目,我的选择需要按照正确的顺序排列(即排列,而不是组合)。在我做出选择之后,我会收到一个提示,告诉我有多少选项是正确的,有多少是正确的顺序。

例如,如果我尝试从k=4个项目中选择n=6,并且正确的有序集合为5, 3, 1, 2,则交换可能如下:< / p>

0,1,2,3
(3, 0) # 3 correct, 0 in the correct position

0,1,2,5
(3, 0)

0,1,5,3
(3, 0)

0,5,2,3
(3,0)

5,1,2,3
(4,1)

5,3,1,2
(4,4)

-> correct order, the game is over

问题是,我只是尝试了有限的尝试才能使订单正确,所以如果n=6, k=4,那么我只会尝试t=6次尝试n=10,k=5 t=5,如果n=35,k=6t=18

我在哪里开始编写解决此问题的算法?这几乎就像是一个约束求解问题。困难的部分似乎是我只知道一件事情,如果我一次只改变一件事,但是它的上限远远超过我得到的尝试次数。

2 个答案:

答案 0 :(得分:1)

正如我所看到的,这是主谋棋盘游戏的变种http://en.m.wikipedia.org/wiki/Mastermind_(board_game)

此外,您可以在本文中找到有关此问题的更多详细信息

http://arxiv.org/abs/cs.CC/0512049

答案 1 :(得分:1)

算法的一个简单策略是提出与之前所有提示一致的下一个猜测。这最终将导致正确的解决方案,但很可能不是尽可能少的猜测。