2014-05-14 62 views
0

我有向量号码[2 5 7 1 4 3] F的和我想创建Ñ线程应该具有自由号码“围绕”的量主要向量。假设ñ是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. 过滤所有基因组编辑组合找到ň其总和各地的11

我问,因为我必须与Ÿ工作要做开始X任务(线程)。每一个工作应该是重播这个工作时间(工作时间,我们将要结束这项工作在这个主要载体˚F估计)

你能指点我定义的东西后?

+1

如果可能的话,那么我认为现在还不知道。你的问题是[3SUM](http://en.wikipedia.org/wiki/3SUM)着名问题的延伸 - 并且这可以在最好的时间在次级时间解决。 –

+0

你在用什么语言?如果这不是一个编程问题,我想你应该考虑一些其他论坛。 – jsalonen

+0

c#是我的编程语言 – Puchacz

回答

0

很多这取决于你如何回答这个问题,以及数字的分布。例如,如果分布在一个时间间隔内通常几乎是一致的,那么对列表进行排序并挑选出每个数字将工作得很好。

例如这里{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},这些启发式算法都不会奏效。 (即指数分布)。

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

从你的问题来看,这些数字看起来有点像线程的运行时间,所以你想在多个线程之间平均分配工作。如果是这种情况,那么这不是一个正确的解决方案 - 使用具有固定线程池和优先级队列的执行器服务,该队列优先处理最长时间运行的任务,在这种情况下,它始终启动最长的剩余任务,确保所有线程大致完成。

+0

我有问题来构建算法,它将实现我所有的假设。 1. n个线程 2.每个测试需要一定的时间,并应与本次测试的时间间隔 3.定义运行有高度可能性,即线程计数<测试 这就是为什么我试图重新排序的任务(我认为有一些第二和第三点不一致) – Puchacz