首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >时空算法复杂度

时空算法复杂度
EN

Stack Overflow用户
提问于 2022-07-10 08:44:42
回答 1查看 50关注 0票数 0

我正在为一个编码问题编写蛮力方法--我需要用最大步长k来计算数组中的最大得分路径。

输入:num= 1,-1,-2,4,-7,3,k=2输出:7解释:您可以选择形成子序列1,-1,4,3。总数是7。

我遇到了计算复杂性的问题。我的想法是,在每个项目上,我们可以调用函数k次,因此时间和空间是O(k^n),其中n是数组的长度。我的第二个猜测:对于第一个元素,我们最多调用1次函数,第二次调用2次(即k> i)等等。因此,我们有和1+2+…+k+k+…+k=(1+ k) / 2)k +(k+ k) / 2) /(N)= O(k^2)。我认为第一个是正确的,但我不能确定原因:/

以下是我的Java代码:

代码语言:javascript
复制
public int maxResult(int[] nums, int k) {
    return maxResult(nums, k, nums.length - 1);
}

private int maxResult(int[] nums, int k, int index) {
    if (index == 0)
        return nums[0];
    int max = Integer.MIN_VALUE;
    int start = index - k < 0 ? 0 : index - k;
    
    for ( int i = start; i < index; i++ ) {
        int res = maxResult(nums, k, i);
        System.out.println(i);
        max = Math.max(res, max);
    }
    return max + nums[index];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-10 09:49:55

对于特定k的代码,递归关系是

代码语言:javascript
复制
C(n) = sum(C(n-i) for i = 1...k) for n>k
C(n) = C(1) + C(2) + ... + C(n-1) for n <= k
C(1) = 1

这是高阶斐波那契数的递推关系,它被k-1位移动.即C(n) = kFib(k,n+k-1)。k-Fibonacci数随Theta( alpha ^n)的增长而增长,其中α是基于k-的常数,对于k=2,α是黄金比率,随着k的增加,α越来越接近2。(具体来说,alpha是(x^k - x^(k-1) -…-x-1)的正根)。

因此C(n) = kFib(k,n+k-1) =Theta(α^(n+k))。

因为alpha总是小于2,所以O(2^(n+k))是一个简单的正确界,虽然不是紧的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72927233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档