我有一個未排序的矢量V , |V| = N
,我需要找到K-th
元素排序向量K-個元素N * N和向量
S = {V[i] + V[j] | 0 <= i,j < N}, |S| = N*N
我想以升序V
然後只計算第一從S
K
元件或降序排序,並計算(N * N) - K
如果K > (N * N)/2
但對於
N = 50.000 and K = 2.265.604.247
Java中需要0.2秒才能從1重複到N*N-K
,我需要在最大0.3秒內完成此操作。有人可以給我一個提示如何做到這一點?
如果您有嚴格的性能要求,最好轉向分析器並分析代碼的運行時行爲。如果你可以在那裏識別「熱點」,你可以在這裏發佈相應的代碼來幫助改進它。只需對算法進行說明,我們應該怎樣做才能「修復」實現的性能? – GhostCat 2015-04-05 08:11:39
是否包含'V [k] + V [k]'('i = k = j')故意? (請參閱tbukic的答案中的措辭。)tbukic的方法的時間複雜度是多少? 'S'的第一個元素是'2V [0]'(或者'V [0] + V [1]'等待定義) - 第二個元素可能的組合是什麼?如何有效地枚舉它們? – greybeard 2015-04-05 15:57:33