东北师范大学预备研一学生 jinxi20111 2024.05.27
记录一下我的学习过程
题目
SPP问题——集合划分问题
该问题中,有N个元素和M个约束。每个元素拥有一个代价P,并拥有一个约束的子集。问题要求,选择任意个元素,使得这些子集的并集为全集,并且交集为空集的条件下,代价和最小。
其实就是,N个人,M个数,每个人拿着其中几个数字。你选任意个人,这几个人把M个数字都拿全了还得没有重复数字。
满足这样条件的人大概率有好几组,还得选年龄加和最小的。
谈到这个问题的时候,会涉及一个概念,叫做 NP-HARD 和 NP-COMPLETE 叫NP难、NP完全问题。这个玩意说实话,我现在也不是很明白。我的理解是,这就是SPP和很多问题的一个特征:你想要知道一个解(你选择的几个人)是否正确(有M个数字且不重复),是非常简单就能验证真假的。但如果你想知道最优解,或者满足某个条件的解是否存在,又或者是你现在的解是否是最优解,则你可能要验证所有可行解才能确保结果一定正确。
这时候,就会有这样一种疑问:那我全验证了不行吗?
行也不行。
不行的地方在于,SPP问题并不是一个小众的问题,这种集合划分在很多领域都有非常优秀的应用场景。在这种情况下,仍然没有行之有效的优化算法横空出世,其实某种程度上已经说明了问题。主要问题在于,问题规模太大了,动不动就是几十万个元素,几百万的约束。根据组合数学,产生的可能解足够淹没普通计算机的性能。在求解完成前,答案可能就已经不重要了(笑 )
PS:这让我想起了密码学的一个重要理论,原话我不记得了,大概意思是,密码并不需要无法破解,只需要在其加密的内容失效前无法破解就行。一切想要让其无法破解的努力其实都是冗余的。
那为什么还说行呢?行的地方在于三点:一是摩尔定律年年都有人说要失效,结果年年都在进步。超级计算机的计算力也日渐膨胀。可能在不久的将来,力大飞砖,一力降十会(这个字居然是会,我一直以为是慧),一切算法都没有用了,直接暴力模拟。
第二点,量子计算机某种程度上是该类型问题的专杀。就像粘鼠板打老鼠,蟑螂药杀蟑螂。量子计算机并不是通用计算机,只能通过某种可以称为模拟的方式,手动暴力求解。但受限的计算范围,换来的是远超普通计算机的超级计算速度。未来SPP问题可能也会被这玩意彻底消灭。
第三点,SPP虽说一定有一个确定的结果:无解或者是一个确定的解。但其实大多数情况下,我们并不追求最好,只追求超过某个限度的较好。这其实就给很多科研人员一个缝隙,去追求一个比较好的解,而非验证其最优。
而今天的我,站在这座小山的山脚,仰望着众多默默攀爬的人,开始规划一条我自己的小路……
(未完待续)
//jinxi20111 2024.05.27