【发布时间】:2021-02-15 20:22:20
【问题描述】:
一位朋友请我回答一个小挑战,以及我们是否可以找到最佳解决方案。挑战在于,给定一组随机的负数和正数,ie. (-10, -7, -4, -3, 1, 4, 4, 6, 12) 我们如何为等于 0 的正数和负数集创建一个有效的算法,留下最少的未使用数?
示例:给定集合 (-10, -7, -4, -3, 1, 4, 4, 6, 12)
0 的可能集合:{-10, -7, 1, 4, 12}, {-4, 4}
剩余数字:{-3, 6}
一些想法是尝试动态编程,但我预见到要在很长的时间范围内完成会出现问题。另一个想法是尝试创建一个线性程序,其中所有数字排列在一个集合中,并创建尝试达到 0 的子集,这遇到了以前的负数可以被使用但被忽略的问题,除非使用 for 循环来重复负数值大于 0 时的数字。
【问题讨论】:
-
那你有什么问题?
-
不,关于回答我的问题。我没有看它是否难于 NP,因为我目前正试图自己解决它。所以看起来,无论算法如何,它都会以指数方式运行。问题在于寻找 0 集的有效算法,但我制定的算法一直呈指数级增长,我不知道其他人是否有避免它的想法。
-
@EvilDrCoconut 这有时被称为最简单的难题。因为它是 NP 完全的,但动态规划解决方案在伪多项式时间内运行,这在实践中非常好。
标签: algorithm