我有一个未排序的矢量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