【问题标题】:Divide and Conquer Algorithm Running Time分而治之算法运行时间
【发布时间】:2013-12-19 23:53:31
【问题描述】:

我无法确定以下算法的运行时间。

bool IsMeasurable(int target, vector<int> & weights, int index) {
    if (target == 0) return true;
    if (index >= weights.size()) return false;
    return (IsMeasurable(target-weights[index],weights,index+1) ||
            IsMeasurable(target+weights[index],weights,index+1) ||
            IsMeasurable(target,weights,index+1));
 }

bool IsMeasurable(int target, vector<int> & weights) {
    return IsMeasurable(target,weights,0);
}

该函数确定它是否可以在给定权重向量的情况下测量给定的目标权重。我们从向量中的第一项开始,递归地调用函数,加上、减去和保留具有目标权重的当前项。

我知道遍历向量需要 O(n) 时间,但是我如何考虑递归调用来确定运行时间?

【问题讨论】:

标签: c++ algorithm big-o


【解决方案1】:

在每个递归索引处递增 1。此外,它分为三个递归调用。

因此,最坏情况下的时间复杂度应为O(3^N),其中 N 是向量的大小。

您可以将递归调用视为一棵树,其中每个节点在每一步都分支为三个节点。

1
1 1 1
111 111 111
..

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 2013-02-02
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 2012-01-01
    • 2015-07-10
    • 2013-02-03
    • 2019-06-03
    相关资源
    最近更新 更多