如何解决先验和渐进复杂度
如何确定以下程序代码的先验和渐进复杂性?#include<stdio.h>
int br_nacina_zaba(int br_lopoca,int tren_poz,int korak) {
if (korak == 18) return 0;
else if (tren_poz == br_lopoca) return 1;
else if (tren_poz <= 0 && korak != 0) return 0;
else if (tren_poz > br_lopoca) return 0;
else return
br_nacina_zaba(br_lopoca,tren_poz + 2,korak + 1)
+ br_nacina_zaba(br_lopoca,tren_poz + 3,tren_poz - 2,tren_poz - 3,korak + 1);
}
所以我需要知道函数br_nacina_zaba(n,0)
的复杂性。
解决方法
我认为ѭ1)在O(1)中。 (第四个)调用树的最大深度在函数的第一个LOC中受19限制:
korak
在每次递归调用中递增。如果您以korak=0
开头,并且在每个递归步骤中最多调用4次该函数,则最多将有4 ^ 18个递归调用。 4 ^ 18不依赖于n,因此函数在O(1)中。
,我不知道您的意思是“函数的复杂性”,但是我在键盘上运行了您的函数(http://codepad.org/jFUW1ATj),并得到了此结果
br_nacina_zaba(1、0、0)被调用了5次。
br_nacina_zaba(2,0,0)被调用了5次。
br_nacina_zaba(3,0,0)被调用9次。
br_nacina_zaba(4,0,0)被调用了77次。
br_nacina_zaba(5,0,0)被调用了33445次。
br_nacina_zaba(6,0,0)被调用1048573次。
br_nacina_zaba(7,0,0)被调用15530681次。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。