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

计算空间复杂度
EN

Stack Overflow用户
提问于 2021-06-03 19:10:50
回答 1查看 30关注 0票数 1

我得到了这段代码的样本,我不确定这里的空间复杂度是多少。

代码语言:javascript
复制
void f1(int n){
    int b = 2;
    while (n >= 1){
        b *= b;
        n /= 2;
    }
    free(malloc(b));
}

就循环而言,它运行log(n)次,但变量b呈指数增长。

这就是为什么我不知道发生了什么。

感谢您在这方面的帮助:)

EN

回答 1

Stack Overflow用户

发布于 2021-06-06 19:03:26

首先,如果您按原样运行它,那么您将获得内存溢出,因为大多数数值数据类型的内存有限(例如,32位)。因此,我假设您在图灵机上运行该算法,图灵机是一个理想化的计算机模型。在这种情况下,n将比b的最后一个值小得多。此外,我假设您的目标是计算b的最后一个值,因此您需要在内存末尾写入b的值(例如二进制)。记住这些,你只需要使用足够的空间,在内存(磁带)上记录所有的b值。你不需要太多的内存,只需要记录最后b取的值。因此,你的空间复杂度是$O(2^{2^{log_2(n)}})$,简单地说就是O(2^n)

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

https://stackoverflow.com/questions/67820368

复制
相关文章

相似问题

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