2014-05-14 64 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