设定平均点数和

时间:2014-05-14 11:53:37

标签: algorithm

我有数字的矢量 f [2 5 7 1 4 3]我想创建 n 线程,这些线程的免费金额围绕'主矢量'的数字。我们假设 n 是2

2 + 5 + 7 + 1 + 4 + 3 = 22 / n = 11

所以我需要创建一对:

[7 4] because it's 11
[2 5 3 1] because it's 11 (or near eleven)

是否可以避免使用算法:

  1. 将矢量 f (长度从2到6)
  2. 的所有可能组合
  3. 过滤所有生成的组合,找到 n ,其总和大约为11
  4. 我问,因为我必须用 y 作业启动 x 任务(线程)。在为此工作时间定义之后,每个工作都应重新运行(我们将需要结束此工作的工作时间在此主要向量 f 中估算)

    你可以给我一些建议吗?

1 个答案:

答案 0 :(得分:0)

这很大程度上取决于你想要回答的确切方式,以及数字的分布。例如,如果分布在一段时间内通常几乎是一致的,那么对列表进行排序并挑选出每个数字都会很有效。

e.g。这里{1,2,3,4,5,7}是你的数字排序,所以请{1,3,5}& {2,4,7}。如果元素的数量完全除以组的数量,那么取第一个和最后一个数字会更好。例如。如果n = 3,则取{1,7} {2,5} {3,4}。

如果数字为{1,10,100,1000,10000},这些启发式方法都不会有效。 (即指数分布)。

如果您告诉我们更多关于您期望的数字的分布,那么很有可能有人能够产生合理的启发式算法。

从您的问题来看,似乎有点像这些数字与线程的运行时间有关,因此您希望在多个线程之间平均分配工作。如果是这种情况那么这不是正确的解决方案 - 使用具有固定线程池和优先级队列的执行器服务,它优先考虑最长的运行任务,在这种情况下它总是启动最长的剩余任务,这通常会确保所有线程大致完成。