第K个元素N * N和向量

乔尔吉

我有一个未排序的向量V , |V| = N,我需要K-th在已排序的向量中找到元素

S = {V[i] + V[j] | 0 <= i,j < N}, |S| = N*N

我想,以升序排序V,然后只计算第一个K从要素S或降序排列,并计算(N * N) - K是否K > (N * N) / 2但是

N = 50.000 and K = 2.265.604.247

从Java到1迭代需要0.2秒,N*N-K而我最多需要0.3秒。有人可以提示我如何执行此操作吗?

特布基奇

这是我对解决方案的想法。
我认为它应该比计算一切都快得多,您应该考虑一下。


V是对向量长度排序的n,我们想找到k最大的笛卡尔积VxV = {v1+v2|,v1,v2∈V}

我们将使用类似于二进制搜索的搜索方法来查找通缉电话号码。

注意:
对于每个数字MM = m+m, m < max{v|v∈ V}我们定义set X = {x ∈ VxV, x<=m+m=M}很容易找到|X|max{X}使用它:

  1. 遍历Vwith索引i
  2. 对于每一个v = V[i]v' = M-V[i]
  3. 使用二进制搜索,找到索引jso:w = V[j] <= v'j+1>n OR V[j+1] > v'
  4. 对于每个循环i,将所有计算出的总和相加j那是中的数字元素X
  5. max{X}v+w每对i计算出的最大值j,因此您也需要记住它。

通过选择不同的值M(使用二进制搜索方法),您可以找到Mfor的|X| = k找到它之后,max{X}就是您的解决方案。


PS。我删除了以前的答案,因为它包含了我认为已经删除的部分,并且因为我写的是为了 V 的元素的乘法 而不是加法。不便之处,敬请原谅。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将第 N 个元素推入元素 K-1 的向量后,对象指针向量的元素 K 变为空

来自分类Dev

从第n个元素开始迭代向量

来自分类Dev

从第n个元素开始迭代向量

来自分类Dev

在O(log n)中找到第k个最小元素

来自分类Dev

如何在C ++中找到向量的第m个和第n个元素之间的max元素?

来自分类Dev

向量化获取每个第n个元素(但第n个元素是可变的)

来自分类Dev

停在第n个元素?

来自分类Dev

列表的第n个元素

来自分类Dev

Grep 第 n 个元素

来自分类Dev

在R中向量的第n个元素之后加上值

来自分类Dev

在R中向量的第n个元素之后加上值

来自分类Dev

如何选择具有最大第 n 个元素的向量

来自分类Dev

在向量组合上减去第 n 个元素

来自分类Dev

如何将第n个元素设置为等于K

来自分类Dev

第n个K数的最佳算法

来自分类Dev

CSS div第n个子元素,每第2个和第3个文本加粗

来自分类Dev

模板参数包访问第N个类型和第N个元素

来自分类Dev

如何到达向量的第N个元素,其中内部向量可能具有不同的长度?

来自分类Dev

找到满足条件的第n个元素?

来自分类Dev

迭代器中的第n个元素

来自分类Dev

分组数组的第n个元素

来自分类Dev

如何获得集合的第n个元素

来自分类Dev

Javascript:采用数组的第n个元素

来自分类Dev

OCaml:提取元组的第n个元素?

来自分类Dev

BeautifulSoup:查找元素的第n个出现

来自分类Dev

Javascript:采用数组的第n个元素

来自分类Dev

如何获得Seq的第n个元素?

来自分类Dev

访问矩阵的第n个元素

来自分类Dev

Javascript映射数组的第n个元素