c++ - 以每个元素等于两个数字的最小和的方式填充数组,使得

标签 c++ arrays algorithm data-structures

给定一个数组(仅包含 正数 整数)已经有前 k 个元素:a1, a2, .... ak
我需要填充剩余的 (n - k) 元素(数组总共有 n 元素)。
n 的值约为 10 ^ 31 <= k <= n
每个 ai 的值是两个数字的最小和,使得这两个数字的位置之和等于 i

这是伪代码(我的算法):

for i = k + 1 to n
  a[i] = max_value
  for j = 1 to (i / 2)
    a[i] = min(a[i], a[j] + a[i - j])

时间复杂度:O(n^2)

问题:有没有其他方法可以更快地做到这一点?
我正在寻找可以在小于 O(n) 的时间内找到每个 ai 的值的任何数据结构或算法。

P/S:这是我程序中的一个过程,所以我需要尽快完成。

最佳答案

您可以通过使用线程并行运行最小值检查来提高程序速度。例如,您可以运行 4 个线程,每个线程检查 j 范围的 1/4。这将略微提高速度,但您的算法仍将花费 O(n^2) 运行时间。

我同意您很可能无法超越 O(n^2) 的评论。所以你最好的选择可能是尝试这样的事情来优化你的代码以减少 n^2 前面的系数。

关于c++ - 以每个元素等于两个数字的最小和的方式填充数组,使得,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24293222/

相关文章:

c++ - mbed-os 5上的Lwip无法建立正确的以太网连接

c++ - `decltype` 并将 ADL 查找与非 ADL 查找混合

c++11 使用 chrono 作为语法糖

javascript - 合并数组到对象数组 JavaScript

javascript - 在同一索引中将公共(public)数组元素对齐在一起

c++ - 从链表的末尾而不是从头开始读取值 C++

javascript - 使用对象作为数组索引有什么缺点(如果有的话)?

c - 为什么 C 程序将空行打印到文件?

algorithm - 来自移动键盘的可能单词计数 - 动态编程方法

ruby-on-rails - Rails 中的强制二进制矩阵公司结构实现