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

斐波那契生成的渐近和实际运行时间中的常数与系统因素

如何解决斐波那契生成的渐近和实际运行时间中的常数与系统因素

我实现了一个简单的 DP 方法来计算理论上在线性时间内运行的斐波那契数

vector<ull> fib_iter(int len) {
    vector<ull> fibs = {0,1};
    for (int i = 2; i < len; ++i){
        fibs.push_back(fibs[i-1]+fibs[i-2]);
    }
    return fibs; 
}

当使用 chrono 库计时时,计算前 10 需要 12.8 微秒,前 100 需要 18.8 微秒,前 1000 需要 63.3 微秒。我的问题是为什么这些不都比最后。这不可能是因为恒定因素,因为它们是固定的,因此必须是因为系统优化。是编译器内联、缓存、一些架构怪癖,还是在系统细节方面究竟是什么?当我以递归方式或使用矩阵求幂实现此算法时,我们看不到 10 倍跳跃的原因是否与此相同?

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