当前位置: 首页 > 知识库问答 >
问题:

为什么最大和子数组的蛮力是O(n^2)?

韶镜
2023-03-14
    null

在一个视频教程中,作者提到暴力方法是O(n^2),阅读另一个答案,一个人认为是O(n^2),另一个人认为是O(n^3)

强力是O(n^2)还是O(n^3)?更重要的是,您能说明您对蛮力方法执行了哪些分析以知道它是o(?)吗?

共有1个答案

上官鸿朗
2023-03-14

嗯,这取决于力量有多大。

如果我们生成所有(i,j):i<=j对并计算它们之间的和,则为O(n^3):

....
for (int i = 0; i < n; i++)
    for (int j = i; j < n; j++) {
        int sum = 0;
        for (int k = i; k <= j; k++)
            sum += a[k];
        if (sum > max)
            max = sum;
    }

如果我们从所有位置开始并计算运行和,它是O(n^2):

....
for(int i = 0; i < n; i++) {
    int sum = 0;
    for (int j = i; j < n; j++) {
        sum += a[j];
        if (sum > max)
            max = sum;
    }
}
 类似资料:
  • 现在我用不同的测试场景测试它,总是比Kadena的结果更好。我不相信这样的运气,但找不到我错过了什么。你能看看这是否是一个有效的解决方案吗? 更新代码的思想是只跟踪一个子数组,并添加到其尾数,当数字很低时,和成为尾数组后的负集开始。另外,一开始的负面项目被忽略了。子数组的头只是向前移动。每次sum看起来是maximal-maxsum并且限制被更新。

  • 我想不出哪里出了问题。任何帮助都将不胜感激! 下面是运行算法并将其打印到输出文件的函数: 以下是主文件:

  • 问题内容: 我刚刚开始学习数据结构,并且在进行数组插入时想知道为什么数组插入的时间复杂度为O(n)而不是O(n + 1)? 在最佳情况下,当插入在最后时,时间复杂度为O(1)。我想我们正在考虑1插入元素,因为这里没有元素被移动。在最坏的情况下,假设我们必须移动n个元素然后插入新元素,那么时间时间复杂度是否应该为O(n + 1)?n用于移动元素,1用于插入。 非常感谢您的帮助。 问题答案: O(n)

  • 正如你从标题中所看到的,我正在努力对因子为2个素数的大整数进行强制因子分解。我想知道是否有一种方法可以在for循环中使用for循环。我知道这是一种很糟糕的方式,但无论如何我都愿意这样做。(我本来打算使用费马分解定理,但如果没有一些额外的方法/库,你就不能求大整数,我无法做到这一点),所以请尝试一下,看看你是否可以帮助我。大致如下: 显然,这太可怕了,我知道你不能通过说i.nextPossibleP

  • 我想出了一个蛮力算法来寻找两个给定字符串之间最长的公共子序列。它看起来时间复杂度为O(n^3)。它通过了我所有的测试用例,但我仍然不确定它是否会通过所有的测试用例......请让我知道这是正确的蛮力算法? 如果上面的代码不对,我要蛮力算法返回最长的公共子序列字符串,,我怎么才能做到这一点???

  • null 请在此基础上向我澄清。谢谢你的合作。