繁体   English   中英

C中的Mastermind评分算法

[英]Mastermind Scoring Algorithm in C

我正在使用C进行客户端/服务器策划游戏,到目前为止我已经完成了。 我的程序正在运行,它平均6-7次猜测解决了这个秘密。 然后我看着互联网,发现Donals Knuths的方法:

  1. 创建一组剩余的可能性(此时有1296个)。 第一个猜测是aabb。
  2. 除去S中的所有可能性,如果它们是答案,则不会给出相同分数的彩色和白色钉。
  3. 对于每个可能的猜测(不一定在S中),计算对于每个可能的有色/白色分数,将消除S的多少可能性。 猜测的得分是这些值中的最小值。 以最高分(minimax)播放猜测。
  4. 回到第2步,直到你做对了。

我在这里要说的是我使用了5个位置和8种颜色。

当我试图优化我的程序时,我很难理解第3步,特别是计算什么猜测会消除最多的可能性,看起来如何。

我所知道的是我必须查看每个元素并将其与其他元素进行比较,但我不确定如何比较它,因为我没有任何白/黑值。 我想知道如何判断满足某些条件的条目将消除最大可能性。

我在我的博客上讨论算法并给出一个实现(在Scheme中,而不是C)。 棘手的部分是minimax函数中的这个谓词:

(or (< size min-size)
    (and (= size min-size)
         (member (car ps) pool)
         (not (member min-probe pool))))

你必须阅读整篇博文来弄清楚细节,但基本上这会实现Knuth的“受制于”要求:如果探针是新的最小值,或者如果它等于当前的最小值,则是pool,当前最小值不是池的成员,将其保持为新的最小值,否则循环到下一个探测器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM