使用最大连接上限计算总体下载时间

时间:2014-05-16 15:08:39

标签: multithreading algorithm

有人可以向我指出用最大连接上限计算下载估算的算法。例如,我有7台具有不同下载速度的PC,我只能同时下载X设备。

Speed(Kbps) Size(Kb)    Estimate(s)
10          1000        100
50          1000        20
100         1000        10
200         1000        5
10          1000        100
20          1000        50
40          1000        25

*估计=大小/速度

我想到的是Sum(Estimate)/MaxConnections,但似乎不准确。

如果X = 2,那么使用该逻辑的结果将是310/2 = 155,但在现实生活中它将是160:

1st iteration:
1 thread: 100s
2 thread: 100s

总累计:100秒

2nd iteration:
1 thread: 50s
2 thread: 25s + 20s + 5s

总耗时:150秒

3rd iteration:
1 thread: 10s

总耗时:160秒

1 个答案:

答案 0 :(得分:2)

它似乎是k-partition problem的变体,您希望在其中拆分'在您拥有的X设备之间尽可能均匀地工作。不幸的是,这个问题是NP-Complete没有已知的有效解决方案

当X = 2且估计是相对较小的整数时,有一个pseudo-polynomial solution to the problem using Dynamic Programming
然而,对于一般的X,问题是没有已知的伪多项式解。

你能做什么:

  • 使用诸如Genetic Algorithms之类的启发式解决方案来分割 团队合作。这些解决方案通常会很好 - 但不是最佳的。
  • 使用强力方法找到最佳解决方案。请注意,只有在您要下载的项目数量非常少时才可行,特别是O(X^n)n是您下载的元素数量。