Algorithm 在一组频率值中,如何找到和谐相关频率值的最佳子集?

Algorithm 在一组频率值中,如何找到和谐相关频率值的最佳子集?,algorithm,Algorithm,我有一组频率值,我想找到满足以下条件的最可能的值子集: 每个子集中的值应协调相关(近似为给定值的倍数) 子集的数量应尽可能少 每个子集应具有小于最高值的最小缺失谐波数 例如,[1,2,3,4,10,20,30]应返回[1,2,3,4]和[10,20,30](包含所有值的集合不是最优的,因为即使它们是和谐相关的,也有许多缺失值) 蛮力方法可以是计算集合中所有可能的值子集并计算一些成本值,但这将花费太长的时间 是否有任何有效的算法来执行这项任务(或类似的任务)?我会将问题简化为,尽管NP困难,但

我有一组频率值,我想找到满足以下条件的最可能的值子集:

  • 每个子集中的值应协调相关(近似为给定值的倍数)

  • 子集的数量应尽可能少

  • 每个子集应具有小于最高值的最小缺失谐波数

例如,[1,2,3,4,10,20,30]应返回[1,2,3,4]和[10,20,30](包含所有值的集合不是最优的,因为即使它们是和谐相关的,也有许多缺失值)

蛮力方法可以是计算集合中所有可能的值子集并计算一些成本值,但这将花费太长的时间


是否有任何有效的算法来执行这项任务(或类似的任务)?

我会将问题简化为,尽管NP困难,但在实践中通常可以通过整数规划有效地解决。我假设将[1,2,3,4,8,12,16]分解为[1,2,3,4]和[4,8,12,16],并重复4次是合理的

为了求解集合覆盖(不管怎样,使用股票整数规划求解器),我们需要枚举所有允许的最大子集。如果基本值(即给定值)必须属于集合,那么,对于每个频率,我们可以按顺序枚举其倍数,直到丢失一行中的太多。如果不是,我们尝试所有频率对,假设它们的基频是它们的基频,并向下和向上扩展子集,直到丢失太多的频率