微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何找到while循环和递归算法的复杂度?

如何解决如何找到while循环和递归算法的复杂度?

我正在尝试确定给定算法的复杂性如何随 N 增长。

1.
float epsilon = 0.001;
int a = 0;
int b = N - 1;
while (b - a > epsilon)
{
    int m = (int)((b + a) / 2);
    if (arr[m] > 0)
        b = m;
    else
        a = m;
}

2.
void f(int n)
{
    if (n == 0)
        printf("Hello\n");
    else
    {
        f(n - 1);
        f(n - 1);
    }
}
f(N);

对于第一个,我认为它将是 o(n) = N ,但我不确定。

谁能解释一下如何找到第一个和第二个算法的复杂度?

解决方法

第一个算法:

正如所写,abint 而不是 float 是没有意义的,我将假设后者。也是 N 而不是 N-1

观察到在每次迭代中,ab 之间的距离减半,只要它超过 epsilon。因此迭代次数为 ceiling(lg(N/epsilon)),即从 N 减少到小于 epsilon 所需的时间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。