倒计时数字回合问题的名称-算法解决方案?


10

对于非英国观众,在白天的游戏节目中有一部分,参赛者有一组6个数字和一个随机生成的目标数字。他们必须仅使用算术运算符使用6个数字中的任何一个(但不一定是全部)达到目标数字。所有计算必须得出正整数。

例如:Youtube:倒计时-有史以来最非凡的数字游戏?

有关详细说明,请参见Wikipedia:Countdown(游戏节目)

例如:

  • 竞争者选择6个数字-两个大数字(可能包括25、50、75、100)和四个小数字(数字1 ..10,每个数字在池中包含两次)。
  • 挑号码75502387则列出的目标数量812
  • 一次尝试是(75 + 50-8)* 7-(3 * 2)= 813(这在目标5内的解决方案中得到7分)
  • 准确的答案是(50 + 8)* 7 * 2 = 812(这将获得与目标完全匹配的10分)。

显然,这个问题在电视问世之前就已经存在,但是Wikipedia文章并没有给它起一个名字。我还曾在我上过的一所小学里看过这款游戏,当时该游戏被称为“加密”游戏,属于班际竞赛-但是现在搜索它并没有发现任何问题。

我参加了几次,我的父亲写了一个Excel电子表格企图蛮力的问题,我不记得它是如何工作(只是它没有工作,有什么用Excel的65535行限制),但当然,必须有一个针对该问题的算法解决方案。也许有一种解决方案可以像人类认知一样工作(例如,并行查找“足够接近”的数字,然后选择候选人并执行“较小”的操作)。


1
我以图形方式解决了这一问题-使用节点表示计算结果,使用边表示可以对这些数字执行的操作,然后使用图形搜索算法找到所需的路径
ell

1
通过阅读规则,似乎不可能达到完美的解决方案-例如,如果选择的数字是(1、1、2、2、3、3),而目标数字是999。那么实际上任何算法的目标都是寻找最接近的可能解决方案。
Rich Smith

1
@ell:您的图形搜索解决方案基本上是蛮力搜索吗?
马丁

我只是在实现中使用了深度优先搜索,但是我不明白为什么不能使用类似Dijkstra的方法。
2013年

1
我们在美国的一些类似的节目:我们坚持约6分识字白痴的房子了几个星期,并拍摄他们谈论彼此大喊大叫,在对方。这与我们的电视在流行节目中接近这种知识分子的程度差不多。
RBarryYoung

Answers:


4

免责声明:此答案不能完全回答问题。但是评论太久了。

NP难吗?我相信,这个问题可能很难解决

考虑背包问题的一种特殊情况:

给定一组正整数和一个正整数b,是否存在该组的一个子集,使得该子集中所有整数的总和等于b

这听起来与我们的Countdown问题有点相似,而且看起来要简单得多。但是,背包(以及背包的这种特殊情况)是NP困难的(当然是NP完整的)。

我没有用它来证明倒计时是NP难的。我无法摆脱分裂。假设我们有一千个2,并且b =7。这在背包中永远无法解决,但在倒数中始终(?),至少在我尝试解决问题的所有方式中都是如此。

现在,如果Countdown确实 NP困难的,我们可以推断出,没有一种算法比蛮力尝试所有可能性的算法效率高得多了。(如果我们找到这样的算法,我们将变得非常有名。)

不,我不认为必须有一个有效的算法。

启发式。问题中链接的Youtube视频有一个很好的例子:参赛者找到了确切的答案952 =((100 + 6)* 3 * 75-50)/25。这完全违背了我的直觉,我永远不会尝试过第一次的方式:产生一个非常大的数字,然后将其除以得到结果。

另一方面,我们人类感到我们不需要尝试(任意示例)50 * 75 * 100/2/3/7来达到三位数。但是,他们只是简单地计算一下,计算机什么都不会感觉到

毕竟,如果我们实施了一些启发式方法,但是这种启发式方法没有找到确切的解决方案,那么我们仍然必须尝试所有其他解决方案以确保确实没有解决方案。

我认为,Youtube视频中的参赛者所做的是非常迅速地检查大量可能性,并迅速丢弃那些不会(或可能不会)给出解决方案的可能性。

结论。在实现一种算法时,可以注意剥离等式,例如a / b / c = a /(b * c),但是我认为这很难做到,而且我不知道这样做是否可以显着改善运行时间。

当然,在检查大量可能性时,计算机比人类快。如今,即使智能手机如此之快,我也可以通过尝试所有可能性在一秒钟内解决此问题。(我没有对此进行测试。)只有六个数字,例如,如果有60个,它将有所不同。


该示例的解决方案虽然令人印象深刻,但并不像它最初看起来那样复杂。他的思维过程减去他可能尝试过的更明显的东西,可能是“我可以使用(100 + 6)* 9达到954,而我可以通过(100 + 6)* 3 * 75/25来完成。我剩下50,而50/25是2,因此我可以将50减去(100 + 6)* 3 * 75,再除以25“。
Tim Down

1

算法实际上并不难。

给定两个数字a和b,我们可以得出结果a + b,abs(a-b)(我不知道是否允许使用负数,在这种情况下,我们可以得出a-b和a + b),a * b,如果结果是整数,则可能是a / b或b / a。因此,可能的结果是一组最多五个数字。将此集称为S(a,b)。

取六个数字a,b,c,d,e和f。

对于两个数字的每个子集,找到它们可以产生的数字。

然后针对三个数字的每个子集,找到它们可以产生的数字:S(a,b,c)= S(S(a,b),c)并集S(S(a,c),b)并集S( S(b,c),a)。

然后,对于4个或5个数字的每个子集都相同,然后对所有6个数字都相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.