我有数字的矢量 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)
是否可以避免使用算法:
我问,因为我必须用 y 作业启动 x 任务(线程)。在为此工作时间定义之后,每个工作都应重新运行(我们将需要结束此工作的工作时间在此主要向量 f 中估算)
你可以给我一些建议吗?答案 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},这些启发式方法都不会有效。 (即指数分布)。
如果您告诉我们更多关于您期望的数字的分布,那么很有可能有人能够产生合理的启发式算法。
从您的问题来看,似乎有点像这些数字与线程的运行时间有关,因此您希望在多个线程之间平均分配工作。如果是这种情况那么这不是正确的解决方案 - 使用具有固定线程池和优先级队列的执行器服务,它优先考虑最长的运行任务,在这种情况下它总是启动最长的剩余任务,这通常会确保所有线程大致完成。