在今天的《卫报》(英国报纸)中,在 Chris Maslanka 第 43 页的“Pyrgic 谜题”部分,给出了以下谜题:
三位智者……去赫罗德做圣诞购物。Caspar 买了 Gold,Melchior 买了 Frankincense,Balthazar 买了一份Daily Myrrh。收银员输入了每件物品的欧元数,并打算将这三个数字相加,但是却将它们相乘。...令人惊奇的是,结果完全相同:65.52 欧元。三个总和是多少[我假设他的意思是三个数字]?
我的解释是:找到a、b和c使得a + b + c = abc = 65.52 (确切)其中a、b和c是不超过两位小数的正十进制数。因此a、b和c也必须小于 65.52(大约)。
因此,我的方法是:我将找到a、b和c的所有候选集,其中a + b + c = 6552 和a、b和c是 {1 ... 6550} 的整数(理论上我已经将所有操作数相乘为方便起见,减 100)。然后,对于所有候选集,通过将所有操作数除以 100 然后将它们相乘(使用任意精度算术)来满足另一个条件是微不足道的。
正如我所看到的,这是子集和问题的一个实例。所以我实现了一个脏(指数时间)算法,它找到了一个不同的解决方案:a=0.52,b=2,c=63。
好的,对于子集和问题有更好的算法,但你不认为这对于普通的卫报读者来说有点遥不可及吗?
第 40 页列出了答案:
这很容易,通过反复试验。猜猜每日没药的价格为 52 便士。但是乘以 0.52 大约是减半,所以我们需要一个和大约为 2;所以试试 2 X 63 X 0.52。等等瞧。这个答案是独一无二的吗?
好吧,我们知道答案是独一无二的(忽略 2、63 和 0.52 的其他排列)。
我想知道的是:这怎么可能“容易”?我将这个谜题描述为子集和问题的一个例子是否正确?我是否忽略了可用于简化解决方案的难题的某些特征?是否有人能够采用类似的“反复试验”方法,如果可以,他们可以带我完成吗?Chris Maslanka 是否对 NP 完全问题毫不畏惧?