【发布时间】:2016-11-08 18:35:40
【问题描述】:
请您分享您对以下问题的想法
假设你有一个像
这样的一维矢量数据Data=[ a1 a2 a3 a4..... an]; 0<ai<100
我们如何找到数据的子集,例如
Data_subset=[ a3 a7 a8] or Data_subset=[ a1 a17 a81 a92 a93 a100 a101 ]
最能满足这个条件:abs(sum(Data_subset)-700)<10
有什么想法吗?
【问题讨论】:
-
这似乎与knapsack problem 非常相似,众所周知,这很难完全解决
-
我称之为subset sum problem。
-
当你说“哪个最能满足这个条件”时,你的意思是你想要任何保持
abs(sum(Data_subset)-700) < 10为真的子集,还是你想要具有最小值abs(sum(Data_subset)-700)的子集? -
事实上,它更像是子集和问题的软约束变体,就像@beaker 提到的那样。
-
感谢您宝贵的cmets。看来我有一个严重的数学挑战。 @Noel Segura:是的。子集的长度并不重要,它们的总和非常接近我们的常数的子集。比如说,总和(子集)= S+/-s